{"id":"6be32384d347dffeb21877d015d91386","_format":"hh-sol-build-info-1","solcVersion":"0.8.26","solcLongVersion":"0.8.26+commit.8a97fa7a","input":{"language":"Solidity","sources":{"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface for permissioned calling of external functions.\ninterface IAuthentication {\n /// @notice The sender does not have permission to call a function.\n error SenderNotAllowed();\n\n /**\n * @notice Returns the action identifier associated with the external function described by `selector`.\n * @param selector The 4-byte selector of the permissioned function\n * @return actionId The computed actionId\n */\n function getActionId(bytes4 selector) external view returns (bytes32 actionId);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice General interface for token exchange rates.\ninterface IRateProvider {\n /**\n * @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n * @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n * rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n * does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n * rates in downstream computations.\n *\n * @return rate The current token rate\n */\n function getRate() external view returns (uint256 rate);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Interface to the Vault's permission system.\ninterface IAuthorizer {\n /**\n * @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n * @param actionId Identifier for the action to be performed\n * @param account Account trying to perform the action\n * @param where Target contract for the action\n * @return success True if the action is permitted\n */\n function canPerform(bytes32 actionId, address account, address where) external view returns (bool success);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IUnbalancedLiquidityInvariantRatioBounds } from \"./IUnbalancedLiquidityInvariantRatioBounds.sol\";\nimport { ISwapFeePercentageBounds } from \"./ISwapFeePercentageBounds.sol\";\nimport { PoolSwapParams, Rounding, SwapKind } from \"./VaultTypes.sol\";\n\n/**\n * @notice Base interface for a Balancer Pool.\n * @dev All pool types should implement this interface. Note that it also requires implementation of:\n * - `ISwapFeePercentageBounds` to specify the minimum and maximum swap fee percentages.\n * - `IUnbalancedLiquidityInvariantRatioBounds` to specify how much the invariant can change during an unbalanced\n * liquidity operation.\n */\ninterface IBasePool is ISwapFeePercentageBounds, IUnbalancedLiquidityInvariantRatioBounds {\n /***************************************************************************\n Invariant\n ***************************************************************************/\n\n /**\n * @notice Computes the pool's invariant.\n * @dev This function computes the invariant based on current balances (and potentially other pool state).\n * The rounding direction must be respected for the Vault to round in the pool's favor when calling this function.\n * If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be\n * returned for both rounding directions.\n *\n * You can think of the invariant as a measure of the \"value\" of the pool, which is related to the total liquidity\n * (i.e., the \"BPT rate\" is `invariant` / `totalSupply`). Two critical properties must hold:\n *\n * 1) The invariant should not change due to a swap. In practice, it can *increase* due to swap fees, which\n * effectively add liquidity after the swap - but it should never decrease.\n *\n * 2) The invariant must be \"linear\"; i.e., increasing the balances proportionally must increase the invariant in\n * the same proportion: inv(a * n, b * n, c * n) = inv(a, b, c) * n\n *\n * Property #1 is required to prevent \"round trip\" paths that drain value from the pool (and all LP shareholders).\n * Intuitively, an accurate pricing algorithm ensures the user gets an equal value of token out given token in, so\n * the total value should not change.\n *\n * Property #2 is essential for the \"fungibility\" of LP shares. If it did not hold, then different users depositing\n * the same total value would get a different number of LP shares. In that case, LP shares would not be\n * interchangeable, as they must be in a fair DEX.\n *\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param rounding Rounding direction to consider when computing the invariant\n * @return invariant The calculated invariant of the pool, represented as a uint256\n */\n function computeInvariant(\n uint256[] memory balancesLiveScaled18,\n Rounding rounding\n ) external view returns (uint256 invariant);\n\n /**\n * @notice Computes a new token balance, given the invariant growth ratio and all other balances.\n * @dev Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath.\n * The pool must round up for the Vault to round in the protocol's favor when calling this function.\n *\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param tokenInIndex The index of the token we're computing the balance for, sorted in token registration order\n * @param invariantRatio The ratio of the new invariant (after an operation) to the old\n * @return newBalance The new balance of the selected token, after the operation\n */\n function computeBalance(\n uint256[] memory balancesLiveScaled18,\n uint256 tokenInIndex,\n uint256 invariantRatio\n ) external view returns (uint256 newBalance);\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Execute a swap in the pool.\n * @param params Swap parameters (see above for struct definition)\n * @return amountCalculatedScaled18 Calculated amount for the swap operation\n */\n function onSwap(PoolSwapParams calldata params) external returns (uint256 amountCalculatedScaled18);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\ninterface IERC20MultiTokenErrors {\n /**\n * @notice The total supply of a pool token can't be lower than the absolute minimum.\n * @param totalSupply The total supply value that was below the minimum\n */\n error PoolTotalSupplyTooLow(uint256 totalSupply);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n// Explicitly import VaultTypes structs because we expect this interface to be heavily used by external developers.\n// Internally, when this list gets too long, we usually just do a simple import to keep things tidy.\nimport {\n TokenConfig,\n LiquidityManagement,\n PoolSwapParams,\n AfterSwapParams,\n HookFlags,\n AddLiquidityKind,\n RemoveLiquidityKind,\n SwapKind\n} from \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for pool hooks.\n * @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n * they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n * should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n * then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\n */\ninterface IHooks {\n /***************************************************************************\n Register\n ***************************************************************************/\n\n /**\n * @notice Hook executed when a pool is registered with a non-zero hooks contract.\n * @dev Returns true if registration was successful, and false to revert the pool registration.\n * Make sure this function is properly implemented (e.g. check the factory, and check that the\n * given pool is from the factory). The Vault address will be msg.sender.\n *\n * @param factory Address of the pool factory (contract deploying the pool)\n * @param pool Address of the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param liquidityManagement Liquidity management flags indicating which functions are enabled\n * @return success True if the hook allowed the registration, false otherwise\n */\n function onRegister(\n address factory,\n address pool,\n TokenConfig[] memory tokenConfig,\n LiquidityManagement calldata liquidityManagement\n ) external returns (bool success);\n\n /**\n * @notice Return the set of hooks implemented by the contract.\n * @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n * (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n * `onRegister` is the only \"mandatory\" hook.\n *\n * @return hookFlags Flags indicating which hooks the contract supports\n */\n function getHookFlags() external view returns (HookFlags memory hookFlags);\n\n /***************************************************************************\n Initialize\n ***************************************************************************/\n\n /**\n * @notice Hook executed before pool initialization.\n * @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with initialization\n */\n function onBeforeInitialize(uint256[] memory exactAmountsIn, bytes memory userData) external returns (bool success);\n\n /**\n * @notice Hook to be executed after pool initialization.\n * @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param bptAmountOut Amount of pool tokens minted during initialization\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool accepts the initialization results\n */\n function onAfterInitialize(\n uint256[] memory exactAmountsIn,\n uint256 bptAmountOut,\n bytes memory userData\n ) external returns (bool success);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before adding liquidity.\n * @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param maxAmountsInScaled18 Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory maxAmountsInScaled18,\n uint256 minBptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after adding liquidity.\n * @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n * @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n * @param bptAmountOut Amount of pool tokens minted\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook\n */\n function onAfterAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory amountsInScaled18,\n uint256[] memory amountsInRaw,\n uint256 bptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsInRaw);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before removing liquidity.\n * @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOutScaled18,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after removing liquidity.\n * @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param bptAmountIn Amount of pool tokens to burn\n * @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n * @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook\n */\n function onAfterRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 bptAmountIn,\n uint256[] memory amountsOutScaled18,\n uint256[] memory amountsOutRaw,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsOutRaw);\n\n /***************************************************************************\n Swap\n ***************************************************************************/\n\n /**\n * @notice Called before a swap to give the Pool an opportunity to perform actions.\n * @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeSwap(PoolSwapParams calldata params, address pool) external returns (bool success);\n\n /**\n * @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n * @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n * use the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see above for struct definition)\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook\n */\n function onAfterSwap(\n AfterSwapParams calldata params\n ) external returns (bool success, uint256 hookAdjustedAmountCalculatedRaw);\n\n /**\n * @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n * @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n * @return success True if the pool wishes to proceed with settlement\n * @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value\n */\n function onComputeDynamicSwapFeePercentage(\n PoolSwapParams calldata params,\n address pool,\n uint256 staticSwapFeePercentage\n ) external view returns (bool success, uint256 dynamicSwapFeePercentage);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Interface for custom liquidity operations.\ninterface IPoolLiquidity {\n /**\n * @notice Add liquidity to the pool with a custom hook.\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param maxAmountsInScaled18 Maximum input amounts, sorted in token registration order\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Arbitrary data sent with the encoded request\n * @return amountsInScaled18 Input token amounts, sorted in token registration order\n * @return bptAmountOut Calculated pool token amount to receive\n * @return swapFeeAmountsScaled18 The amount of swap fees charged for each token\n * @return returnData Arbitrary data with an encoded response from the pool\n */\n function onAddLiquidityCustom(\n address router,\n uint256[] memory maxAmountsInScaled18,\n uint256 minBptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n )\n external\n returns (\n uint256[] memory amountsInScaled18,\n uint256 bptAmountOut,\n uint256[] memory swapFeeAmountsScaled18,\n bytes memory returnData\n );\n\n /**\n * @notice Remove liquidity from the pool with a custom hook.\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Arbitrary data sent with the encoded request\n * @return bptAmountIn Calculated pool token amount to burn\n * @return amountsOutScaled18 Amount of tokens to receive, sorted in token registration order\n * @return swapFeeAmountsScaled18 The amount of swap fees charged for each token\n * @return returnData Arbitrary data with an encoded response from the pool\n */\n function onRemoveLiquidityCustom(\n address router,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOutScaled18,\n uint256[] memory balancesScaled18,\n bytes memory userData\n )\n external\n returns (\n uint256 bptAmountIn,\n uint256[] memory amountsOutScaled18,\n uint256[] memory swapFeeAmountsScaled18,\n bytes memory returnData\n );\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IVault } from \"./IVault.sol\";\n\n/// @notice Contract that handles protocol and pool creator fees for the Vault.\ninterface IProtocolFeeController {\n /**\n * @notice Emitted when the protocol swap fee percentage is updated.\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event GlobalProtocolSwapFeePercentageChanged(uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated.\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event GlobalProtocolYieldFeePercentageChanged(uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol swap fee will be changed\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event ProtocolSwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol yield fee will be changed\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event ProtocolYieldFeePercentageChanged(address indexed pool, uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n * @param pool The pool whose pool creator swap fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool\n */\n event PoolCreatorSwapFeePercentageChanged(address indexed pool, uint256 poolCreatorSwapFeePercentage);\n\n /**\n * @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n * @param pool The pool whose pool creator yield fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool\n */\n event PoolCreatorYieldFeePercentageChanged(address indexed pool, uint256 poolCreatorYieldFeePercentage);\n\n /**\n * @notice Logs the collection of protocol swap fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the swap fee was charged\n * @param token The token in which the swap fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolSwapFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the collection of protocol yield fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the yield fee was charged\n * @param token The token in which the yield fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolYieldFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of protocol fees in a specific token and amount.\n * @param pool The pool from which protocol fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds\n * @param amount The amount of the fee token that was withdrawn\n */\n event ProtocolFeesWithdrawn(address indexed pool, IERC20 indexed token, address indexed recipient, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n * @param pool The pool from which pool creator fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n * @param amount The amount of the fee token that was withdrawn\n */\n event PoolCreatorFeesWithdrawn(\n address indexed pool,\n IERC20 indexed token,\n address indexed recipient,\n uint256 amount\n );\n\n /**\n * @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages.\n */\n error ProtocolSwapFeePercentageTooHigh();\n\n /**\n * @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages.\n */\n error ProtocolYieldFeePercentageTooHigh();\n\n /**\n * @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n * @param pool The pool with no creator\n */\n error PoolCreatorNotRegistered(address pool);\n\n /**\n * @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n * @param caller The account attempting to withdraw pool creator fees\n * @param pool The pool the caller tried to withdraw from\n */\n error CallerIsNotPoolCreator(address caller, address pool);\n\n /// @notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\n error PoolCreatorFeePercentageTooHigh();\n\n /**\n * @notice Get the address of the main Vault contract.\n * @return vault The Vault address\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Collects aggregate fees from the Vault for a given pool.\n * @param pool The pool with aggregate fees\n */\n function collectAggregateFees(address pool) external;\n\n /**\n * @notice Getter for the current global protocol swap fee.\n * @return protocolSwapFeePercentage The global protocol swap fee percentage\n */\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256 protocolSwapFeePercentage);\n\n /**\n * @notice Getter for the current global protocol yield fee.\n * @return protocolYieldFeePercentage The global protocol yield fee percentage\n */\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256 protocolYieldFeePercentage);\n\n /**\n * @notice Getter for the current protocol swap fee for a given pool.\n * @param pool The address of the pool\n * @return protocolSwapFeePercentage The global protocol swap fee percentage\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolSwapFeeInfo(\n address pool\n ) external view returns (uint256 protocolSwapFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current protocol yield fee for a given pool.\n * @param pool The address of the pool\n * @return protocolYieldFeePercentage The global protocol yield fee percentage\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolYieldFeeInfo(\n address pool\n ) external view returns (uint256 protocolYieldFeePercentage, bool isOverride);\n\n /**\n * @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n * @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n * pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n * stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n * It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n * components, but the truncation ensures it will not revert for any valid set of fee percentages.\n *\n * See example below:\n *\n * tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n * totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n * protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n * creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n * creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n * lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n *\n * @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n * @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n * @return aggregateFeePercentage The computed aggregate percentage\n */\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256 aggregateFeePercentage);\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol swap fee\n */\n function updateProtocolSwapFeePercentage(address pool) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol yield fee\n */\n function updateProtocolYieldFeePercentage(address pool) external;\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /**\n * @notice Add pool-specific entries to the protocol swap and yield percentages.\n * @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n * protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n * fee percentages, based on an initial pool creator fee of 0.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n * @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n * @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @return aggregateYieldFeePercentage The initial aggregate yield fee percentage\n */\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice Set the global protocol swap fee percentage, used by standard pools.\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage\n */\n function setGlobalProtocolSwapFeePercentage(uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Set the global protocol yield fee percentage, used by standard pools.\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setGlobalProtocolYieldFeePercentage(uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol swap fee\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool\n */\n function setProtocolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol yield fee\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool\n */\n function setProtocolYieldFeePercentage(address pool, uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator swap fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool\n */\n function setPoolCreatorSwapFeePercentage(address pool, uint256 poolCreatorSwapFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator yield fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool\n */\n function setPoolCreatorYieldFeePercentage(address pool, uint256 poolCreatorYieldFeePercentage) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawProtocolFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n * @param token Token to withdraw\n */\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n * @dev Sends swap and yield pool creator fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawPoolCreatorFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool.\n * @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n * value, this function is permissionless.\n *\n * @param pool The pool on which fees were collected\n */\n function withdrawPoolCreatorFees(address pool) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Return the minimum/maximum swap fee percentages for a pool.\n * @dev The Vault does not enforce bounds on swap fee percentages; `IBasePool` implements this interface to ensure\n * that new pool developers think about and set these bounds according to their specific pool type.\n *\n * A minimum swap fee might be necessary to ensure mathematical soundness (e.g., Weighted Pools, which use the power\n * function in the invariant). A maximum swap fee is general protection for users. With no limits at the Vault level,\n * a pool could specify a near 100% swap fee, effectively disabling trading. Though there are some use cases, such as\n * LVR/MEV strategies, where a very high fee makes sense.\n *\n * Note that the Vault does ensure that dynamic and aggregate fees are less than 100% to prevent attempting to allocate\n * more fees than were collected by the operation. The true `MAX_FEE_PERCENTAGE` is defined in VaultTypes.sol, and is\n * the highest value below 100% that satisfies the precision requirements.\n */\ninterface ISwapFeePercentageBounds {\n /// @return minimumSwapFeePercentage The minimum swap fee percentage for a pool\n function getMinimumSwapFeePercentage() external view returns (uint256 minimumSwapFeePercentage);\n\n /// @return maximumSwapFeePercentage The maximum swap fee percentage for a pool\n function getMaximumSwapFeePercentage() external view returns (uint256 maximumSwapFeePercentage);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Return the minimum/maximum invariant ratios allowed during an unbalanced liquidity operation.\n * @dev The Vault does not enforce any \"baseline\" bounds on invariant ratios, since such bounds are highly specific\n * and dependent on the math of each pool type. Instead, the Vault reads invariant ratio bounds from the pools.\n * `IBasePool` implements this interface to ensure that new pool developers think about and set these bounds according\n * to their pool type's math.\n *\n * For instance, Balancer Weighted Pool math involves exponentiation (the `pow` function), which uses natural\n * logarithms and a discrete Taylor series expansion to compute x^y values for the 18-decimal floating point numbers\n * used in all Vault computations. See `LogExpMath` and `WeightedMath` for a derivation of the bounds for these pools.\n */\ninterface IUnbalancedLiquidityInvariantRatioBounds {\n /// @return minimumInvariantRatio The minimum invariant ratio for a pool during unbalanced remove liquidity\n function getMinimumInvariantRatio() external view returns (uint256 minimumInvariantRatio);\n\n /// @return maximumInvariantRatio The maximum invariant ratio for a pool during unbalanced add liquidity\n function getMaximumInvariantRatio() external view returns (uint256 maximumInvariantRatio);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"../solidity-utils/helpers/IAuthentication.sol\";\nimport { IVaultExtension } from \"./IVaultExtension.sol\";\nimport { IVaultErrors } from \"./IVaultErrors.sol\";\nimport { IVaultEvents } from \"./IVaultEvents.sol\";\nimport { IVaultAdmin } from \"./IVaultAdmin.sol\";\nimport { IVaultMain } from \"./IVaultMain.sol\";\n\n/// @notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\ninterface IVault is IVaultMain, IVaultExtension, IVaultAdmin, IVaultErrors, IVaultEvents, IAuthentication {\n /// @return vault The main Vault address.\n function vault() external view override(IVaultAdmin, IVaultExtension) returns (IVault);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IVault } from \"./IVault.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultAdmin` contract.\n * @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n * as two delegate calls add gas to each call. Most of the permissioned calls are here.\n */\ninterface IVaultAdmin {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the Vault's pause window end time.\n * @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n * by governance. Balancer timestamps are 32 bits.\n *\n * @return pauseWindowEndTime The timestamp when the Vault's pause window ends\n */\n function getPauseWindowEndTime() external view returns (uint32 pauseWindowEndTime);\n\n /**\n * @notice Returns the Vault's buffer period duration.\n * @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n * This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodDuration The length of the buffer period in seconds\n */\n function getBufferPeriodDuration() external view returns (uint32 bufferPeriodDuration);\n\n /**\n * @notice Returns the Vault's buffer period end time.\n * @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused\n */\n function getBufferPeriodEndTime() external view returns (uint32 bufferPeriodEndTime);\n\n /**\n * @notice Get the minimum number of tokens in a pool.\n * @dev We expect the vast majority of pools to be 2-token.\n * @return minTokens The minimum token count of a pool\n */\n function getMinimumPoolTokens() external pure returns (uint256 minTokens);\n\n /**\n * @notice Get the maximum number of tokens in a pool.\n * @return maxTokens The maximum token count of a pool\n */\n function getMaximumPoolTokens() external pure returns (uint256 maxTokens);\n\n /**\n * @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n * @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n * is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n *\n * @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization\n */\n function getPoolMinimumTotalSupply() external pure returns (uint256 poolMinimumTotalSupply);\n\n /**\n * @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n * @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n * of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n * to the Vault, as buffers are not tokenized.\n *\n * @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization\n */\n function getBufferMinimumTotalSupply() external pure returns (uint256 bufferMinimumTotalSupply);\n\n /**\n * @notice Get the minimum trade amount in a pool operation.\n * @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n * @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number\n */\n function getMinimumTradeAmount() external view returns (uint256 minimumTradeAmount);\n\n /**\n * @notice Get the minimum wrap amount in a buffer operation.\n * @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n * @return minimumWrapAmount The minimum wrap amount in native underlying token decimals\n */\n function getMinimumWrapAmount() external view returns (uint256 minimumWrapAmount);\n\n /*******************************************************************************\n Vault Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault is paused.\n * @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n * ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n * also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n * `areBuffersPaused` to check the pause state of the buffers.\n *\n * @return vaultPaused True if the Vault is paused\n */\n function isVaultPaused() external view returns (bool vaultPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n * @dev Balancer timestamps are 32 bits.\n * @return vaultPaused True if the Vault is paused\n * @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n * @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period\n */\n function getVaultPausedState()\n external\n view\n returns (bool vaultPaused, uint32 vaultPauseWindowEndTime, uint32 vaultBufferPeriodEndTime);\n\n /**\n * @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n * @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n * Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n * the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n * are also paused (with `pauseVaultBuffers`).\n */\n function pauseVault() external;\n\n /**\n * @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n * deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n * `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\n */\n function unpauseVault() external;\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Pause the Pool: an emergency action which disables all pool functions.\n * @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n * deployment.\n *\n * @param pool The pool being paused\n */\n function pausePool(address pool) external;\n\n /**\n * @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n * deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n *\n * @param pool The pool being unpaused\n */\n function unpausePool(address pool) external;\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Assigns a new static swap fee percentage to the specified pool.\n * @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n * the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n * Emits the SwapFeePercentageChanged event.\n *\n * @param pool The address of the pool for which the static swap fee will be changed\n * @param swapFeePercentage The new swap fee percentage to apply to the pool\n */\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) external;\n\n /**\n * @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n * @dev Fees are sent to the ProtocolFeeController address.\n * @param pool The pool on which all aggregate fees should be collected\n * @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function collectAggregateFees(\n address pool\n ) external returns (uint256[] memory swapFeeAmounts, uint256[] memory yieldFeeAmounts);\n\n /**\n * @notice Update an aggregate swap fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateSwapFeePercentageChanged` event.\n *\n * @param pool The pool whose swap fee percentage will be updated\n * @param newAggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n function updateAggregateSwapFeePercentage(address pool, uint256 newAggregateSwapFeePercentage) external;\n\n /**\n * @notice Update an aggregate yield fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateYieldFeePercentageChanged` event.\n *\n * @param pool The pool whose yield fee percentage will be updated\n * @param newAggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n function updateAggregateYieldFeePercentage(address pool, uint256 newAggregateYieldFeePercentage) external;\n\n /**\n * @notice Sets a new Protocol Fee Controller for the Vault.\n * @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n * @param newProtocolFeeController The address of the new Protocol Fee Controller\n */\n function setProtocolFeeController(IProtocolFeeController newProtocolFeeController) external;\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Enable recovery mode for a pool.\n * @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n * Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n * must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n * balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n *\n * @param pool The address of the pool\n */\n function enableRecoveryMode(address pool) external;\n\n /**\n * @notice Disable recovery mode for a pool.\n * @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n * Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n * potentially fail if there is an issue with any associated Rate Providers.\n *\n * @param pool The address of the pool\n */\n function disableRecoveryMode(address pool) external;\n\n /*******************************************************************************\n Query Functionality\n *******************************************************************************/\n\n /**\n * @notice Disables query functionality on the Vault. Can only be called by governance.\n * @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n * settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n * queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n * This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n * disabling queries is completely necessary; queries can still be re-enabled after this call.\n */\n function disableQuery() external;\n\n /**\n * @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n * @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\n */\n function disableQueryPermanently() external;\n\n /**\n * @notice Enables query functionality on the Vault. Can only be called by governance.\n * @dev Only works if queries are not permanently disabled.\n */\n function enableQuery() external;\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault buffers are paused.\n * @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n * will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n * independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n * would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n *\n * @return buffersPaused True if the Vault buffers are paused\n */\n function areBuffersPaused() external view returns (bool buffersPaused);\n\n /**\n * @notice Pauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n * possible to pause vault buffers individually.\n *\n * This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n * and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n * buffers, and vice versa.\n */\n function pauseVaultBuffers() external;\n\n /**\n * @notice Unpauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n * If the Vault was also paused, it will remain in that state until explicitly unpaused.\n *\n * This is a permissioned call.\n */\n function unpauseVaultBuffers() external;\n\n /**\n * @notice Initializes buffer for the given wrapped token.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n * @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n * @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n * native decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n * (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\n */\n function initializeBuffer(\n IERC4626 wrappedToken,\n uint256 amountUnderlyingRaw,\n uint256 amountWrappedRaw,\n uint256 minIssuedShares,\n address sharesOwner\n ) external returns (uint256 issuedShares);\n\n /**\n * @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n * @dev The buffer needs to be initialized beforehand.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n * underlying token native decimals\n * @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n * token native decimals\n * @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n * in underlying token decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n * @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer\n */\n function addLiquidityToBuffer(\n IERC4626 wrappedToken,\n uint256 maxAmountUnderlyingInRaw,\n uint256 maxAmountWrappedInRaw,\n uint256 exactSharesToIssue,\n address sharesOwner\n ) external returns (uint256 amountUnderlyingRaw, uint256 amountWrappedRaw);\n\n /**\n * @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n * @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n * This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n *\n * Pre-conditions:\n * - The buffer needs to be initialized.\n * - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n * this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n * - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n * total shares. It is expressed in underlying token native decimals\n * @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n * in underlying token native decimals\n * @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n * wrapped token native decimals\n * @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n * @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user\n */\n function removeLiquidityFromBuffer(\n IERC4626 wrappedToken,\n uint256 sharesToRemove,\n uint256 minAmountUnderlyingOutRaw,\n uint256 minAmountWrappedOutRaw\n ) external returns (uint256 removedUnderlyingBalanceRaw, uint256 removedWrappedBalanceRaw);\n\n /**\n * @notice Returns the asset registered for a given wrapped token.\n * @dev The asset can never change after buffer initialization.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n * has not been initialized.\n */\n function getBufferAsset(IERC4626 wrappedToken) external view returns (address underlyingToken);\n\n /**\n * @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n * in the buffer.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n * @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals\n */\n function getBufferOwnerShares(\n IERC4626 wrappedToken,\n address liquidityOwner\n ) external view returns (uint256 ownerShares);\n\n /**\n * @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals\n */\n function getBufferTotalShares(IERC4626 wrappedToken) external view returns (uint256 bufferShares);\n\n /**\n * @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n * @dev All values are in native token decimals of the wrapped or underlying tokens.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n * @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals\n */\n function getBufferBalance(\n IERC4626 wrappedToken\n ) external view returns (uint256 underlyingBalanceRaw, uint256 wrappedBalanceRaw);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Sets a new Authorizer for the Vault.\n * @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n * @param newAuthorizer The address of the new authorizer\n */\n function setAuthorizer(IAuthorizer newAuthorizer) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Errors are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultErrors {\n /*******************************************************************************\n Registration and Initialization\n *******************************************************************************/\n\n /**\n * @notice A pool has already been registered. `registerPool` may only be called once.\n * @param pool The already registered pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /**\n * @notice A pool has already been initialized. `initialize` may only be called once.\n * @param pool The already initialized pool\n */\n error PoolAlreadyInitialized(address pool);\n\n /**\n * @notice A pool has not been registered.\n * @param pool The unregistered pool\n */\n error PoolNotRegistered(address pool);\n\n /**\n * @notice A referenced pool has not been initialized.\n * @param pool The uninitialized pool\n */\n error PoolNotInitialized(address pool);\n\n /**\n * @notice A hook contract rejected a pool on registration.\n * @param poolHooksContract Address of the hook contract that rejected the pool registration\n * @param pool Address of the rejected pool\n * @param poolFactory Address of the pool factory\n */\n error HookRegistrationFailed(address poolHooksContract, address pool, address poolFactory);\n\n /**\n * @notice A token was already registered (i.e., it is a duplicate in the pool).\n * @param token The duplicate token\n */\n error TokenAlreadyRegistered(IERC20 token);\n\n /// @notice The token count is below the minimum allowed.\n error MinTokens();\n\n /// @notice The token count is above the maximum allowed.\n error MaxTokens();\n\n /// @notice Invalid tokens (e.g., zero) cannot be registered.\n error InvalidToken();\n\n /// @notice The token type given in a TokenConfig during pool registration is invalid.\n error InvalidTokenType();\n\n /// @notice The data in a TokenConfig struct is inconsistent or unsupported.\n error InvalidTokenConfiguration();\n\n /// @notice Tokens with more than 18 decimals are not supported.\n error InvalidTokenDecimals();\n\n /**\n * @notice The token list passed into an operation does not match the pool tokens in the pool.\n * @param pool Address of the pool\n * @param expectedToken The correct token at a given index in the pool\n * @param actualToken The actual token found at that index\n */\n error TokensMismatch(address pool, address expectedToken, address actualToken);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /// @notice A transient accounting operation completed with outstanding token deltas.\n error BalanceNotSettled();\n\n /// @notice A user called a Vault function (swap, add/remove liquidity) outside the lock context.\n error VaultIsNotUnlocked();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error DynamicSwapFeeHookFailed();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error BeforeSwapHookFailed();\n\n /// @notice The pool has returned false to the afterSwap hook, indicating the transaction should revert.\n error AfterSwapHookFailed();\n\n /// @notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\n error BeforeInitializeHookFailed();\n\n /// @notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\n error AfterInitializeHookFailed();\n\n /// @notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\n error BeforeAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\n error AfterAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\n error BeforeRemoveLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\n error AfterRemoveLiquidityHookFailed();\n\n /// @notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\n error RouterNotTrusted();\n\n /*******************************************************************************\n Swaps\n *******************************************************************************/\n\n /// @notice The user tried to swap zero tokens.\n error AmountGivenZero();\n\n /// @notice The user attempted to swap a token for itself.\n error CannotSwapSameToken();\n\n /**\n * @notice The user attempted to operate with a token that is not in the pool.\n * @param token The unregistered token\n */\n error TokenNotRegistered(IERC20 token);\n\n /**\n * @notice An amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error SwapLimit(uint256 amount, uint256 limit);\n\n /**\n * @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error HookAdjustedSwapLimit(uint256 amount, uint256 limit);\n\n /// @notice The amount given or calculated for an operation is below the minimum limit.\n error TradeAmountTooSmall();\n\n /*******************************************************************************\n Add Liquidity\n *******************************************************************************/\n\n /// @notice Add liquidity kind not supported.\n error InvalidAddLiquidityKind();\n\n /**\n * @notice A required amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error AmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error BptAmountOutBelowMin(uint256 amountOut, uint256 minAmountOut);\n\n /// @notice Pool does not support adding liquidity with a customized input.\n error DoesNotSupportAddLiquidityCustom();\n\n /// @notice Pool does not support adding liquidity through donation.\n error DoesNotSupportDonation();\n\n /*******************************************************************************\n Remove Liquidity\n *******************************************************************************/\n\n /// @notice Remove liquidity kind not supported.\n error InvalidRemoveLiquidityKind();\n\n /**\n * @notice The actual amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error AmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n * @param amountIn The total BPT amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error BptAmountInAboveMax(uint256 amountIn, uint256 maxAmountIn);\n\n /// @notice Pool does not support removing liquidity with a customized input.\n error DoesNotSupportRemoveLiquidityCustom();\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Error raised when there is an overflow in the fee calculation.\n * @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n * (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n * percentages in the Vault.\n */\n error ProtocolFeesExceedTotalCollected();\n\n /**\n * @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is below the minimum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooLow();\n\n /**\n * @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is above the maximum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooHigh();\n\n /**\n * @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n * @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n * precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n * corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n * Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n * the aggregate fee calculated here and that stored in the Vault.\n */\n error FeePrecisionTooHigh();\n\n /// @notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\n error PercentageAboveMax();\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /// @notice A user tried to execute a query operation when they were disabled.\n error QueriesDisabled();\n\n /// @notice An admin tried to re-enable queries, but they were disabled permanently.\n error QueriesDisabledPermanently();\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Cannot enable recovery mode when already enabled.\n * @param pool The pool\n */\n error PoolInRecoveryMode(address pool);\n\n /**\n * @notice Cannot disable recovery mode when not enabled.\n * @param pool The pool\n */\n error PoolNotInRecoveryMode(address pool);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n * @param sender The account attempting to call a permissioned function\n */\n error SenderIsNotVault(address sender);\n\n /*******************************************************************************\n Pausing\n *******************************************************************************/\n\n /// @notice The caller specified a pause window period longer than the maximum.\n error VaultPauseWindowDurationTooLarge();\n\n /// @notice The caller specified a buffer period longer than the maximum.\n error PauseBufferPeriodDurationTooLarge();\n\n /// @notice A user tried to perform an operation while the Vault was paused.\n error VaultPaused();\n\n /// @notice Governance tried to unpause the Vault when it was not paused.\n error VaultNotPaused();\n\n /// @notice Governance tried to pause the Vault after the pause period expired.\n error VaultPauseWindowExpired();\n\n /**\n * @notice A user tried to perform an operation involving a paused Pool.\n * @param pool The paused pool\n */\n error PoolPaused(address pool);\n\n /**\n * @notice Governance tried to unpause the Pool when it was not paused.\n * @param pool The unpaused pool\n */\n error PoolNotPaused(address pool);\n\n /**\n * @notice Governance tried to pause a Pool after the pause period expired.\n * @param pool The pool\n */\n error PoolPauseWindowExpired(address pool);\n\n /*******************************************************************************\n ERC4626 token buffers\n *******************************************************************************/\n\n /**\n * @notice The buffer for the given wrapped token was already initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferAlreadyInitialized(IERC4626 wrappedToken);\n\n /**\n * @notice The buffer for the given wrapped token was not initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferNotInitialized(IERC4626 wrappedToken);\n\n /// @notice The user is trying to remove more than their allocated shares from the buffer.\n error NotEnoughBufferShares();\n\n /**\n * @notice The wrapped token asset does not match the underlying token.\n * @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n * Legitimate wrapper contracts should make the asset a constant or immutable value.\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n * @param underlyingToken The underlying token returned by `asset`\n */\n error WrongUnderlyingToken(IERC4626 wrappedToken, address underlyingToken);\n\n /**\n * @notice A wrapped token reported the zero address as its underlying token asset.\n * @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n * re-initialize the buffer).\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error InvalidUnderlyingToken(IERC4626 wrappedToken);\n\n /**\n * @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error WrapAmountTooSmall(IERC4626 wrappedToken);\n\n /// @notice Buffer operation attempted while vault buffers are paused.\n error VaultBuffersArePaused();\n\n /// @notice Buffer shares were minted to the zero address.\n error BufferSharesInvalidReceiver();\n\n /// @notice Buffer shares were burned from the zero address.\n error BufferSharesInvalidOwner();\n\n /**\n * @notice The total supply of a buffer can't be lower than the absolute minimum.\n * @param totalSupply The total supply value that was below the minimum\n */\n error BufferTotalSupplyTooLow(uint256 totalSupply);\n\n /// @dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\n error NotEnoughUnderlying(IERC4626 wrappedToken, uint256 expectedUnderlyingAmount, uint256 actualUnderlyingAmount);\n\n /// @dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\n error NotEnoughWrapped(IERC4626 wrappedToken, uint256 expectedWrappedAmount, uint256 actualWrappedAmount);\n\n /// @dev Shares issued during initialization are below the requested amount.\n error IssuedSharesBelowMin(uint256 issuedShares, uint256 minIssuedShares);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /// @notice Pool does not support adding / removing liquidity with an unbalanced input.\n error DoesNotSupportUnbalancedLiquidity();\n\n /// @notice The contract should not receive ETH.\n error CannotReceiveEth();\n\n /**\n * @notice The `VaultExtension` contract was called by an account directly.\n * @dev It can only be called by the Vault via delegatecall.\n */\n error NotVaultDelegateCall();\n\n /// @notice The `VaultExtension` contract was configured with an incorrect Vault address.\n error WrongVaultExtensionDeployment();\n\n /// @notice The `ProtocolFeeController` contract was configured with an incorrect Vault address.\n error WrongProtocolFeeControllerDeployment();\n\n /// @notice The `VaultAdmin` contract was configured with an incorrect Vault address.\n error WrongVaultAdminDeployment();\n\n /// @notice Quote reverted with a reserved error code.\n error QuoteResultSpoofed();\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/// @dev Events are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultEvents {\n /**\n * @notice A Pool was registered by calling `registerPool`.\n * @param pool The pool being registered\n * @param factory The factory creating the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The static swap fee of the pool\n * @param pauseWindowEndTime The pool's pause window end time\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n * @param liquidityManagement Supported liquidity management hook flags\n */\n event PoolRegistered(\n address indexed pool,\n address indexed factory,\n TokenConfig[] tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n PoolRoleAccounts roleAccounts,\n HooksConfig hooksConfig,\n LiquidityManagement liquidityManagement\n );\n\n /**\n * @notice A Pool was initialized by calling `initialize`.\n * @param pool The pool being initialized\n */\n event PoolInitialized(address indexed pool);\n\n /**\n * @notice A swap has occurred.\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountIn Number of tokenIn tokens\n * @param amountOut Number of tokenOut tokens\n * @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n * @param swapFeeAmount Swap fee amount paid\n */\n event Swap(\n address indexed pool,\n IERC20 indexed tokenIn,\n IERC20 indexed tokenOut,\n uint256 amountIn,\n uint256 amountOut,\n uint256 swapFeePercentage,\n uint256 swapFeeAmount\n );\n\n /**\n * @notice A wrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param depositedUnderlying Number of underlying tokens deposited\n * @param mintedShares Number of shares (wrapped tokens) minted\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Wrap(\n IERC4626 indexed wrappedToken,\n uint256 depositedUnderlying,\n uint256 mintedShares,\n bytes32 bufferBalances\n );\n\n /**\n * @notice An unwrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param burnedShares Number of shares (wrapped tokens) burned\n * @param withdrawnUnderlying Number of underlying tokens withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Unwrap(\n IERC4626 indexed wrappedToken,\n uint256 burnedShares,\n uint256 withdrawnUnderlying,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Liquidity has been added to a pool (including initialization).\n * @param pool The pool with liquidity added\n * @param liquidityProvider The user performing the operation\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityAdded(\n address indexed pool,\n address indexed liquidityProvider,\n AddLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsAddedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice Liquidity has been removed from a pool.\n * @param pool The pool with liquidity removed\n * @param liquidityProvider The user performing the operation\n * @param kind The remove liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityRemoved(\n address indexed pool,\n address indexed liquidityProvider,\n RemoveLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsRemovedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice The Vault's pause status has changed.\n * @param paused True if the Vault was paused\n */\n event VaultPausedStateChanged(bool paused);\n\n /// @notice `disableQuery` has been called on the Vault, disabling query functionality.\n event VaultQueriesDisabled();\n\n /// @notice `enableQuery` has been called on the Vault, enabling query functionality.\n event VaultQueriesEnabled();\n\n /**\n * @notice A Pool's pause status has changed.\n * @param pool The pool that was just paused or unpaused\n * @param paused True if the pool was paused\n */\n event PoolPausedStateChanged(address indexed pool, bool paused);\n\n /**\n * @notice Emitted when the swap fee percentage of a pool is updated.\n * @param swapFeePercentage The new swap fee percentage for the pool\n */\n event SwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Recovery mode has been enabled or disabled for a pool.\n * @param pool The pool\n * @param recoveryMode True if recovery mode was enabled\n */\n event PoolRecoveryModeStateChanged(address indexed pool, bool recoveryMode);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate swap fee percentage changed\n * @param aggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n event AggregateSwapFeePercentageChanged(address indexed pool, uint256 aggregateSwapFeePercentage);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate yield fee percentage changed\n * @param aggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n event AggregateYieldFeePercentageChanged(address indexed pool, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice A new authorizer is set by `setAuthorizer`.\n * @param newAuthorizer The address of the new authorizer\n */\n event AuthorizerChanged(IAuthorizer indexed newAuthorizer);\n\n /**\n * @notice A new protocol fee controller is set by `setProtocolFeeController`.\n * @param newProtocolFeeController The address of the new protocol fee controller\n */\n event ProtocolFeeControllerChanged(IProtocolFeeController indexed newProtocolFeeController);\n\n /**\n * @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was deposited\n * @param amountWrapped The amount of the wrapped token that was deposited\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityAddedToBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param to The owner of the minted shares\n * @param issuedShares The amount of \"internal BPT\" shares created\n */\n event BufferSharesMinted(IERC4626 indexed wrappedToken, address indexed to, uint256 issuedShares);\n\n /**\n * @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param from The owner of the burned shares\n * @param burnedShares The amount of \"internal BPT\" shares burned\n */\n event BufferSharesBurned(IERC4626 indexed wrappedToken, address indexed from, uint256 burnedShares);\n\n /**\n * @notice Liquidity was removed from an ERC4626 buffer.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was withdrawn\n * @param amountWrapped The amount of the wrapped token that was withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityRemovedFromBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice The Vault buffers pause status has changed.\n * @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n * set to true) will revert.\n *\n * @param paused True if the Vault buffers were paused\n */\n event VaultBuffersPausedStateChanged(bool paused);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param pool Pool address\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n event VaultAuxiliary(address indexed pool, bytes32 indexed eventKey, bytes eventData);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IVault } from \"./IVault.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultExtension` contract.\n * @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n * the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n * liquidity operations.\n */\ninterface IVaultExtension {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the VaultAdmin contract address.\n * @dev The VaultAdmin contract mostly implements permissioned functions.\n * @return vaultAdmin The address of the Vault admin\n */\n function getVaultAdmin() external view returns (address vaultAdmin);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n * @dev The Vault must be unlocked to perform state-changing liquidity operations.\n * @return unlocked True if the Vault is unlocked, false otherwise\n */\n function isUnlocked() external view returns (bool unlocked);\n\n /**\n * @notice Returns the count of non-zero deltas.\n * @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`\n */\n function getNonzeroDeltaCount() external view returns (uint256 nonzeroDeltaCount);\n\n /**\n * @notice Retrieves the token delta for a specific token.\n * @dev This function allows reading the value from the `_tokenDeltas` mapping.\n * @param token The token for which the delta is being fetched\n * @return tokenDelta The delta of the specified token\n */\n function getTokenDelta(IERC20 token) external view returns (int256 tokenDelta);\n\n /**\n * @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n * @param token The token for which to retrieve the reserve\n * @return reserveAmount The amount of reserves for the given token\n */\n function getReservesOf(IERC20 token) external view returns (uint256 reserveAmount);\n\n /**\n * @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n * same pool).\n * @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n * layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n * is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n * It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n * than a simple swap for every pool type.\n *\n * @param pool Address of the pool to check\n * @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n \n * Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\n */\n function getAddLiquidityCalledFlag(address pool) external view returns (bool liquidityAdded);\n\n /*******************************************************************************\n Pool Registration\n *******************************************************************************/\n\n /**\n * @notice Registers a pool, associating it with its factory and the tokens it manages.\n * @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n * by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n * additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n * pool will automatically unpause. Balancer timestamps are 32 bits.\n *\n * A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n * multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n * the Vault.\n *\n * If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n * authorizer.\n *\n * @param pool The address of the pool being registered\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The initial static swap fee percentage of the pool\n * @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n * @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param poolHooksContract Contract that implements the hooks for the pool\n * @param liquidityManagement Liquidity management flags with implemented methods\n */\n function registerPool(\n address pool,\n TokenConfig[] memory tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n bool protocolFeeExempt,\n PoolRoleAccounts calldata roleAccounts,\n address poolHooksContract,\n LiquidityManagement calldata liquidityManagement\n ) external;\n\n /**\n * @notice Checks whether a pool is registered.\n * @param pool Address of the pool to check\n * @return registered True if the pool is registered, false otherwise\n */\n function isPoolRegistered(address pool) external view returns (bool registered);\n\n /**\n * @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n * @param pool Address of the pool to initialize\n * @param to Address that will receive the output BPT\n * @param tokens Tokens used to seed the pool (must match the registered tokens)\n * @param exactAmountsIn Exact amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param userData Additional (optional) data required for adding initial liquidity\n * @return bptAmountOut Output pool token amount\n */\n function initialize(\n address pool,\n address to,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bytes memory userData\n ) external returns (uint256 bptAmountOut);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is initialized.\n * @dev An initialized pool can be considered registered as well.\n * @param pool Address of the pool to check\n * @return initialized True if the pool is initialized, false otherwise\n */\n function isPoolInitialized(address pool) external view returns (bool initialized);\n\n /**\n * @notice Gets the tokens registered to a pool.\n * @param pool Address of the pool\n * @return tokens List of tokens in the pool\n */\n function getPoolTokens(address pool) external view returns (IERC20[] memory tokens);\n\n /**\n * @notice Gets pool token rates.\n * @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n * registration order.\n *\n * @param pool Address of the pool\n * @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. FP(1) for 18-decimal tokens\n * @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n */\n function getPoolTokenRates(\n address pool\n ) external view returns (uint256[] memory decimalScalingFactors, uint256[] memory tokenRates);\n\n /**\n * @notice Returns comprehensive pool data for the given pool.\n * @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n * @param pool The address of the pool\n * @return poolData The `PoolData` result\n */\n function getPoolData(address pool) external view returns (PoolData memory poolData);\n\n /**\n * @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n * @param pool Address of the pool\n * @return tokens The pool tokens, sorted in registration order\n * @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n * @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n * @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order\n */\n function getPoolTokenInfo(\n address pool\n )\n external\n view\n returns (\n IERC20[] memory tokens,\n TokenInfo[] memory tokenInfo,\n uint256[] memory balancesRaw,\n uint256[] memory lastBalancesLiveScaled18\n );\n\n /**\n * @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n * registration order.\n *\n * @param pool Address of the pool\n * @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n */\n function getCurrentLiveBalances(address pool) external view returns (uint256[] memory balancesLiveScaled18);\n\n /**\n * @notice Gets the configuration parameters of a pool.\n * @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n * @param pool Address of the pool\n * @return poolConfig The pool configuration as a `PoolConfig` struct\n */\n function getPoolConfig(address pool) external view returns (PoolConfig memory poolConfig);\n\n /**\n * @notice Gets the hooks configuration parameters of a pool.\n * @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n * @param pool Address of the pool\n * @return hooksConfig The hooks configuration as a `HooksConfig` struct\n */\n function getHooksConfig(address pool) external view returns (HooksConfig memory hooksConfig);\n\n /**\n * @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n * @param pool Address of the pool\n * @return rate BPT rate\n */\n function getBptRate(address pool) external view returns (uint256 rate);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Gets the total supply of a given ERC20 token.\n * @param token The token address\n * @return tokenTotalSupply Total supply of the token\n */\n function totalSupply(address token) external view returns (uint256 tokenTotalSupply);\n\n /**\n * @notice Gets the balance of an account for a given ERC20 token.\n * @param token Address of the token\n * @param account Address of the account\n * @return tokenBalance Token balance of the account\n */\n function balanceOf(address token, address account) external view returns (uint256 tokenBalance);\n\n /**\n * @notice Gets the allowance of a spender for a given ERC20 token and owner.\n * @param token Address of the token\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @return tokenAllowance Amount of tokens the spender is allowed to spend\n */\n function allowance(address token, address owner, address spender) external view returns (uint256 tokenAllowance);\n\n /**\n * @notice Approves a spender to spend pool tokens on behalf of sender.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @param amount Amount of tokens to approve\n * @return success True if successful, false otherwise\n */\n function approve(address owner, address spender, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether a pool is paused.\n * @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n * @param pool The pool to be checked\n * @return poolPaused True if the pool is paused\n */\n function isPoolPaused(address pool) external view returns (bool poolPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n * @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n * the buffer period. Balancer timestamps are 32 bits.\n *\n * @param pool The pool whose data is requested\n * @return poolPaused True if the Pool is paused\n * @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n * @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n * @return pauseManager The pause manager, or the zero address\n */\n function getPoolPausedState(\n address pool\n )\n external\n view\n returns (bool poolPaused, uint32 poolPauseWindowEndTime, uint32 poolBufferPeriodEndTime, address pauseManager);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Checks if the wrapped token has an initialized buffer in the Vault.\n * @dev An initialized buffer should have an asset registered in the Vault.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return isBufferInitialized True if the ERC4626 buffer is initialized\n */\n function isERC4626BufferInitialized(IERC4626 wrappedToken) external view returns (bool isBufferInitialized);\n\n /**\n * @notice Gets the registered asset for a given buffer.\n * @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n * should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n * the Vault on initialization.\n *\n * @param wrappedToken The wrapped token specifying the buffer\n * @return asset The underlying asset of the wrapped token\n */\n function getERC4626BufferAsset(IERC4626 wrappedToken) external view returns (address asset);\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return swapFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateSwapFeeAmount(address pool, IERC20 token) external view returns (uint256 swapFeeAmount);\n\n /**\n * @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return yieldFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateYieldFeeAmount(address pool, IERC20 token) external view returns (uint256 yieldFeeAmount);\n\n /**\n * @notice Fetches the static swap fee percentage for a given pool.\n * @param pool The address of the pool whose static swap fee percentage is being queried\n * @return swapFeePercentage The current static swap fee percentage for the specified pool\n */\n function getStaticSwapFeePercentage(address pool) external view returns (uint256 swapFeePercentage);\n\n /**\n * @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n * @param pool The address of the pool whose roles are being queried\n * @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)\n */\n function getPoolRoleAccounts(address pool) external view returns (PoolRoleAccounts memory roleAccounts);\n\n /**\n * @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n * @dev Reverts if the hook doesn't return the success flag set to `true`.\n * @param pool The pool\n * @param swapParams The swap parameters used to compute the fee\n * @return dynamicSwapFeePercentage The dynamic swap fee percentage\n */\n function computeDynamicSwapFeePercentage(\n address pool,\n PoolSwapParams memory swapParams\n ) external view returns (uint256 dynamicSwapFeePercentage);\n\n /**\n * @notice Returns the Protocol Fee Controller address.\n * @return protocolFeeController Address of the ProtocolFeeController\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController);\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is in Recovery Mode.\n * @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n * @param pool Address of the pool to check\n * @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise\n */\n function isPoolInRecoveryMode(address pool) external view returns (bool inRecoveryMode);\n\n /**\n * @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n * The request is implemented by the Vault without any interaction with the pool, ensuring that\n * it works the same for all pools, and cannot be disabled by a new pool type.\n *\n * @param pool Address of the pool\n * @param from Address of user to burn pool tokens from\n * @param exactBptAmountIn Input pool token amount\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order\n */\n function removeLiquidityRecovery(\n address pool,\n address from,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n ) external returns (uint256[] memory amountsOut);\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function quote(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * This call always reverts, returning the result in the revert reason.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n */\n function quoteAndRevert(bytes calldata data) external;\n\n /**\n * @notice Returns true if queries are disabled on the Vault.\n * @dev If true, queries might either be disabled temporarily or permanently.\n * @return queryDisabled True if query functionality is reversibly disabled\n */\n function isQueryDisabled() external view returns (bool queryDisabled);\n\n /**\n * @notice Returns true if queries are disabled permanently; false if they are enabled.\n * @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n * @return queryDisabledPermanently True if query functionality is permanently disabled\n */\n function isQueryDisabledPermanently() external view returns (bool queryDisabledPermanently);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n function emitAuxiliaryEvent(bytes32 eventKey, bytes calldata eventData) external;\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Returns the Authorizer address.\n * @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n * and can be changed through a permissioned call.\n *\n * @return authorizer Address of the authorizer contract\n */\n function getAuthorizer() external view returns (IAuthorizer authorizer);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the main Vault contract.\n * @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n * for technical or performance reasons.\n */\ninterface IVaultMain {\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n * @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n * meaning all balances for the caller have to be settled at the end.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function unlock(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Settles deltas for a token; must be successful for the current lock to be released.\n * @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n * should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n * excess in the Vault balance.\n *\n * If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n * credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n *\n * If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n * In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n * not affect settlement.\n *\n * The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n * difference equals current balance of the token minus existing reserves of the token when the function is called.\n *\n * @param token Address of the token\n * @param amountHint Amount paid as reported by the caller\n * @return credit Credit received in return of the payment\n */\n function settle(IERC20 token, uint256 amountHint) external returns (uint256 credit);\n\n /**\n * @notice Sends tokens to a recipient.\n * @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n * debts.\n *\n * @param token Address of the token\n * @param to Recipient address\n * @param amount Amount of tokens to send\n */\n function sendTo(IERC20 token, address to, uint256 amount) external;\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Swaps tokens based on provided parameters.\n * @dev All parameters are given in raw token decimal encoding.\n * @param vaultSwapParams Parameters for the swap (see above for struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function swap(\n VaultSwapParams memory vaultSwapParams\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Adds liquidity to a pool.\n * @dev Caution should be exercised when adding liquidity because the Vault has the capability\n * to transfer tokens from any user, given that it holds all allowances.\n *\n * @param params Parameters for the add liquidity (see above for struct definition)\n * @return amountsIn Actual amounts of input tokens\n * @return bptAmountOut Output pool token amount\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function addLiquidity(\n AddLiquidityParams memory params\n ) external returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Removes liquidity from a pool.\n * @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n * Untrusted routers require prior approval from the user. This is the only function allowed to call\n * _queryModeBalanceIncrease (and only in a query context).\n *\n * @param params Parameters for the remove liquidity (see above for struct definition)\n * @return bptAmountIn Actual amount of BPT burned\n * @return amountsOut Actual amounts of output tokens\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function removeLiquidity(\n RemoveLiquidityParams memory params\n ) external returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Gets the index of a token in a given pool.\n * @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n * @param pool Address of the pool\n * @param token Address of the token\n * @return tokenCount Number of tokens in the pool\n * @return index Index corresponding to the given token in the pool's token list\n */\n function getPoolTokenCountAndIndexOfToken(\n address pool,\n IERC20 token\n ) external view returns (uint256 tokenCount, uint256 index);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Transfers pool token from owner to a recipient.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transfer(address owner, address to, uint256 amount) external returns (bool);\n\n /**\n * @notice Transfers pool token from a sender to a recipient using an allowance.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param spender Address allowed to perform the transfer\n * @param from Address of the sender\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transferFrom(address spender, address from, address to, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Wraps/unwraps tokens based on the parameters provided.\n * @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n * and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n *\n * @param params Parameters for the wrap/unwrap operation (see struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function erc4626BufferWrapOrUnwrap(\n BufferWrapOrUnwrapParams memory params\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /**\n * @notice Returns the VaultExtension contract address.\n * @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n * functions, since delegate calls through the Vault are more expensive than direct calls.\n *\n * @return vaultExtension Address of the VaultExtension\n */\n function getVaultExtension() external view returns (address vaultExtension);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IRateProvider } from \"../solidity-utils/helpers/IRateProvider.sol\";\n\n/**\n * @notice Represents a pool's liquidity management configuration.\n * @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n * @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n * @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n * @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION\n */\nstruct LiquidityManagement {\n bool disableUnbalancedLiquidity;\n bool enableAddLiquidityCustom;\n bool enableRemoveLiquidityCustom;\n bool enableDonation;\n}\n\n// @notice Custom type to store the entire configuration of the pool.\ntype PoolConfigBits is bytes32;\n\n/**\n * @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n * @param liquidityManagement Flags related to adding/removing liquidity\n * @param staticSwapFeePercentage The pool's native swap fee\n * @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n * @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n * @param isPoolRegistered If true, the pool has been registered with the Vault\n * @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n * @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n * @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals\n */\nstruct PoolConfig {\n LiquidityManagement liquidityManagement;\n uint256 staticSwapFeePercentage;\n uint256 aggregateSwapFeePercentage;\n uint256 aggregateYieldFeePercentage;\n uint40 tokenDecimalDiffs;\n uint32 pauseWindowEndTime;\n bool isPoolRegistered;\n bool isPoolInitialized;\n bool isPoolPaused;\n bool isPoolInRecoveryMode;\n}\n\n/**\n * @notice The flag portion of the `HooksConfig`.\n * @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n * in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n * flags to true will cause the Vault to call the corresponding hook during operations.\n */\nstruct HookFlags {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n}\n\n/// @notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address).\nstruct HooksConfig {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n address hooksContract;\n}\n\n/**\n * @notice Represents temporary state used during a swap operation.\n * @param indexIn The zero-based index of tokenIn\n * @param indexOut The zero-based index of tokenOut\n * @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n * @param swapFeePercentage The swap fee to be applied (might be static or dynamic)\n */\nstruct SwapState {\n uint256 indexIn;\n uint256 indexOut;\n uint256 amountGivenScaled18;\n uint256 swapFeePercentage;\n}\n\n/**\n * @notice Represents the Vault's configuration.\n * @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n * @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n * @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled\n */\nstruct VaultState {\n bool isQueryDisabled;\n bool isVaultPaused;\n bool areBuffersPaused;\n}\n\n/**\n * @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n * @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n * @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n * @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)\n */\nstruct PoolRoleAccounts {\n address pauseManager;\n address swapFeeManager;\n address poolCreator;\n}\n\n/*******************************************************************************\n Tokens\n*******************************************************************************/\n\n// Note that the following tokens are unsupported by the Vault. This list is not meant to be exhaustive, but covers\n// many common types of tokens that will not work with the Vault architecture. (See https://github.com/d-xo/weird-erc20\n// for examples of token features that are problematic for many protocols.)\n//\n// * Rebasing tokens (e.g., aDAI). The Vault keeps track of token balances in its internal accounting; any token whose\n// balance changes asynchronously (i.e., outside a swap or liquidity operation), would get out-of-sync with this\n// internal accounting. This category would also include \"airdrop\" tokens, whose balances can change unexpectedly.\n//\n// * Double entrypoint (e.g., old Synthetix tokens, now fixed). These could likewise bypass internal accounting by\n// registering the token under one address, then accessing it through another. This is especially troublesome\n// in v3, with the introduction of ERC4626 buffers.\n//\n// * Fee on transfer (e.g., PAXG). The Vault issues credits and debits according to given and calculated token amounts,\n// and settlement assumes that the send/receive transfer functions transfer exactly the given number of tokens.\n// If this is not the case, transactions will not settle. Unlike with the other types, which are fundamentally\n// incompatible, it would be possible to design a Router to handle this - but we didn't try it. In any case, it's\n// not supported in the current Routers.\n//\n// * Tokens with more than 18 decimals (e.g., YAM-V2). The Vault handles token scaling: i.e., handling I/O for\n// amounts in native token decimals, but doing calculations with full 18-decimal precision. This requires reading\n// and storing the decimals for each token. Since virtually all tokens are 18 or fewer decimals, and we have limited\n// storage space, 18 was a reasonable maximum. Unlike the other types, this is enforceable by the Vault. Attempting\n// to register such tokens will revert with `InvalidTokenDecimals`. Of course, we must also be able to read the token\n// decimals, so the Vault only supports tokens that implement `IERC20Metadata.decimals`, and return a value less than\n// or equal to 18.\n//\n// * Token decimals are checked and stored only once, on registration. Valid tokens store their decimals as immutable\n// variables or constants. Malicious tokens that don't respect this basic property would not work anywhere in DeFi.\n//\n// These types of tokens are supported but discouraged, as they don't tend to play well with AMMs generally.\n//\n// * Very low-decimal tokens (e.g., GUSD). The Vault has been extensively tested with 6-decimal tokens (e.g., USDC),\n// but going much below that may lead to unanticipated effects due to precision loss, especially with smaller trade\n// values.\n//\n// * Revert on zero value approval/transfer. The Vault has been tested against these, but peripheral contracts, such\n// as hooks, might not have been designed with this in mind.\n//\n// * Other types from \"weird-erc20,\" such as upgradeable, pausable, or tokens with blocklists. We have seen cases\n// where a token upgrade fails, \"bricking\" the token - and many operations on pools containing that token. Any\n// sort of \"permissioned\" token that can make transfers fail can cause operations on pools containing them to\n// revert. Even Recovery Mode cannot help then, as it does a proportional withdrawal of all tokens. If one of\n// them is bricked, the whole operation will revert. Since v3 does not have \"internal balances\" like v2, there\n// is no recourse.\n//\n// Of course, many tokens in common use have some of these \"features\" (especially centralized stable coins), so\n// we have to support them anyway. Working with common centralized tokens is a risk common to all of DeFi.\n\n/**\n * @notice Token types supported by the Vault.\n * @dev In general, pools may contain any combination of these tokens.\n *\n * STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n * WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n * because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n * tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n * yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n * in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n * not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n * yield fees are charged elsewhere).\n *\n * NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard.\n */\nenum TokenType {\n STANDARD,\n WITH_RATE\n}\n\n/**\n * @notice Encapsulate the data required for the Vault to support a token of the given type.\n * @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n * need a rate provider, and may or may not be yield-bearing.\n *\n * At registration time, it is useful to include the token address along with the token parameters in the structure\n * passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n * validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n *\n * @param token The token address\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenConfig {\n IERC20 token;\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n * @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n * it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n *\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenInfo {\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice Data structure used to represent the current pool state in memory\n * @param poolConfigBits Custom type to store the entire configuration of the pool.\n * @param tokens Pool tokens, sorted in token registration order\n * @param tokenInfo Configuration data for each token, sorted in token registration order\n * @param balancesRaw Token balances in native decimals\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n * @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. It is 1e18 (FP 1) for 18-decimal tokens\n */\nstruct PoolData {\n PoolConfigBits poolConfigBits;\n IERC20[] tokens;\n TokenInfo[] tokenInfo;\n uint256[] balancesRaw;\n uint256[] balancesLiveScaled18;\n uint256[] tokenRates;\n uint256[] decimalScalingFactors;\n}\n\nenum Rounding {\n ROUND_UP,\n ROUND_DOWN\n}\n\n/*******************************************************************************\n Swaps\n*******************************************************************************/\n\nenum SwapKind {\n EXACT_IN,\n EXACT_OUT\n}\n\n// There are two \"SwapParams\" structs defined below. `VaultSwapParams` corresponds to the external swap API defined\n// in the Router contracts, which uses explicit token addresses, the amount given and limit on the calculated amount\n// expressed in native token decimals, and optional user data passed in from the caller.\n//\n// `PoolSwapParams` passes some of this information through (kind, userData), but \"translates\" the parameters to fit\n// the internal swap API used by `IBasePool`. It scales amounts to full 18-decimal precision, adds the token balances,\n// converts the raw token addresses to indices, and adds the address of the Router originating the request. It does\n// not need the limit, since this is checked at the Router level.\n\n/**\n * @notice Data passed into primary Vault `swap` operations.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n * @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n * @param userData Additional (optional) user data\n */\nstruct VaultSwapParams {\n SwapKind kind;\n address pool;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n bytes userData;\n}\n\n/**\n * @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n * @param kind Type of swap (exact in or exact out)\n * @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n * @param balancesScaled18 Current pool balances\n * @param indexIn Index of tokenIn\n * @param indexOut Index of tokenOut\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param userData Additional (optional) data required for the swap\n */\nstruct PoolSwapParams {\n SwapKind kind;\n uint256 amountGivenScaled18;\n uint256[] balancesScaled18;\n uint256 indexIn;\n uint256 indexOut;\n address router;\n bytes userData;\n}\n\n/**\n * @notice Data for the hook after a swap operation.\n * @param kind Type of swap (exact in or exact out)\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param amountInScaled18 Amount of tokenIn (entering the Vault)\n * @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n * @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n * @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n * @param amountCalculatedScaled18 Token amount calculated by the swap\n * @param amountCalculatedRaw Token amount calculated by the swap\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param pool Pool address\n * @param userData Additional (optional) data required for the swap\n */\nstruct AfterSwapParams {\n SwapKind kind;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountInScaled18;\n uint256 amountOutScaled18;\n uint256 tokenInBalanceScaled18;\n uint256 tokenOutBalanceScaled18;\n uint256 amountCalculatedScaled18;\n uint256 amountCalculatedRaw;\n address router;\n address pool;\n bytes userData;\n}\n\n/*******************************************************************************\n Add liquidity\n*******************************************************************************/\n\nenum AddLiquidityKind {\n PROPORTIONAL,\n UNBALANCED,\n SINGLE_TOKEN_EXACT_OUT,\n DONATION,\n CUSTOM\n}\n\n/**\n * @notice Data for an add liquidity operation.\n * @param pool Address of the pool\n * @param to Address of user to mint to\n * @param maxAmountsIn Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param kind Add liquidity kind\n * @param userData Optional user data\n */\nstruct AddLiquidityParams {\n address pool;\n address to;\n uint256[] maxAmountsIn;\n uint256 minBptAmountOut;\n AddLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum RemoveLiquidityKind {\n PROPORTIONAL,\n SINGLE_TOKEN_EXACT_IN,\n SINGLE_TOKEN_EXACT_OUT,\n CUSTOM\n}\n\n/**\n * @notice Data for an remove liquidity operation.\n * @param pool Address of the pool\n * @param from Address of user to burn from\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOut Minimum amounts of output tokens\n * @param kind Remove liquidity kind\n * @param userData Optional user data\n */\nstruct RemoveLiquidityParams {\n address pool;\n address from;\n uint256 maxBptAmountIn;\n uint256[] minAmountsOut;\n RemoveLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum WrappingDirection {\n WRAP,\n UNWRAP\n}\n\n/**\n * @notice Data for a wrap/unwrap operation.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param direction Direction of the wrapping operation (Wrap or Unwrap)\n * @param wrappedToken Wrapped token, compatible with interface ERC4626\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n * @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n * direction)\n */\nstruct BufferWrapOrUnwrapParams {\n SwapKind kind;\n WrappingDirection direction;\n IERC4626 wrappedToken;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n}\n\n// Protocol Fees are 24-bit values. We transform them by multiplying by 1e11, so that they can be set to any value\n// between 0% and 100% (step 0.00001%). Protocol and pool creator fees are set in the `ProtocolFeeController`, and\n// ensure both constituent and aggregate fees do not exceed this precision.\nuint256 constant FEE_BITLENGTH = 24;\nuint256 constant FEE_SCALING_FACTOR = 1e11;\n// Used to ensure the safety of fee-related math (e.g., pools or hooks don't set it greater than 100%).\n// This value should work for practical purposes and is well within the max precision requirements.\nuint256 constant MAX_FEE_PERCENTAGE = 99.9999e16; // 99.9999%\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\n\nimport { PackedTokenBalance } from \"./PackedTokenBalance.sol\";\n\nlibrary BufferHelpers {\n using PackedTokenBalance for bytes32;\n using SafeCast for *;\n\n /**\n * @notice Returns the imbalance of a buffer in terms of the underlying asset.\n * @dev The imbalance refers to the difference between the buffer's underlying asset balance and its wrapped asset\n * balance, both expressed in terms of the underlying asset. A positive imbalance means the buffer holds more\n * underlying assets than wrapped assets, indicating that the excess underlying should be wrapped to restore\n * balance. Conversely, a negative imbalance means the buffer has more wrapped assets than underlying assets, so\n * during a wrap operation, fewer underlying tokens need to be wrapped, and the surplus wrapped tokens can be\n * returned to the caller.\n * For instance, consider the following scenario:\n * - buffer balances: 2 wrapped and 10 underlying\n * - wrapped rate: 2\n * - normalized buffer balances: 4 wrapped as underlying (2 wrapped * rate) and 10 underlying\n * - underlying token imbalance = (10 - 4) / 2 = 3 underlying\n * We need to wrap 3 underlying tokens to rebalance the buffer.\n * - 3 underlying = 1.5 wrapped\n * - final balances: 3.5 wrapped (2 existing + 1.5 new) and 7 underlying (10 existing - 3)\n * These balances are equal value, given the rate.\n */\n function getBufferUnderlyingImbalance(bytes32 bufferBalance, IERC4626 wrappedToken) internal view returns (int256) {\n int256 underlyingBalance = bufferBalance.getBalanceRaw().toInt256();\n\n int256 wrappedBalanceAsUnderlying = 0;\n if (bufferBalance.getBalanceDerived() > 0) {\n // The buffer underlying imbalance is used when wrapping (it means, deposit underlying and get wrapped\n // tokens), so we use `previewMint` to convert wrapped balance to underlying. The `mint` function is used\n // here, as it performs the inverse of a `deposit` operation.\n wrappedBalanceAsUnderlying = wrappedToken.previewMint(bufferBalance.getBalanceDerived()).toInt256();\n }\n\n // The return value may be positive (excess of underlying) or negative (excess of wrapped).\n return (underlyingBalance - wrappedBalanceAsUnderlying) / 2;\n }\n\n /**\n * @notice Returns the imbalance of a buffer in terms of the wrapped asset.\n * @dev The imbalance refers to the difference between the buffer's underlying asset balance and its wrapped asset\n * balance, both expressed in terms of the wrapped asset. A positive imbalance means the buffer holds more\n * wrapped assets than underlying assets, indicating that the excess wrapped should be unwrapped to restore\n * balance. Conversely, a negative imbalance means the buffer has more underlying assets than wrapped assets, so\n * during an unwrap operation, fewer wrapped tokens need to be unwrapped, and the surplus underlying tokens can be\n * returned to the caller.\n * For instance, consider the following scenario:\n * - buffer balances: 10 wrapped and 4 underlying\n * - wrapped rate: 2\n * - normalized buffer balances: 10 wrapped and 2 underlying as wrapped (2 underlying / rate)\n * - imbalance of wrapped = (10 - 2) / 2 = 4 wrapped\n * We need to unwrap 4 wrapped tokens to rebalance the buffer.\n * - 4 wrapped = 8 underlying\n * - final balances: 6 wrapped (10 existing - 4) and 12 underlying (4 existing + 8 new)\n * These balances are equal value, given the rate.\n */\n function getBufferWrappedImbalance(bytes32 bufferBalance, IERC4626 wrappedToken) internal view returns (int256) {\n int256 wrappedBalance = bufferBalance.getBalanceDerived().toInt256();\n\n int256 underlyingBalanceAsWrapped = 0;\n if (bufferBalance.getBalanceRaw() > 0) {\n // The buffer wrapped imbalance is used when unwrapping (it means, deposit wrapped and get underlying\n // tokens), so we use `previewWithdraw` to convert underlying balance to wrapped. The `withdraw` function\n // is used here, as it performs the inverse of a `redeem` operation.\n underlyingBalanceAsWrapped = wrappedToken.previewWithdraw(bufferBalance.getBalanceRaw()).toInt256();\n }\n\n // The return value may be positive (excess of wrapped) or negative (excess of underlying).\n return (wrappedBalance - underlyingBalanceAsWrapped) / 2;\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Library of helper functions related to typecasting arrays.\nlibrary CastingHelpers {\n /// @dev Returns a native array of addresses as an IERC20[] array.\n function asIERC20(address[] memory addresses) internal pure returns (IERC20[] memory tokens) {\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n tokens := addresses\n }\n }\n\n /// @dev Returns an IERC20[] array as an address[] array.\n function asAddress(IERC20[] memory tokens) internal pure returns (address[] memory addresses) {\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n addresses := tokens\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Library used to check whether the current operation was initiated through a static call.\nlibrary EVMCallModeHelpers {\n /// @notice A state-changing transaction was initiated in a context that only allows static calls.\n error NotStaticCall();\n\n /**\n * @dev Detects whether the current transaction is a static call.\n * A static call is one where `tx.origin` equals 0x0 for most implementations.\n * See this tweet for a table on how transaction parameters are set on different platforms:\n * https://twitter.com/0xkarmacoma/status/1493380279309717505\n *\n * Solidity eth_call reference docs are here: https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_call\n */\n function isStaticCall() internal view returns (bool) {\n return tx.origin == address(0);\n // solhint-disable-previous-line avoid-tx-origin\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { CastingHelpers } from \"./CastingHelpers.sol\";\n\nlibrary InputHelpers {\n /// @notice Arrays passed to a function and intended to be parallel have different lengths.\n error InputLengthMismatch();\n\n /**\n * @notice More than one non-zero value was given for a single token operation.\n * @dev Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value,\n * corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\n */\n error MultipleNonZeroInputs();\n\n /**\n * @notice No valid input was given for a single token operation.\n * @dev Input arrays for single token add/remove liquidity operations are expected to have one non-zero value,\n * corresponding to the token being added or removed. This error results if all entries are zero.\n */\n error AllZeroInputs();\n\n /**\n * @notice The tokens supplied to an array argument were not sorted in numerical order.\n * @dev Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can\n * predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\n */\n error TokensNotSorted();\n\n function ensureInputLengthMatch(uint256 a, uint256 b) internal pure {\n if (a != b) {\n revert InputLengthMismatch();\n }\n }\n\n function ensureInputLengthMatch(uint256 a, uint256 b, uint256 c) internal pure {\n if (a != b || b != c) {\n revert InputLengthMismatch();\n }\n }\n\n // Find the single non-zero input; revert if there is not exactly one such value.\n function getSingleInputIndex(uint256[] memory maxAmountsIn) internal pure returns (uint256 inputIndex) {\n uint256 length = maxAmountsIn.length;\n inputIndex = length;\n\n for (uint256 i = 0; i < length; ++i) {\n if (maxAmountsIn[i] != 0) {\n if (inputIndex != length) {\n revert MultipleNonZeroInputs();\n }\n inputIndex = i;\n }\n }\n\n if (inputIndex >= length) {\n revert AllZeroInputs();\n }\n\n return inputIndex;\n }\n\n /**\n * @dev Sort an array of tokens, mutating in place (and also returning them).\n * This assumes the tokens have been (or will be) validated elsewhere for length\n * and non-duplication. All this does is the sorting.\n *\n * A bubble sort should be gas- and bytecode-efficient enough for such small arrays.\n * Could have also done \"manual\" comparisons for each of the cases, but this is\n * about the same number of operations, and more concise.\n *\n * This is less efficient for larger token count (i.e., above 4), but such pools should\n * be rare. And in any case, sorting is only done on-chain in test code.\n */\n function sortTokens(IERC20[] memory tokens) internal pure returns (IERC20[] memory) {\n for (uint256 i = 0; i < tokens.length - 1; ++i) {\n for (uint256 j = 0; j < tokens.length - i - 1; ++j) {\n if (tokens[j] > tokens[j + 1]) {\n // Swap if they're out of order.\n (tokens[j], tokens[j + 1]) = (tokens[j + 1], tokens[j]);\n }\n }\n }\n\n return tokens;\n }\n\n /// @dev Ensure an array of tokens is sorted. As above, does not validate length or uniqueness.\n function ensureSortedTokens(IERC20[] memory tokens) internal pure {\n IERC20 previous = tokens[0];\n\n for (uint256 i = 1; i < tokens.length; ++i) {\n IERC20 current = tokens[i];\n\n if (previous > current) {\n revert TokensNotSorted();\n }\n\n previous = current;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice This library represents a data structure for packing a token's current raw and derived balances. A derived\n * balance can be the \"last\" live balance scaled18 of the raw token, or the balance of the wrapped version of the\n * token in a vault buffer, among others.\n *\n * @dev We could use a Solidity struct to pack balance values together in a single storage slot, but unfortunately\n * Solidity only allows for structs to live in either storage, calldata or memory. Because a memory struct still takes\n * up a slot in the stack (to store its memory location), and because the entire balance fits in a single stack slot\n * (two 128 bit values), using memory is strictly less gas performant. Therefore, we do manual packing and unpacking.\n *\n * We could also use custom types now, but given the simplicity here, and the existing EnumerableMap type, it seemed\n * easier to leave it as a bytes32.\n */\nlibrary PackedTokenBalance {\n // The 'rawBalance' portion of the balance is stored in the least significant 128 bits of a 256 bit word, while the\n // The 'derivedBalance' part uses the remaining 128 bits.\n uint256 private constant _MAX_BALANCE = 2 ** (128) - 1;\n\n /// @notice One of the balances is above the maximum value that can be stored.\n error BalanceOverflow();\n\n function getBalanceRaw(bytes32 balance) internal pure returns (uint256) {\n return uint256(balance) & _MAX_BALANCE;\n }\n\n function getBalanceDerived(bytes32 balance) internal pure returns (uint256) {\n return uint256(balance >> 128) & _MAX_BALANCE;\n }\n\n /// @dev Sets only the raw balance of balances and returns the new bytes32 balance.\n function setBalanceRaw(bytes32 balance, uint256 newBalanceRaw) internal pure returns (bytes32) {\n return toPackedBalance(newBalanceRaw, getBalanceDerived(balance));\n }\n\n /// @dev Sets only the derived balance of balances and returns the new bytes32 balance.\n function setBalanceDerived(bytes32 balance, uint256 newBalanceDerived) internal pure returns (bytes32) {\n return toPackedBalance(getBalanceRaw(balance), newBalanceDerived);\n }\n\n /// @dev Validates the size of `balanceRaw` and `balanceDerived`, then returns a packed balance bytes32.\n function toPackedBalance(uint256 balanceRaw, uint256 balanceDerived) internal pure returns (bytes32) {\n if (balanceRaw > _MAX_BALANCE || balanceDerived > _MAX_BALANCE) {\n revert BalanceOverflow();\n }\n\n return _pack(balanceRaw, balanceDerived);\n }\n\n /// @dev Decode and fetch both balances.\n function fromPackedBalance(bytes32 balance) internal pure returns (uint256 balanceRaw, uint256 balanceDerived) {\n return (getBalanceRaw(balance), getBalanceDerived(balance));\n }\n\n /// @dev Packs two uint128 values into a packed balance bytes32. It does not check balance sizes.\n function _pack(uint256 leastSignificant, uint256 mostSignificant) private pure returns (bytes32) {\n return bytes32((mostSignificant << 128) + leastSignificant);\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { FixedPoint } from \"../math/FixedPoint.sol\";\nimport { InputHelpers } from \"./InputHelpers.sol\";\n\n/**\n * @notice Helper functions to apply/undo token decimal and rate adjustments, rounding in the direction indicated.\n * @dev To simplify Pool logic, all token balances and amounts are normalized to behave as if the token had\n * 18 decimals. When comparing DAI (18 decimals) and USDC (6 decimals), 1 USDC and 1 DAI would both be\n * represented as 1e18. This allows us to not consider differences in token decimals in the internal Pool\n * math, simplifying it greatly.\n *\n * The Vault does not support tokens with more than 18 decimals (see `_MAX_TOKEN_DECIMALS` in `VaultStorage`),\n * or tokens that do not implement `IERC20Metadata.decimals`.\n *\n * These helpers can also be used to scale amounts by other 18-decimal floating point values, such as rates.\n */\nlibrary ScalingHelpers {\n using FixedPoint for *;\n using ScalingHelpers for uint256;\n\n /***************************************************************************\n Single Value Functions\n ***************************************************************************/\n\n /**\n * @notice Applies `scalingFactor` and `tokenRate` to `amount`.\n * @dev This may result in a larger or equal value, depending on whether it needed scaling/rate adjustment or not.\n * The result is rounded down.\n *\n * @param amount Amount to be scaled up to 18 decimals\n * @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n * @param tokenRate The token rate scaling factor\n * @return result The final 18-decimal precision result, rounded down\n */\n function toScaled18ApplyRateRoundDown(\n uint256 amount,\n uint256 scalingFactor,\n uint256 tokenRate\n ) internal pure returns (uint256) {\n return (amount * scalingFactor).mulDown(tokenRate);\n }\n\n /**\n * @notice Applies `scalingFactor` and `tokenRate` to `amount`.\n * @dev This may result in a larger or equal value, depending on whether it needed scaling/rate adjustment or not.\n * The result is rounded up.\n *\n * @param amount Amount to be scaled up to 18 decimals\n * @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n * @param tokenRate The token rate scaling factor\n * @return result The final 18-decimal precision result, rounded up\n */\n function toScaled18ApplyRateRoundUp(\n uint256 amount,\n uint256 scalingFactor,\n uint256 tokenRate\n ) internal pure returns (uint256) {\n return (amount * scalingFactor).mulUp(tokenRate);\n }\n\n /**\n * @notice Reverses the `scalingFactor` and `tokenRate` applied to `amount`.\n * @dev This may result in a smaller or equal value, depending on whether it needed scaling/rate adjustment or not.\n * The result is rounded down.\n *\n * @param amount Amount to be scaled down to native token decimals\n * @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n * @param tokenRate The token rate scaling factor\n * @return result The final native decimal result, rounded down\n */\n function toRawUndoRateRoundDown(\n uint256 amount,\n uint256 scalingFactor,\n uint256 tokenRate\n ) internal pure returns (uint256) {\n // Do division last. Scaling factor is not a FP18, but a FP18 normalized by FP(1).\n // `scalingFactor * tokenRate` is a precise FP18, so there is no rounding direction here.\n return FixedPoint.divDown(amount, scalingFactor * tokenRate);\n }\n\n /**\n * @notice Reverses the `scalingFactor` and `tokenRate` applied to `amount`.\n * @dev This may result in a smaller or equal value, depending on whether it needed scaling/rate adjustment or not.\n * The result is rounded up.\n *\n * @param amount Amount to be scaled down to native token decimals\n * @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n * @param tokenRate The token rate scaling factor\n * @return result The final native decimal result, rounded up\n */\n function toRawUndoRateRoundUp(\n uint256 amount,\n uint256 scalingFactor,\n uint256 tokenRate\n ) internal pure returns (uint256) {\n // Do division last. Scaling factor is not a FP18, but a FP18 normalized by FP(1).\n // `scalingFactor * tokenRate` is a precise FP18, so there is no rounding direction here.\n return FixedPoint.divUp(amount, scalingFactor * tokenRate);\n }\n\n /***************************************************************************\n Array Functions\n ***************************************************************************/\n\n function copyToArray(uint256[] memory from, uint256[] memory to) internal pure {\n uint256 length = from.length;\n InputHelpers.ensureInputLengthMatch(length, to.length);\n\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n mcopy(add(to, 0x20), add(from, 0x20), mul(length, 0x20))\n }\n }\n\n /**\n * @notice Same as `toScaled18ApplyRateRoundDown`, but for an entire array.\n * @dev This function does not return anything, but instead *mutates* the `amounts` array.\n * @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n * @param scalingFactors The token decimal scaling factors, sorted in token registration order\n * @param tokenRates The token rate scaling factors, sorted in token registration order\n */\n function toScaled18ApplyRateRoundDownArray(\n uint256[] memory amounts,\n uint256[] memory scalingFactors,\n uint256[] memory tokenRates\n ) internal pure {\n uint256 length = amounts.length;\n InputHelpers.ensureInputLengthMatch(length, scalingFactors.length, tokenRates.length);\n\n for (uint256 i = 0; i < length; ++i) {\n amounts[i] = amounts[i].toScaled18ApplyRateRoundDown(scalingFactors[i], tokenRates[i]);\n }\n }\n\n /**\n * @notice Same as `toScaled18ApplyRateRoundDown`, but returns a new array, leaving the original intact.\n * @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n * @param scalingFactors The token decimal scaling factors, sorted in token registration order\n * @param tokenRates The token rate scaling factors, sorted in token registration order\n * @return results The final 18 decimal results, sorted in token registration order, rounded down\n */\n function copyToScaled18ApplyRateRoundDownArray(\n uint256[] memory amounts,\n uint256[] memory scalingFactors,\n uint256[] memory tokenRates\n ) internal pure returns (uint256[] memory) {\n uint256 length = amounts.length;\n InputHelpers.ensureInputLengthMatch(length, scalingFactors.length, tokenRates.length);\n uint256[] memory amountsScaled18 = new uint256[](length);\n\n for (uint256 i = 0; i < length; ++i) {\n amountsScaled18[i] = amounts[i].toScaled18ApplyRateRoundDown(scalingFactors[i], tokenRates[i]);\n }\n\n return amountsScaled18;\n }\n\n /**\n * @notice Same as `toScaled18ApplyRateRoundUp`, but for an entire array.\n * @dev This function does not return anything, but instead *mutates* the `amounts` array.\n * @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n * @param scalingFactors The token decimal scaling factors, sorted in token registration order\n * @param tokenRates The token rate scaling factors, sorted in token registration order\n */\n function toScaled18ApplyRateRoundUpArray(\n uint256[] memory amounts,\n uint256[] memory scalingFactors,\n uint256[] memory tokenRates\n ) internal pure {\n uint256 length = amounts.length;\n InputHelpers.ensureInputLengthMatch(length, scalingFactors.length, tokenRates.length);\n\n for (uint256 i = 0; i < length; ++i) {\n amounts[i] = amounts[i].toScaled18ApplyRateRoundUp(scalingFactors[i], tokenRates[i]);\n }\n }\n\n /**\n * @notice Same as `toScaled18ApplyRateRoundUp`, but returns a new array, leaving the original intact.\n * @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n * @param scalingFactors The token decimal scaling factors, sorted in token registration order\n * @param tokenRates The token rate scaling factors, sorted in token registration order\n * @return results The final 18 decimal results, sorted in token registration order, rounded up\n */\n function copyToScaled18ApplyRateRoundUpArray(\n uint256[] memory amounts,\n uint256[] memory scalingFactors,\n uint256[] memory tokenRates\n ) internal pure returns (uint256[] memory) {\n uint256 length = amounts.length;\n InputHelpers.ensureInputLengthMatch(length, scalingFactors.length, tokenRates.length);\n uint256[] memory amountsScaled18 = new uint256[](length);\n\n for (uint256 i = 0; i < length; ++i) {\n amountsScaled18[i] = amounts[i].toScaled18ApplyRateRoundUp(scalingFactors[i], tokenRates[i]);\n }\n\n return amountsScaled18;\n }\n\n /**\n * @notice Rounds up a rate informed by a rate provider.\n * @dev Rates calculated by an external rate provider have rounding errors. Intuitively, a rate provider\n * rounds the rate down so the pool math is executed with conservative amounts. However, when upscaling or\n * downscaling the amount out, the rate should be rounded up to make sure the amounts scaled are conservative.\n * @param rate The original rate\n * @return roundedRate The final rate, with rounding applied\n */\n function computeRateRoundUp(uint256 rate) internal pure returns (uint256) {\n uint256 roundedRate;\n // If rate is divisible by FixedPoint.ONE, roundedRate and rate will be equal. It means that rate has 18 zeros,\n // so there's no rounding issue and the rate should not be rounded up.\n unchecked {\n roundedRate = (rate / FixedPoint.ONE) * FixedPoint.ONE;\n }\n return roundedRate == rate ? rate : rate + 1;\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { StorageSlotExtension } from \"../openzeppelin/StorageSlotExtension.sol\";\nimport { SlotDerivation } from \"../openzeppelin/SlotDerivation.sol\";\n\ntype TokenDeltaMappingSlotType is bytes32;\ntype AddressToUintMappingSlot is bytes32;\ntype UintToAddressToBooleanMappingSlot is bytes32;\ntype AddressArraySlotType is bytes32;\n\n/**\n * @notice Helper functions to read and write values from transient storage, including support for arrays and mappings.\n * @dev This is temporary, based on Open Zeppelin's partially released library. When the final version is published, we\n * should be able to remove our copies and import directly from OZ. When Solidity catches up and puts direct support\n * for transient storage in the language, we should be able to get rid of this altogether.\n *\n * This only works on networks where EIP-1153 is supported.\n */\nlibrary TransientStorageHelpers {\n using SlotDerivation for *;\n using StorageSlotExtension for *;\n\n /// @notice An index is out of bounds on an array operation (e.g., at).\n error TransientIndexOutOfBounds();\n\n // Calculate the slot for a transient storage variable.\n function calculateSlot(string memory domain, string memory varName) internal pure returns (bytes32) {\n return\n keccak256(\n abi.encode(uint256(keccak256(abi.encodePacked(\"balancer-labs.v3.storage.\", domain, \".\", varName))) - 1)\n ) & ~bytes32(uint256(0xff));\n }\n\n /***************************************************************************\n Mappings\n ***************************************************************************/\n\n function tGet(TokenDeltaMappingSlotType slot, IERC20 k1) internal view returns (int256) {\n return TokenDeltaMappingSlotType.unwrap(slot).deriveMapping(address(k1)).asInt256().tload();\n }\n\n function tSet(TokenDeltaMappingSlotType slot, IERC20 k1, int256 value) internal {\n TokenDeltaMappingSlotType.unwrap(slot).deriveMapping(address(k1)).asInt256().tstore(value);\n }\n\n function tGet(AddressToUintMappingSlot slot, address key) internal view returns (uint256) {\n return AddressToUintMappingSlot.unwrap(slot).deriveMapping(key).asUint256().tload();\n }\n\n function tSet(AddressToUintMappingSlot slot, address key, uint256 value) internal {\n AddressToUintMappingSlot.unwrap(slot).deriveMapping(key).asUint256().tstore(value);\n }\n\n function tGet(\n UintToAddressToBooleanMappingSlot slot,\n uint256 uintKey,\n address addressKey\n ) internal view returns (bool) {\n return\n UintToAddressToBooleanMappingSlot\n .unwrap(slot)\n .deriveMapping(uintKey)\n .deriveMapping(addressKey)\n .asBoolean()\n .tload();\n }\n\n function tSet(UintToAddressToBooleanMappingSlot slot, uint256 uintKey, address addressKey, bool value) internal {\n UintToAddressToBooleanMappingSlot\n .unwrap(slot)\n .deriveMapping(uintKey)\n .deriveMapping(addressKey)\n .asBoolean()\n .tstore(value);\n }\n\n // Implement the common \"+=\" operation: map[key] += value.\n function tAdd(AddressToUintMappingSlot slot, address key, uint256 value) internal {\n AddressToUintMappingSlot.unwrap(slot).deriveMapping(key).asUint256().tstore(tGet(slot, key) + value);\n }\n\n function tSub(AddressToUintMappingSlot slot, address key, uint256 value) internal {\n AddressToUintMappingSlot.unwrap(slot).deriveMapping(key).asUint256().tstore(tGet(slot, key) - value);\n }\n\n /***************************************************************************\n Arrays\n ***************************************************************************/\n\n function tLength(AddressArraySlotType slot) internal view returns (uint256) {\n return AddressArraySlotType.unwrap(slot).asUint256().tload();\n }\n\n function tAt(AddressArraySlotType slot, uint256 index) internal view returns (address) {\n _ensureIndexWithinBounds(slot, index);\n return AddressArraySlotType.unwrap(slot).deriveArray().offset(index).asAddress().tload();\n }\n\n function tSet(AddressArraySlotType slot, uint256 index, address value) internal {\n _ensureIndexWithinBounds(slot, index);\n AddressArraySlotType.unwrap(slot).deriveArray().offset(index).asAddress().tstore(value);\n }\n\n function _ensureIndexWithinBounds(AddressArraySlotType slot, uint256 index) private view {\n uint256 length = AddressArraySlotType.unwrap(slot).asUint256().tload();\n if (index >= length) {\n revert TransientIndexOutOfBounds();\n }\n }\n\n function tUncheckedAt(AddressArraySlotType slot, uint256 index) internal view returns (address) {\n return AddressArraySlotType.unwrap(slot).deriveArray().offset(index).asAddress().tload();\n }\n\n function tUncheckedSet(AddressArraySlotType slot, uint256 index, address value) internal {\n AddressArraySlotType.unwrap(slot).deriveArray().offset(index).asAddress().tstore(value);\n }\n\n function tPush(AddressArraySlotType slot, address value) internal {\n // Store the value at offset corresponding to the current length.\n uint256 length = AddressArraySlotType.unwrap(slot).asUint256().tload();\n AddressArraySlotType.unwrap(slot).deriveArray().offset(length).asAddress().tstore(value);\n // Update current length to consider the new value.\n AddressArraySlotType.unwrap(slot).asUint256().tstore(length + 1);\n }\n\n function tPop(AddressArraySlotType slot) internal returns (address value) {\n uint256 lastElementIndex = AddressArraySlotType.unwrap(slot).asUint256().tload() - 1;\n // Update length to last element. When the index is 0, the slot that holds the length is cleared out.\n AddressArraySlotType.unwrap(slot).asUint256().tstore(lastElementIndex);\n StorageSlotExtension.AddressSlotType lastElementSlot = AddressArraySlotType\n .unwrap(slot)\n .deriveArray()\n .offset(lastElementIndex)\n .asAddress();\n // Return last element.\n value = lastElementSlot.tload();\n // Clear value in temporary storage.\n lastElementSlot.tstore(address(0));\n }\n\n /***************************************************************************\n Uint256 Values\n ***************************************************************************/\n\n function tIncrement(StorageSlotExtension.Uint256SlotType slot) internal {\n slot.tstore(slot.tload() + 1);\n }\n\n function tDecrement(StorageSlotExtension.Uint256SlotType slot) internal {\n slot.tstore(slot.tload() - 1);\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SignedMath } from \"@openzeppelin/contracts/utils/math/SignedMath.sol\";\nimport { Math } from \"@openzeppelin/contracts/utils/math/Math.sol\";\n\n/**\n * @notice Library for encoding and decoding values stored inside a 256 bit word.\n * @dev Typically used to pack multiple values in a single slot, saving gas by performing fewer storage accesses.\n *\n * Each value is defined by its size and the least significant bit in the word, also known as offset. For example, two\n * 128 bit values may be encoded in a word by assigning one an offset of 0, and the other an offset of 128.\n *\n * We could use Solidity structs to pack values together in a single storage slot instead of relying on a custom and\n * error-prone library, but unfortunately Solidity only allows for structs to live in either storage, calldata or\n * memory. Because a memory struct uses not just memory but also a slot in the stack (to store its memory location),\n * using memory for word-sized values (i.e. of 256 bits or less) is strictly less gas performant, and doesn't even\n * prevent stack-too-deep issues. This is compounded by the fact that Balancer contracts typically are memory-\n * intensive, and the cost of accessing memory increases quadratically with the number of allocated words. Manual\n * packing and unpacking is therefore the preferred approach.\n */\nlibrary WordCodec {\n using Math for uint256;\n using SignedMath for int256;\n\n // solhint-disable no-inline-assembly\n\n /// @notice Function called with an invalid value.\n error CodecOverflow();\n\n /// @notice Function called with an invalid bitLength or offset.\n error OutOfBounds();\n\n /***************************************************************************\n In-place Insertion\n ***************************************************************************/\n\n /**\n * @dev Inserts an unsigned integer of bitLength, shifted by an offset, into a 256 bit word,\n * replacing the old value. Returns the new word.\n */\n function insertUint(\n bytes32 word,\n uint256 value,\n uint256 offset,\n uint256 bitLength\n ) internal pure returns (bytes32 result) {\n _validateEncodingParams(value, offset, bitLength);\n // Equivalent to:\n // uint256 mask = (1 << bitLength) - 1;\n // bytes32 clearedWord = bytes32(uint256(word) & ~(mask << offset));\n // result = clearedWord | bytes32(value << offset);\n\n assembly (\"memory-safe\") {\n let mask := sub(shl(bitLength, 1), 1)\n let clearedWord := and(word, not(shl(offset, mask)))\n result := or(clearedWord, shl(offset, value))\n }\n }\n\n /**\n * @dev Inserts an address (160 bits), shifted by an offset, into a 256 bit word,\n * replacing the old value. Returns the new word.\n */\n function insertAddress(bytes32 word, address value, uint256 offset) internal pure returns (bytes32 result) {\n uint256 addressBitLength = 160;\n _validateEncodingParams(uint256(uint160(value)), offset, addressBitLength);\n // Equivalent to:\n // uint256 mask = (1 << bitLength) - 1;\n // bytes32 clearedWord = bytes32(uint256(word) & ~(mask << offset));\n // result = clearedWord | bytes32(value << offset);\n\n assembly (\"memory-safe\") {\n let mask := sub(shl(addressBitLength, 1), 1)\n let clearedWord := and(word, not(shl(offset, mask)))\n result := or(clearedWord, shl(offset, value))\n }\n }\n\n /**\n * @dev Inserts a signed integer shifted by an offset into a 256 bit word, replacing the old value. Returns\n * the new word.\n *\n * Assumes `value` can be represented using `bitLength` bits.\n */\n function insertInt(bytes32 word, int256 value, uint256 offset, uint256 bitLength) internal pure returns (bytes32) {\n _validateEncodingParams(value, offset, bitLength);\n\n uint256 mask = (1 << bitLength) - 1;\n bytes32 clearedWord = bytes32(uint256(word) & ~(mask << offset));\n // Integer values need masking to remove the upper bits of negative values.\n return clearedWord | bytes32((uint256(value) & mask) << offset);\n }\n\n /***************************************************************************\n Encoding\n ***************************************************************************/\n\n /**\n * @dev Encodes an unsigned integer shifted by an offset. Ensures value fits within\n * `bitLength` bits.\n *\n * The return value can be ORed bitwise with other encoded values to form a 256 bit word.\n */\n function encodeUint(uint256 value, uint256 offset, uint256 bitLength) internal pure returns (bytes32) {\n _validateEncodingParams(value, offset, bitLength);\n\n return bytes32(value << offset);\n }\n\n /**\n * @dev Encodes a signed integer shifted by an offset.\n *\n * The return value can be ORed bitwise with other encoded values to form a 256 bit word.\n */\n function encodeInt(int256 value, uint256 offset, uint256 bitLength) internal pure returns (bytes32) {\n _validateEncodingParams(value, offset, bitLength);\n\n uint256 mask = (1 << bitLength) - 1;\n // Integer values need masking to remove the upper bits of negative values.\n return bytes32((uint256(value) & mask) << offset);\n }\n\n /***************************************************************************\n Decoding\n ***************************************************************************/\n\n /// @dev Decodes and returns an unsigned integer with `bitLength` bits, shifted by an offset, from a 256 bit word.\n function decodeUint(bytes32 word, uint256 offset, uint256 bitLength) internal pure returns (uint256 result) {\n // Equivalent to:\n // result = uint256(word >> offset) & ((1 << bitLength) - 1);\n\n assembly (\"memory-safe\") {\n result := and(shr(offset, word), sub(shl(bitLength, 1), 1))\n }\n }\n\n /// @dev Decodes and returns a signed integer with `bitLength` bits, shifted by an offset, from a 256 bit word.\n function decodeInt(bytes32 word, uint256 offset, uint256 bitLength) internal pure returns (int256 result) {\n int256 maxInt = int256((1 << (bitLength - 1)) - 1);\n uint256 mask = (1 << bitLength) - 1;\n\n int256 value = int256(uint256(word >> offset) & mask);\n // In case the decoded value is greater than the max positive integer that can be represented with bitLength\n // bits, we know it was originally a negative integer. Therefore, we mask it to restore the sign in the 256 bit\n // representation.\n //\n // Equivalent to:\n // result = value > maxInt ? (value | int256(~mask)) : value;\n\n assembly (\"memory-safe\") {\n result := or(mul(gt(value, maxInt), not(mask)), value)\n }\n }\n\n /// @dev Decodes and returns an address (160 bits), shifted by an offset, from a 256 bit word.\n function decodeAddress(bytes32 word, uint256 offset) internal pure returns (address result) {\n // Equivalent to:\n // result = address(word >> offset) & ((1 << bitLength) - 1);\n\n assembly (\"memory-safe\") {\n result := and(shr(offset, word), sub(shl(160, 1), 1))\n }\n }\n\n /***************************************************************************\n Special Cases\n ***************************************************************************/\n\n /// @dev Decodes and returns a boolean shifted by an offset from a 256 bit word.\n function decodeBool(bytes32 word, uint256 offset) internal pure returns (bool result) {\n // Equivalent to:\n // result = (uint256(word >> offset) & 1) == 1;\n\n assembly (\"memory-safe\") {\n result := and(shr(offset, word), 1)\n }\n }\n\n /**\n * @dev Inserts a boolean value shifted by an offset into a 256 bit word, replacing the old value.\n * Returns the new word.\n */\n function insertBool(bytes32 word, bool value, uint256 offset) internal pure returns (bytes32 result) {\n // Equivalent to:\n // bytes32 clearedWord = bytes32(uint256(word) & ~(1 << offset));\n // bytes32 referenceInsertBool = clearedWord | bytes32(uint256(value ? 1 : 0) << offset);\n\n assembly (\"memory-safe\") {\n let clearedWord := and(word, not(shl(offset, 1)))\n result := or(clearedWord, shl(offset, value))\n }\n }\n\n /***************************************************************************\n Helpers\n ***************************************************************************/\n\n function _validateEncodingParams(uint256 value, uint256 offset, uint256 bitLength) private pure {\n if (offset >= 256) {\n revert OutOfBounds();\n }\n // We never accept 256 bit values (which would make the codec pointless), and the larger the offset the smaller\n // the maximum bit length.\n if (!(bitLength >= 1 && bitLength <= Math.min(255, 256 - offset))) {\n revert OutOfBounds();\n }\n\n // Testing unsigned values for size is straightforward: their upper bits must be cleared.\n if (value >> bitLength != 0) {\n revert CodecOverflow();\n }\n }\n\n function _validateEncodingParams(int256 value, uint256 offset, uint256 bitLength) private pure {\n if (offset >= 256) {\n revert OutOfBounds();\n }\n // We never accept 256 bit values (which would make the codec pointless), and the larger the offset the smaller\n // the maximum bit length.\n if (!(bitLength >= 1 && bitLength <= Math.min(255, 256 - offset))) {\n revert OutOfBounds();\n }\n\n // Testing signed values for size is a bit more involved.\n if (value >= 0) {\n // For positive values, we can simply check that the upper bits are clear. Notice we remove one bit from the\n // length for the sign bit.\n if (value >> (bitLength - 1) != 0) {\n revert CodecOverflow();\n }\n } else {\n // Negative values can receive the same treatment by making them positive, with the caveat that the range\n // for negative values in two's complement supports one more value than for the positive case.\n if ((value + 1).abs() >> (bitLength - 1) != 0) {\n revert CodecOverflow();\n }\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { LogExpMath } from \"./LogExpMath.sol\";\n\n/// @notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\nlibrary FixedPoint {\n /// @notice Attempted division by zero.\n error ZeroDivision();\n\n // solhint-disable no-inline-assembly\n // solhint-disable private-vars-leading-underscore\n\n uint256 internal constant ONE = 1e18; // 18 decimal places\n uint256 internal constant TWO = 2 * ONE;\n uint256 internal constant FOUR = 4 * ONE;\n uint256 internal constant MAX_POW_RELATIVE_ERROR = 10000; // 10^(-14)\n\n function mulDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n return product / ONE;\n }\n\n function mulUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n // Equivalent to:\n // result = product == 0 ? 0 : ((product - 1) / FixedPoint.ONE) + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), ONE), 1))\n }\n }\n\n function divDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Solidity 0.8 reverts with a Panic code (0x11) if the multiplication overflows.\n uint256 aInflated = a * ONE;\n\n // Solidity 0.8 reverts with a \"Division by Zero\" Panic code (0x12) if b is zero\n return aInflated / b;\n }\n\n function divUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n return mulDivUp(a, ONE, b);\n }\n\n /// @dev Return (a * b) / c, rounding up.\n function mulDivUp(uint256 a, uint256 b, uint256 c) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on c==0.\n if (c == 0) {\n revert ZeroDivision();\n }\n\n // Multiple overflow protection is done by Solidity 0.8.x.\n uint256 product = a * b;\n\n // The traditional divUp formula is:\n // divUp(x, y) := (x + y - 1) / y\n // To avoid intermediate overflow in the addition, we distribute the division and get:\n // divUp(x, y) := (x - 1) / y + 1\n // Note that this requires x != 0, if x == 0 then the result is zero\n //\n // Equivalent to:\n // result = a == 0 ? 0 : (a * b - 1) / c + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), c), 1))\n }\n }\n\n /**\n * @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n * invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n * This can occur in calculations with many successive multiplications and divisions, and\n * we want to minimize the number of operations by avoiding unnecessary scaling by ONE.\n */\n function divUpRaw(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on b==0.\n if (b == 0) {\n revert ZeroDivision();\n }\n\n // Equivalent to:\n // result = a == 0 ? 0 : 1 + (a - 1) / b\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(a)), add(1, div(sub(a, 1), b)))\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n * the true value (that is, the error function expected - actual is always positive).\n */\n function powDown(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulDown(x, x);\n } else if (y == FOUR) {\n uint256 square = mulDown(x, x);\n return mulDown(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n if (raw < maxError) {\n return 0;\n } else {\n unchecked {\n return raw - maxError;\n }\n }\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n * the true value (that is, the error function expected - actual is always negative).\n */\n function powUp(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulUp(x, x);\n } else if (y == FOUR) {\n uint256 square = mulUp(x, x);\n return mulUp(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n return raw + maxError;\n }\n }\n\n /**\n * @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n *\n * Useful when computing the complement for values with some level of relative error, as it strips this error and\n * prevents intermediate negative values.\n */\n function complement(uint256 x) internal pure returns (uint256 result) {\n // Equivalent to:\n // result = (x < ONE) ? (ONE - x) : 0\n assembly (\"memory-safe\") {\n result := mul(lt(x, ONE), sub(ONE, x))\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n// solhint-disable\n\n/**\n * @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n *\n * Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n * exponentiation and logarithm (where the base is Euler's number).\n *\n * All math operations are unchecked in order to save gas.\n *\n * @author Fernando Martinelli - @fernandomartinelli\n * @author Sergio Yuhjtman - @sergioyuhjtman\n * @author Daniel Fernandez - @dmf7z\n */\nlibrary LogExpMath {\n /// @notice This error is thrown when a base is not within an acceptable range.\n error BaseOutOfBounds();\n\n /// @notice This error is thrown when a exponent is not within an acceptable range.\n error ExponentOutOfBounds();\n\n /// @notice This error is thrown when the exponent * ln(base) is not within an acceptable range.\n error ProductOutOfBounds();\n\n /// @notice This error is thrown when an exponent used in the exp function is not within an acceptable range.\n error InvalidExponent();\n\n /// @notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\n error OutOfBounds();\n\n // All fixed point multiplications and divisions are inlined. This means we need to divide by ONE when multiplying\n // two numbers, and multiply by ONE when dividing them.\n\n // All arguments and return values are 18 decimal fixed point numbers.\n int256 constant ONE_18 = 1e18;\n\n // Internally, intermediate values are computed with higher precision as 20 decimal fixed point numbers, and in the\n // case of ln36, 36 decimals.\n int256 constant ONE_20 = 1e20;\n int256 constant ONE_36 = 1e36;\n\n // The domain of natural exponentiation is bound by the word size and number of decimals used.\n //\n // Because internally the result will be stored using 20 decimals, the largest possible result is\n // (2^255 - 1) / 10^20, which makes the largest exponent ln((2^255 - 1) / 10^20) = 130.700829182905140221.\n // The smallest possible result is 10^(-18), which makes largest negative argument\n // ln(10^(-18)) = -41.446531673892822312.\n // We use 130.0 and -41.0 to have some safety margin.\n int256 constant MAX_NATURAL_EXPONENT = 130e18;\n int256 constant MIN_NATURAL_EXPONENT = -41e18;\n\n // Bounds for ln_36's argument. Both ln(0.9) and ln(1.1) can be represented with 36 decimal places in a fixed point\n // 256 bit integer.\n int256 constant LN_36_LOWER_BOUND = ONE_18 - 1e17;\n int256 constant LN_36_UPPER_BOUND = ONE_18 + 1e17;\n\n uint256 constant MILD_EXPONENT_BOUND = 2 ** 254 / uint256(ONE_20);\n\n // 18 decimal constants\n int256 constant x0 = 128000000000000000000; // 2ˆ7\n int256 constant a0 = 38877084059945950922200000000000000000000000000000000000; // eˆ(x0) (no decimals)\n int256 constant x1 = 64000000000000000000; // 2ˆ6\n int256 constant a1 = 6235149080811616882910000000; // eˆ(x1) (no decimals)\n\n // 20 decimal constants\n int256 constant x2 = 3200000000000000000000; // 2ˆ5\n int256 constant a2 = 7896296018268069516100000000000000; // eˆ(x2)\n int256 constant x3 = 1600000000000000000000; // 2ˆ4\n int256 constant a3 = 888611052050787263676000000; // eˆ(x3)\n int256 constant x4 = 800000000000000000000; // 2ˆ3\n int256 constant a4 = 298095798704172827474000; // eˆ(x4)\n int256 constant x5 = 400000000000000000000; // 2ˆ2\n int256 constant a5 = 5459815003314423907810; // eˆ(x5)\n int256 constant x6 = 200000000000000000000; // 2ˆ1\n int256 constant a6 = 738905609893065022723; // eˆ(x6)\n int256 constant x7 = 100000000000000000000; // 2ˆ0\n int256 constant a7 = 271828182845904523536; // eˆ(x7)\n int256 constant x8 = 50000000000000000000; // 2ˆ-1\n int256 constant a8 = 164872127070012814685; // eˆ(x8)\n int256 constant x9 = 25000000000000000000; // 2ˆ-2\n int256 constant a9 = 128402541668774148407; // eˆ(x9)\n int256 constant x10 = 12500000000000000000; // 2ˆ-3\n int256 constant a10 = 113314845306682631683; // eˆ(x10)\n int256 constant x11 = 6250000000000000000; // 2ˆ-4\n int256 constant a11 = 106449445891785942956; // eˆ(x11)\n\n /**\n * @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n *\n * Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function pow(uint256 x, uint256 y) internal pure returns (uint256) {\n if (y == 0) {\n // We solve the 0^0 indetermination by making it equal one.\n return uint256(ONE_18);\n }\n\n if (x == 0) {\n return 0;\n }\n\n // Instead of computing x^y directly, we instead rely on the properties of logarithms and exponentiation to\n // arrive at that result. In particular, exp(ln(x)) = x, and ln(x^y) = y * ln(x). This means\n // x^y = exp(y * ln(x)).\n\n // The ln function takes a signed value, so we need to make sure x fits in the signed 256 bit range.\n if (x >> 255 != 0) {\n revert BaseOutOfBounds();\n }\n int256 x_int256 = int256(x);\n\n // We will compute y * ln(x) in a single step. Depending on the value of x, we can either use ln or ln_36. In\n // both cases, we leave the division by ONE_18 (due to fixed point multiplication) to the end.\n\n // This prevents y * ln(x) from overflowing, and at the same time guarantees y fits in the signed 256 bit range.\n if (y >= MILD_EXPONENT_BOUND) {\n revert ExponentOutOfBounds();\n }\n int256 y_int256 = int256(y);\n\n int256 logx_times_y;\n unchecked {\n if (LN_36_LOWER_BOUND < x_int256 && x_int256 < LN_36_UPPER_BOUND) {\n int256 ln_36_x = _ln_36(x_int256);\n\n // ln_36_x has 36 decimal places, so multiplying by y_int256 isn't as straightforward, since we can't just\n // bring y_int256 to 36 decimal places, as it might overflow. Instead, we perform two 18 decimal\n // multiplications and add the results: one with the first 18 decimals of ln_36_x, and one with the\n // (downscaled) last 18 decimals.\n logx_times_y = ((ln_36_x / ONE_18) * y_int256 + ((ln_36_x % ONE_18) * y_int256) / ONE_18);\n } else {\n logx_times_y = _ln(x_int256) * y_int256;\n }\n logx_times_y /= ONE_18;\n }\n\n // Finally, we compute exp(y * ln(x)) to arrive at x^y\n if (!(MIN_NATURAL_EXPONENT <= logx_times_y && logx_times_y <= MAX_NATURAL_EXPONENT)) {\n revert ProductOutOfBounds();\n }\n\n return uint256(exp(logx_times_y));\n }\n\n /**\n * @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n *\n * Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function exp(int256 x) internal pure returns (int256) {\n if (!(x >= MIN_NATURAL_EXPONENT && x <= MAX_NATURAL_EXPONENT)) {\n revert InvalidExponent();\n }\n\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (x < 0) {\n // We only handle positive exponents: e^(-x) is computed as 1 / e^x. We can safely make x positive since it\n // fits in the signed 256 bit range (as it is larger than MIN_NATURAL_EXPONENT). In the negative\n // exponent case, compute e^x, then return 1 / result.\n unchecked {\n x = -x;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that e^(x+y) = e^x * e^y to decompose x into a sum of powers of two, which we call x_n,\n // where x_n == 2^(7 - n), and e^x_n = a_n has been precomputed. We choose the first x_n, x0, to equal 2^7\n // because all larger powers are larger than MAX_NATURAL_EXPONENT, and therefore not present in the\n // decomposition.\n // At the end of this process we will have the product of all e^x_n = a_n that apply, and the remainder of this\n // decomposition, which will be lower than the smallest x_n.\n // exp(x) = k_0 * a_0 * k_1 * a_1 * ... + k_n * a_n * exp(remainder), where each k_n equals either 0 or 1.\n // We mutate x by subtracting x_n, making it the remainder of the decomposition.\n\n // The first two a_n (e^(2^7) and e^(2^6)) are too large if stored as 18 decimal numbers, and could cause\n // intermediate overflows. Instead we store them as plain integers, with 0 decimals.\n // Additionally, x0 + x1 is larger than MAX_NATURAL_EXPONENT, which means they will not both be present in the\n // decomposition.\n\n // For each x_n, we test if that term is present in the decomposition (if x is larger than it), and if so deduct\n // it and compute the accumulated product.\n\n int256 firstAN;\n unchecked {\n if (x >= x0) {\n x -= x0;\n firstAN = a0;\n } else if (x >= x1) {\n x -= x1;\n firstAN = a1;\n } else {\n firstAN = 1; // One with no decimal places\n }\n\n // We now transform x into a 20 decimal fixed point number, to have enhanced precision when computing the\n // smaller terms.\n x *= 100;\n }\n\n // `product` is the accumulated product of all a_n (except a0 and a1), which starts at 20 decimal fixed point\n // one. Recall that fixed point multiplication requires dividing by ONE_20.\n int256 product = ONE_20;\n\n unchecked {\n if (x >= x2) {\n x -= x2;\n product = (product * a2) / ONE_20;\n }\n if (x >= x3) {\n x -= x3;\n product = (product * a3) / ONE_20;\n }\n if (x >= x4) {\n x -= x4;\n product = (product * a4) / ONE_20;\n }\n if (x >= x5) {\n x -= x5;\n product = (product * a5) / ONE_20;\n }\n if (x >= x6) {\n x -= x6;\n product = (product * a6) / ONE_20;\n }\n if (x >= x7) {\n x -= x7;\n product = (product * a7) / ONE_20;\n }\n if (x >= x8) {\n x -= x8;\n product = (product * a8) / ONE_20;\n }\n if (x >= x9) {\n x -= x9;\n product = (product * a9) / ONE_20;\n }\n }\n\n // x10 and x11 are unnecessary here since we have high enough precision already.\n\n // Now we need to compute e^x, where x is small (in particular, it is smaller than x9). We use the Taylor series\n // expansion for e^x: 1 + x + (x^2 / 2!) + (x^3 / 3!) + ... + (x^n / n!).\n\n int256 seriesSum = ONE_20; // The initial one in the sum, with 20 decimal places.\n int256 term; // Each term in the sum, where the nth term is (x^n / n!).\n\n // The first term is simply x.\n term = x;\n unchecked {\n seriesSum += term;\n\n // Each term (x^n / n!) equals the previous one times x, divided by n. Since x is a fixed point number,\n // multiplying by it requires dividing by ONE_20, but dividing by the non-fixed point n values does not.\n\n term = ((term * x) / ONE_20) / 2;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 3;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 4;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 5;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 6;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 7;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 8;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 9;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 10;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 11;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 12;\n seriesSum += term;\n\n // 12 Taylor terms are sufficient for 18 decimal precision.\n\n // We now have the first a_n (with no decimals), and the product of all other a_n present, and the Taylor\n // approximation of the exponentiation of the remainder (both with 20 decimals). All that remains is to multiply\n // all three (one 20 decimal fixed point multiplication, dividing by ONE_20, and one integer multiplication),\n // and then drop two digits to return an 18 decimal value.\n\n int256 result = (((product * seriesSum) / ONE_20) * firstAN) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? (ONE_18 * ONE_18) / result : result;\n }\n }\n\n /// @dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument.\n function log(int256 arg, int256 base) internal pure returns (int256) {\n // This performs a simple base change: log(arg, base) = ln(arg) / ln(base).\n\n // Both logBase and logArg are computed as 36 decimal fixed point numbers, either by using ln_36, or by\n // upscaling.\n\n int256 logBase;\n unchecked {\n if (LN_36_LOWER_BOUND < base && base < LN_36_UPPER_BOUND) {\n logBase = _ln_36(base);\n } else {\n logBase = _ln(base) * ONE_18;\n }\n }\n\n int256 logArg;\n unchecked {\n if (LN_36_LOWER_BOUND < arg && arg < LN_36_UPPER_BOUND) {\n logArg = _ln_36(arg);\n } else {\n logArg = _ln(arg) * ONE_18;\n }\n\n // When dividing, we multiply by ONE_18 to arrive at a result with 18 decimal places\n return (logArg * ONE_18) / logBase;\n }\n }\n\n /// @dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function ln(int256 a) internal pure returns (int256) {\n // The real natural logarithm is not defined for negative numbers or zero.\n if (a <= 0) {\n revert OutOfBounds();\n }\n if (LN_36_LOWER_BOUND < a && a < LN_36_UPPER_BOUND) {\n unchecked {\n return _ln_36(a) / ONE_18;\n }\n } else {\n return _ln(a);\n }\n }\n\n /// @dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function _ln(int256 a) private pure returns (int256) {\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (a < ONE_18) {\n // Since ln(a^k) = k * ln(a), we can compute ln(a) as ln(a) = ln((1/a)^(-1)) = - ln((1/a)). If a is less\n // than one, 1/a will be greater than one, so in this case we compute ln(1/a) and negate the final result.\n unchecked {\n a = (ONE_18 * ONE_18) / a;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that ln^(a * b) = ln(a) + ln(b) to decompose ln(a) into a sum of powers of two, which\n // we call x_n, where x_n == 2^(7 - n), which are the natural logarithm of precomputed quantities a_n (that is,\n // ln(a_n) = x_n). We choose the first x_n, x0, to equal 2^7 because the exponential of all larger powers cannot\n // be represented as 18 fixed point decimal numbers in 256 bits, and are therefore larger than a.\n // At the end of this process we will have the sum of all x_n = ln(a_n) that apply, and the remainder of this\n // decomposition, which will be lower than the smallest a_n.\n // ln(a) = k_0 * x_0 + k_1 * x_1 + ... + k_n * x_n + ln(remainder), where each k_n equals either 0 or 1.\n // We mutate a by subtracting a_n, making it the remainder of the decomposition.\n\n // For reasons related to how `exp` works, the first two a_n (e^(2^7) and e^(2^6)) are not stored as fixed point\n // numbers with 18 decimals, but instead as plain integers with 0 decimals, so we need to multiply them by\n // ONE_18 to convert them to fixed point.\n // For each a_n, we test if that term is present in the decomposition (if a is larger than it), and if so divide\n // by it and compute the accumulated sum.\n\n int256 sum = 0;\n unchecked {\n if (a >= a0 * ONE_18) {\n a /= a0; // Integer, not fixed point division\n sum += x0;\n }\n\n if (a >= a1 * ONE_18) {\n a /= a1; // Integer, not fixed point division\n sum += x1;\n }\n\n // All other a_n and x_n are stored as 20 digit fixed point numbers, so we convert the sum and a to this format.\n sum *= 100;\n a *= 100;\n\n // Because further a_n are 20 digit fixed point numbers, we multiply by ONE_20 when dividing by them.\n\n if (a >= a2) {\n a = (a * ONE_20) / a2;\n sum += x2;\n }\n\n if (a >= a3) {\n a = (a * ONE_20) / a3;\n sum += x3;\n }\n\n if (a >= a4) {\n a = (a * ONE_20) / a4;\n sum += x4;\n }\n\n if (a >= a5) {\n a = (a * ONE_20) / a5;\n sum += x5;\n }\n\n if (a >= a6) {\n a = (a * ONE_20) / a6;\n sum += x6;\n }\n\n if (a >= a7) {\n a = (a * ONE_20) / a7;\n sum += x7;\n }\n\n if (a >= a8) {\n a = (a * ONE_20) / a8;\n sum += x8;\n }\n\n if (a >= a9) {\n a = (a * ONE_20) / a9;\n sum += x9;\n }\n\n if (a >= a10) {\n a = (a * ONE_20) / a10;\n sum += x10;\n }\n\n if (a >= a11) {\n a = (a * ONE_20) / a11;\n sum += x11;\n }\n }\n\n // a is now a small number (smaller than a_11, which roughly equals 1.06). This means we can use a Taylor series\n // that converges rapidly for values of `a` close to one - the same one used in ln_36.\n // Let z = (a - 1) / (a + 1).\n // ln(a) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 20 digit fixed point division requires multiplying by ONE_20, and multiplication requires\n // division by ONE_20.\n unchecked {\n int256 z = ((a - ONE_20) * ONE_20) / (a + ONE_20);\n int256 z_squared = (z * z) / ONE_20;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 11;\n\n // 6 Taylor terms are sufficient for 36 decimal precision.\n\n // Finally, we multiply by 2 (non fixed point) to compute ln(remainder)\n seriesSum *= 2;\n\n // We now have the sum of all x_n present, and the Taylor approximation of the logarithm of the remainder (both\n // with 20 decimals). All that remains is to sum these two, and then drop two digits to return a 18 decimal\n // value.\n\n int256 result = (sum + seriesSum) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? -result : result;\n }\n }\n\n /**\n * @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n * for x close to one.\n *\n * Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND.\n */\n function _ln_36(int256 x) private pure returns (int256) {\n // Since ln(1) = 0, a value of x close to one will yield a very small result, which makes using 36 digits\n // worthwhile.\n\n // First, we transform x to a 36 digit fixed point value.\n unchecked {\n x *= ONE_18;\n\n // We will use the following Taylor expansion, which converges very rapidly. Let z = (x - 1) / (x + 1).\n // ln(x) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 36 digit fixed point division requires multiplying by ONE_36, and multiplication requires\n // division by ONE_36.\n int256 z = ((x - ONE_36) * ONE_36) / (x + ONE_36);\n int256 z_squared = (z * z) / ONE_36;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 11;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 13;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 15;\n\n // 8 Taylor terms are sufficient for 36 decimal precision.\n\n // All that remains is multiplying by 2 (non fixed point).\n return seriesSum * 2;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\nimport { StorageSlotExtension } from \"./StorageSlotExtension.sol\";\n\n/**\n * @notice Variant of {ReentrancyGuard} that uses transient storage.\n * @dev NOTE: This variant only works on networks where EIP-1153 is available.\n */\nabstract contract ReentrancyGuardTransient {\n using StorageSlotExtension for *;\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.ReentrancyGuard\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant _REENTRANCY_GUARD_STORAGE =\n 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00;\n\n /// @notice Unauthorized reentrant call.\n error ReentrancyGuardReentrantCall();\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be NOT_ENTERED.\n if (_reentrancyGuardEntered()) {\n revert ReentrancyGuardReentrantCall();\n }\n\n // Any calls to nonReentrant after this point will fail.\n _REENTRANCY_GUARD_STORAGE.asBoolean().tstore(true);\n }\n\n function _nonReentrantAfter() private {\n _REENTRANCY_GUARD_STORAGE.asBoolean().tstore(false);\n }\n\n /**\n * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n * `nonReentrant` function in the call stack.\n */\n function _reentrancyGuardEntered() internal view returns (bool) {\n return _REENTRANCY_GUARD_STORAGE.asBoolean().tload();\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol":{"content":"// SPDX-License-Identifier: MIT\n// This file was procedurally generated from scripts/generate/templates/SlotDerivation.js.\n\n// Taken from https://raw.githubusercontent.com/Amxx/openzeppelin-contracts/ce497cb05ca05bb9aa2b86ec1d99e6454e7ab2e9/contracts/utils/SlotDerivation.sol\n\npragma solidity ^0.8.20;\n\n/**\n * @notice Library for computing storage (and transient storage) locations from namespaces and deriving slots\n * corresponding to standard patterns.\n * @dev The derivation method for array and mapping matches the storage layout used by the solidity language/compiler.\n *\n * See https://docs.soliditylang.org/en/v0.8.20/internals/layout_in_storage.html#mappings-and-dynamic-arrays[Solidity docs for mappings and dynamic arrays.].\n *\n * Example usage:\n * ```solidity\n * contract Example {\n * // Add the library methods\n * using StorageSlot for bytes32;\n * using SlotDerivation for bytes32;\n *\n * // Declare a namespace\n * string private constant _NAMESPACE = \"\" // eg. OpenZeppelin.Slot\n *\n * function setValueInNamespace(uint256 key, address newValue) internal {\n * _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value = newValue;\n * }\n *\n * function getValueInNamespace(uint256 key) internal view returns (address) {\n * return _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value;\n * }\n * }\n * ```\n *\n * TIP: Consider using this library along with {StorageSlot}.\n *\n * NOTE: This library provides a way to manipulate storage locations in a non-standard way. Tooling for checking\n * upgrade safety will ignore the slots accessed through this library.\n */\nlibrary SlotDerivation {\n /// @dev Derive an ERC-7201 slot from a string (namespace).\n function erc7201Slot(string memory namespace) internal pure returns (bytes32 slot) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, sub(keccak256(add(namespace, 0x20), mload(namespace)), 1))\n slot := and(keccak256(0x00, 0x20), not(0xff))\n }\n }\n\n /// @dev Add an offset to a slot to get the n-th element of a structure or an array.\n function offset(bytes32 slot, uint256 pos) internal pure returns (bytes32 result) {\n unchecked {\n return bytes32(uint256(slot) + pos);\n }\n }\n\n /// @dev Derive the location of the first element in an array from the slot where the length is stored.\n function deriveArray(bytes32 slot) internal pure returns (bytes32 result) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, slot)\n result := keccak256(0x00, 0x20)\n }\n }\n\n /// @dev Derive the location of a mapping element from the key.\n function deriveMapping(bytes32 slot, address key) internal pure returns (bytes32 result) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, key)\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /// @dev Derive the location of a mapping element from the key.\n function deriveMapping(bytes32 slot, bool key) internal pure returns (bytes32 result) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, key)\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /// @dev Derive the location of a mapping element from the key.\n function deriveMapping(bytes32 slot, bytes32 key) internal pure returns (bytes32 result) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, key)\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /// @dev Derive the location of a mapping element from the key.\n function deriveMapping(bytes32 slot, uint256 key) internal pure returns (bytes32 result) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, key)\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /// @dev Derive the location of a mapping element from the key.\n function deriveMapping(bytes32 slot, int256 key) internal pure returns (bytes32 result) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, key)\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /// @dev Derive the location of a mapping element from the key.\n function deriveMapping(bytes32 slot, string memory key) internal pure returns (bytes32 result) {\n /// @solidity memory-safe-assembly\n assembly {\n let length := mload(key)\n let begin := add(key, 0x20)\n let end := add(begin, length)\n let cache := mload(end)\n mstore(end, slot)\n result := keccak256(begin, add(length, 0x20))\n mstore(end, cache)\n }\n }\n\n /// @dev Derive the location of a mapping element from the key.\n function deriveMapping(bytes32 slot, bytes memory key) internal pure returns (bytes32 result) {\n /// @solidity memory-safe-assembly\n assembly {\n let length := mload(key)\n let begin := add(key, 0x20)\n let end := add(begin, length)\n let cache := mload(end)\n mstore(end, slot)\n result := keccak256(begin, add(length, 0x20))\n mstore(end, cache)\n }\n }\n}"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\n * @dev TIP: Consider using this library along with {SlotDerivation}.\n */\nlibrary StorageSlotExtension {\n struct Int256Slot {\n int256 value;\n }\n\n /// @dev Returns an `Int256Slot` with member `value` located at `slot`.\n function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /// @dev Custom type that represents a slot holding an address.\n type AddressSlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a AddressSlotType.\n function asAddress(bytes32 slot) internal pure returns (AddressSlotType) {\n return AddressSlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a boolean.\n type BooleanSlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a BooleanSlotType.\n function asBoolean(bytes32 slot) internal pure returns (BooleanSlotType) {\n return BooleanSlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a bytes32.\n type Bytes32SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a Bytes32SlotType.\n function asBytes32(bytes32 slot) internal pure returns (Bytes32SlotType) {\n return Bytes32SlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a uint256.\n type Uint256SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a Uint256SlotType.\n function asUint256(bytes32 slot) internal pure returns (Uint256SlotType) {\n return Uint256SlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding an int256.\n type Int256SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to an Int256SlotType.\n function asInt256(bytes32 slot) internal pure returns (Int256SlotType) {\n return Int256SlotType.wrap(slot);\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(AddressSlotType slot) internal view returns (address value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(AddressSlotType slot, address value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(BooleanSlotType slot) internal view returns (bool value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(BooleanSlotType slot, bool value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Bytes32SlotType slot) internal view returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Bytes32SlotType slot, bytes32 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Uint256SlotType slot) internal view returns (uint256 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Uint256SlotType slot, uint256 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Int256SlotType slot) internal view returns (int256 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Int256SlotType slot, int256 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n}\n"},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard ERC20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.\n */\ninterface IERC20Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC20InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC20InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n * @param allowance Amount of tokens a `spender` is allowed to operate with.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC20InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.\n */\ninterface IERC721Errors {\n /**\n * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.\n * Used in balance queries.\n * @param owner Address of the current owner of a token.\n */\n error ERC721InvalidOwner(address owner);\n\n /**\n * @dev Indicates a `tokenId` whose `owner` is the zero address.\n * @param tokenId Identifier number of a token.\n */\n error ERC721NonexistentToken(uint256 tokenId);\n\n /**\n * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param tokenId Identifier number of a token.\n * @param owner Address of the current owner of a token.\n */\n error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC721InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC721InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param tokenId Identifier number of a token.\n */\n error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC721InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.\n */\ninterface IERC1155Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n * @param tokenId Identifier number of a token.\n */\n error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC1155InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC1155InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param owner Address of the current owner of a token.\n */\n error ERC1155MissingApprovalForAll(address operator, address owner);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC1155InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC1155InvalidOperator(address operator);\n\n /**\n * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n * Used in batch transfers.\n * @param idsLength Length of the array of token identifiers\n * @param valuesLength Length of the array of token amounts\n */\n error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n"},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC4626.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\nimport {IERC20Metadata} from \"../token/ERC20/extensions/IERC20Metadata.sol\";\n\n/**\n * @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\n */\ninterface IERC4626 is IERC20, IERC20Metadata {\n event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);\n\n event Withdraw(\n address indexed sender,\n address indexed receiver,\n address indexed owner,\n uint256 assets,\n uint256 shares\n );\n\n /**\n * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n *\n * - MUST be an ERC-20 token contract.\n * - MUST NOT revert.\n */\n function asset() external view returns (address assetTokenAddress);\n\n /**\n * @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n *\n * - SHOULD include any compounding that occurs from yield.\n * - MUST be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT revert.\n */\n function totalAssets() external view returns (uint256 totalManagedAssets);\n\n /**\n * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToShares(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToAssets(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n * through a deposit call.\n *\n * - MUST return a limited value if receiver is subject to some deposit limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n * - MUST NOT revert.\n */\n function maxDeposit(address receiver) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n * call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n * in the same transaction.\n * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n * deposit would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewDeposit(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * deposit execution, and are accounted for during deposit.\n * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function deposit(uint256 assets, address receiver) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n * - MUST return a limited value if receiver is subject to some mint limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n * - MUST NOT revert.\n */\n function maxMint(address receiver) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n * in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n * same transaction.\n * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n * would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by minting.\n */\n function previewMint(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n * execution, and are accounted for during mint.\n * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function mint(uint256 shares, address receiver) external returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n * Vault, through a withdraw call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxWithdraw(address owner) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n * call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n * called\n * in the same transaction.\n * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n * the withdrawal would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewWithdraw(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * withdraw execution, and are accounted for during withdraw.\n * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n * through a redeem call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxRedeem(address owner) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n * in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n * same transaction.\n * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n * redemption would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by redeeming.\n */\n function previewRedeem(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * redeem execution, and are accounted for during redeem.\n * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);\n}\n"},"@openzeppelin/contracts/interfaces/IERC5267.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)\n\npragma solidity ^0.8.20;\n\ninterface IERC5267 {\n /**\n * @dev MAY be emitted to signal that the domain could have changed.\n */\n event EIP712DomainChanged();\n\n /**\n * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\n * signature.\n */\n function eip712Domain()\n external\n view\n returns (\n bytes1 fields,\n string memory name,\n string memory version,\n uint256 chainId,\n address verifyingContract,\n bytes32 salt,\n uint256[] memory extensions\n );\n}\n"},"@openzeppelin/contracts/proxy/Proxy.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overridden so it returns the address to which the fallback\n * function and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n /**\n * @dev Returns the name of the token.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n */\n function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n *\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n * need to send a transaction, and thus is not required to hold Ether at all.\n *\n * ==== Security Considerations\n *\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\n * generally recommended is:\n *\n * ```solidity\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\n * try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\n * doThing(..., value);\n * }\n *\n * function doThing(..., uint256 value) public {\n * token.safeTransferFrom(msg.sender, address(this), value);\n * ...\n * }\n * ```\n *\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\n * {SafeERC20-safeTransferFrom}).\n *\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\n * contracts should have entry points that don't rely on permit.\n */\ninterface IERC20Permit {\n /**\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n * given ``owner``'s signed approval.\n *\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\n * ordering also apply here.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `deadline` must be a timestamp in the future.\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n * over the EIP712-formatted function arguments.\n * - the signature must use ``owner``'s current nonce (see {nonces}).\n *\n * For more information on the signature format, see the\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n * section].\n *\n * CAUTION: See Security Considerations above.\n */\n function permit(\n address owner,\n address spender,\n uint256 value,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) external;\n\n /**\n * @dev Returns the current nonce for `owner`. This value must be\n * included whenever a signature is generated for {permit}.\n *\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\n * prevents a signature from being used multiple times.\n */\n function nonces(address owner) external view returns (uint256);\n\n /**\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\n */\n // solhint-disable-next-line func-name-mixedcase\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n}\n"},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC20Permit} from \"../extensions/IERC20Permit.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n using Address for address;\n\n /**\n * @dev An operation with an ERC20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\n // the target address contains contract code and also asserts for success in the low-level call.\n\n bytes memory returndata = address(token).functionCall(data);\n if (returndata.length != 0 && !abi.decode(returndata, (bool))) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\n // and not revert is the subcall reverts.\n\n (bool success, bytes memory returndata) = address(token).call(data);\n return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0;\n }\n}\n"},"@openzeppelin/contracts/utils/Address.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error AddressInsufficientBalance(address account);\n\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedInnerCall();\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert AddressInsufficientBalance(address(this));\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert FailedInnerCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {FailedInnerCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert AddressInsufficientBalance(address(this));\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n * unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {FailedInnerCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert FailedInnerCall();\n }\n }\n}\n"},"@openzeppelin/contracts/utils/cryptography/ECDSA.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS\n }\n\n /**\n * @dev The signature derives the `address(0)`.\n */\n error ECDSAInvalidSignature();\n\n /**\n * @dev The signature has an invalid length.\n */\n error ECDSAInvalidSignatureLength(uint256 length);\n\n /**\n * @dev The signature has an S value that is in the upper half order.\n */\n error ECDSAInvalidSignatureS(bytes32 s);\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\n * return address(0) without also returning an error description. Errors are documented using an enum (error type)\n * and a bytes32 providing additional information about the error.\n *\n * If no error is returned, then the address can be used for verification purposes.\n *\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n /// @solidity memory-safe-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n */\n function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {\n unchecked {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n // We do not check for an overflow here since the shift operation results in 0 or 1.\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n */\n function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError, bytes32) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS, s);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature, bytes32(0));\n }\n\n return (signer, RecoverError.NoError, bytes32(0));\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\n */\n function _throwError(RecoverError error, bytes32 errorArg) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert ECDSAInvalidSignature();\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert ECDSAInvalidSignatureLength(uint256(errorArg));\n } else if (error == RecoverError.InvalidSignatureS) {\n revert ECDSAInvalidSignatureS(errorArg);\n }\n }\n}\n"},"@openzeppelin/contracts/utils/cryptography/EIP712.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol)\n\npragma solidity ^0.8.20;\n\nimport {MessageHashUtils} from \"./MessageHashUtils.sol\";\nimport {ShortStrings, ShortString} from \"../ShortStrings.sol\";\nimport {IERC5267} from \"../../interfaces/IERC5267.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\n * encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\n * does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\n * produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\n * separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\n *\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable\n */\nabstract contract EIP712 is IERC5267 {\n using ShortStrings for *;\n\n bytes32 private constant TYPE_HASH =\n keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\n // invalidate the cached domain separator if the chain id changes.\n bytes32 private immutable _cachedDomainSeparator;\n uint256 private immutable _cachedChainId;\n address private immutable _cachedThis;\n\n bytes32 private immutable _hashedName;\n bytes32 private immutable _hashedVersion;\n\n ShortString private immutable _name;\n ShortString private immutable _version;\n string private _nameFallback;\n string private _versionFallback;\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n constructor(string memory name, string memory version) {\n _name = name.toShortStringWithFallback(_nameFallback);\n _version = version.toShortStringWithFallback(_versionFallback);\n _hashedName = keccak256(bytes(name));\n _hashedVersion = keccak256(bytes(version));\n\n _cachedChainId = block.chainid;\n _cachedDomainSeparator = _buildDomainSeparator();\n _cachedThis = address(this);\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\n return _cachedDomainSeparator;\n } else {\n return _buildDomainSeparator();\n }\n }\n\n function _buildDomainSeparator() private view returns (bytes32) {\n return keccak256(abi.encode(TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash);\n }\n\n /**\n * @dev See {IERC-5267}.\n */\n function eip712Domain()\n public\n view\n virtual\n returns (\n bytes1 fields,\n string memory name,\n string memory version,\n uint256 chainId,\n address verifyingContract,\n bytes32 salt,\n uint256[] memory extensions\n )\n {\n return (\n hex\"0f\", // 01111\n _EIP712Name(),\n _EIP712Version(),\n block.chainid,\n address(this),\n bytes32(0),\n new uint256[](0)\n );\n }\n\n /**\n * @dev The name parameter for the EIP712 domain.\n *\n * NOTE: By default this function reads _name which is an immutable value.\n * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\n */\n // solhint-disable-next-line func-name-mixedcase\n function _EIP712Name() internal view returns (string memory) {\n return _name.toStringWithFallback(_nameFallback);\n }\n\n /**\n * @dev The version parameter for the EIP712 domain.\n *\n * NOTE: By default this function reads _version which is an immutable value.\n * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\n */\n // solhint-disable-next-line func-name-mixedcase\n function _EIP712Version() internal view returns (string memory) {\n return _version.toStringWithFallback(_versionFallback);\n }\n}\n"},"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)\n\npragma solidity ^0.8.20;\n\nimport {Strings} from \"../Strings.sol\";\n\n/**\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\n *\n * The library provides methods for generating a hash of a message that conforms to the\n * https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\n * specifications.\n */\nlibrary MessageHashUtils {\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x45` (`personal_sign` messages).\n *\n * The digest is calculated by prefixing a bytes32 `messageHash` with\n * `\"\\x19Ethereum Signed Message:\\n32\"` and hashing the result. It corresponds with the\n * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n *\n * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\n * keccak256, although any bytes32 value can be safely used because the final digest will\n * be re-hashed.\n *\n * See {ECDSA-recover}.\n */\n function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, \"\\x19Ethereum Signed Message:\\n32\") // 32 is the bytes-length of messageHash\n mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\n digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\n }\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x45` (`personal_sign` messages).\n *\n * The digest is calculated by prefixing an arbitrary `message` with\n * `\"\\x19Ethereum Signed Message:\\n\" + len(message)` and hashing the result. It corresponds with the\n * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n *\n * See {ECDSA-recover}.\n */\n function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\n return\n keccak256(bytes.concat(\"\\x19Ethereum Signed Message:\\n\", bytes(Strings.toString(message.length)), message));\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x00` (data with intended validator).\n *\n * The digest is calculated by prefixing an arbitrary `data` with `\"\\x19\\x00\"` and the intended\n * `validator` address. Then hashing the result.\n *\n * See {ECDSA-recover}.\n */\n function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(hex\"19_00\", validator, data));\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\n *\n * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\n * `\\x19\\x01` and hashing the result. It corresponds to the hash signed by the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\n *\n * See {ECDSA-recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\n /// @solidity memory-safe-assembly\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, hex\"19_01\")\n mstore(add(ptr, 0x02), domainSeparator)\n mstore(add(ptr, 0x22), structHash)\n digest := keccak256(ptr, 0x42)\n }\n }\n}\n"},"@openzeppelin/contracts/utils/introspection/ERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n"},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"},"@openzeppelin/contracts/utils/math/Math.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n /**\n * @dev Muldiv operation overflow.\n */\n error MathOverflowedMulDiv();\n\n enum Rounding {\n Floor, // Toward negative infinity\n Ceil, // Toward positive infinity\n Trunc, // Toward zero\n Expand // Away from zero\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds towards infinity instead\n * of rounding towards zero.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n if (b == 0) {\n // Guarantee the same behavior as in a regular Solidity division.\n return a / b;\n }\n\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n * denominator == 0.\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n * Uniswap Labs also under MIT license.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0 = x * y; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\n // The surrounding unchecked block does not change this fact.\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n if (denominator <= prod1) {\n revert MathOverflowedMulDiv();\n }\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\n // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\n\n uint256 twos = denominator & (0 - denominator);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\n // works in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n * towards zero.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10 ** 64) {\n value /= 10 ** 64;\n result += 64;\n }\n if (value >= 10 ** 32) {\n value /= 10 ** 32;\n result += 32;\n }\n if (value >= 10 ** 16) {\n value /= 10 ** 16;\n result += 16;\n }\n if (value >= 10 ** 8) {\n value /= 10 ** 8;\n result += 8;\n }\n if (value >= 10 ** 4) {\n value /= 10 ** 4;\n result += 4;\n }\n if (value >= 10 ** 2) {\n value /= 10 ** 2;\n result += 2;\n }\n if (value >= 10 ** 1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\n */\n function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\n return uint8(rounding) % 2 == 1;\n }\n}\n"},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SafeCast.sol)\n// This file was procedurally generated from scripts/generate/templates/SafeCast.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeCast {\n /**\n * @dev Value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);\n\n /**\n * @dev An int value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedIntToUint(int256 value);\n\n /**\n * @dev Value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedIntDowncast(uint8 bits, int256 value);\n\n /**\n * @dev An uint value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedUintToInt(uint256 value);\n\n /**\n * @dev Returns the downcasted uint248 from uint256, reverting on\n * overflow (when the input is greater than largest uint248).\n *\n * Counterpart to Solidity's `uint248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toUint248(uint256 value) internal pure returns (uint248) {\n if (value > type(uint248).max) {\n revert SafeCastOverflowedUintDowncast(248, value);\n }\n return uint248(value);\n }\n\n /**\n * @dev Returns the downcasted uint240 from uint256, reverting on\n * overflow (when the input is greater than largest uint240).\n *\n * Counterpart to Solidity's `uint240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toUint240(uint256 value) internal pure returns (uint240) {\n if (value > type(uint240).max) {\n revert SafeCastOverflowedUintDowncast(240, value);\n }\n return uint240(value);\n }\n\n /**\n * @dev Returns the downcasted uint232 from uint256, reverting on\n * overflow (when the input is greater than largest uint232).\n *\n * Counterpart to Solidity's `uint232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toUint232(uint256 value) internal pure returns (uint232) {\n if (value > type(uint232).max) {\n revert SafeCastOverflowedUintDowncast(232, value);\n }\n return uint232(value);\n }\n\n /**\n * @dev Returns the downcasted uint224 from uint256, reverting on\n * overflow (when the input is greater than largest uint224).\n *\n * Counterpart to Solidity's `uint224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toUint224(uint256 value) internal pure returns (uint224) {\n if (value > type(uint224).max) {\n revert SafeCastOverflowedUintDowncast(224, value);\n }\n return uint224(value);\n }\n\n /**\n * @dev Returns the downcasted uint216 from uint256, reverting on\n * overflow (when the input is greater than largest uint216).\n *\n * Counterpart to Solidity's `uint216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toUint216(uint256 value) internal pure returns (uint216) {\n if (value > type(uint216).max) {\n revert SafeCastOverflowedUintDowncast(216, value);\n }\n return uint216(value);\n }\n\n /**\n * @dev Returns the downcasted uint208 from uint256, reverting on\n * overflow (when the input is greater than largest uint208).\n *\n * Counterpart to Solidity's `uint208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toUint208(uint256 value) internal pure returns (uint208) {\n if (value > type(uint208).max) {\n revert SafeCastOverflowedUintDowncast(208, value);\n }\n return uint208(value);\n }\n\n /**\n * @dev Returns the downcasted uint200 from uint256, reverting on\n * overflow (when the input is greater than largest uint200).\n *\n * Counterpart to Solidity's `uint200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toUint200(uint256 value) internal pure returns (uint200) {\n if (value > type(uint200).max) {\n revert SafeCastOverflowedUintDowncast(200, value);\n }\n return uint200(value);\n }\n\n /**\n * @dev Returns the downcasted uint192 from uint256, reverting on\n * overflow (when the input is greater than largest uint192).\n *\n * Counterpart to Solidity's `uint192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toUint192(uint256 value) internal pure returns (uint192) {\n if (value > type(uint192).max) {\n revert SafeCastOverflowedUintDowncast(192, value);\n }\n return uint192(value);\n }\n\n /**\n * @dev Returns the downcasted uint184 from uint256, reverting on\n * overflow (when the input is greater than largest uint184).\n *\n * Counterpart to Solidity's `uint184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toUint184(uint256 value) internal pure returns (uint184) {\n if (value > type(uint184).max) {\n revert SafeCastOverflowedUintDowncast(184, value);\n }\n return uint184(value);\n }\n\n /**\n * @dev Returns the downcasted uint176 from uint256, reverting on\n * overflow (when the input is greater than largest uint176).\n *\n * Counterpart to Solidity's `uint176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toUint176(uint256 value) internal pure returns (uint176) {\n if (value > type(uint176).max) {\n revert SafeCastOverflowedUintDowncast(176, value);\n }\n return uint176(value);\n }\n\n /**\n * @dev Returns the downcasted uint168 from uint256, reverting on\n * overflow (when the input is greater than largest uint168).\n *\n * Counterpart to Solidity's `uint168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toUint168(uint256 value) internal pure returns (uint168) {\n if (value > type(uint168).max) {\n revert SafeCastOverflowedUintDowncast(168, value);\n }\n return uint168(value);\n }\n\n /**\n * @dev Returns the downcasted uint160 from uint256, reverting on\n * overflow (when the input is greater than largest uint160).\n *\n * Counterpart to Solidity's `uint160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toUint160(uint256 value) internal pure returns (uint160) {\n if (value > type(uint160).max) {\n revert SafeCastOverflowedUintDowncast(160, value);\n }\n return uint160(value);\n }\n\n /**\n * @dev Returns the downcasted uint152 from uint256, reverting on\n * overflow (when the input is greater than largest uint152).\n *\n * Counterpart to Solidity's `uint152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toUint152(uint256 value) internal pure returns (uint152) {\n if (value > type(uint152).max) {\n revert SafeCastOverflowedUintDowncast(152, value);\n }\n return uint152(value);\n }\n\n /**\n * @dev Returns the downcasted uint144 from uint256, reverting on\n * overflow (when the input is greater than largest uint144).\n *\n * Counterpart to Solidity's `uint144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toUint144(uint256 value) internal pure returns (uint144) {\n if (value > type(uint144).max) {\n revert SafeCastOverflowedUintDowncast(144, value);\n }\n return uint144(value);\n }\n\n /**\n * @dev Returns the downcasted uint136 from uint256, reverting on\n * overflow (when the input is greater than largest uint136).\n *\n * Counterpart to Solidity's `uint136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toUint136(uint256 value) internal pure returns (uint136) {\n if (value > type(uint136).max) {\n revert SafeCastOverflowedUintDowncast(136, value);\n }\n return uint136(value);\n }\n\n /**\n * @dev Returns the downcasted uint128 from uint256, reverting on\n * overflow (when the input is greater than largest uint128).\n *\n * Counterpart to Solidity's `uint128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toUint128(uint256 value) internal pure returns (uint128) {\n if (value > type(uint128).max) {\n revert SafeCastOverflowedUintDowncast(128, value);\n }\n return uint128(value);\n }\n\n /**\n * @dev Returns the downcasted uint120 from uint256, reverting on\n * overflow (when the input is greater than largest uint120).\n *\n * Counterpart to Solidity's `uint120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toUint120(uint256 value) internal pure returns (uint120) {\n if (value > type(uint120).max) {\n revert SafeCastOverflowedUintDowncast(120, value);\n }\n return uint120(value);\n }\n\n /**\n * @dev Returns the downcasted uint112 from uint256, reverting on\n * overflow (when the input is greater than largest uint112).\n *\n * Counterpart to Solidity's `uint112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toUint112(uint256 value) internal pure returns (uint112) {\n if (value > type(uint112).max) {\n revert SafeCastOverflowedUintDowncast(112, value);\n }\n return uint112(value);\n }\n\n /**\n * @dev Returns the downcasted uint104 from uint256, reverting on\n * overflow (when the input is greater than largest uint104).\n *\n * Counterpart to Solidity's `uint104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toUint104(uint256 value) internal pure returns (uint104) {\n if (value > type(uint104).max) {\n revert SafeCastOverflowedUintDowncast(104, value);\n }\n return uint104(value);\n }\n\n /**\n * @dev Returns the downcasted uint96 from uint256, reverting on\n * overflow (when the input is greater than largest uint96).\n *\n * Counterpart to Solidity's `uint96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toUint96(uint256 value) internal pure returns (uint96) {\n if (value > type(uint96).max) {\n revert SafeCastOverflowedUintDowncast(96, value);\n }\n return uint96(value);\n }\n\n /**\n * @dev Returns the downcasted uint88 from uint256, reverting on\n * overflow (when the input is greater than largest uint88).\n *\n * Counterpart to Solidity's `uint88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toUint88(uint256 value) internal pure returns (uint88) {\n if (value > type(uint88).max) {\n revert SafeCastOverflowedUintDowncast(88, value);\n }\n return uint88(value);\n }\n\n /**\n * @dev Returns the downcasted uint80 from uint256, reverting on\n * overflow (when the input is greater than largest uint80).\n *\n * Counterpart to Solidity's `uint80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toUint80(uint256 value) internal pure returns (uint80) {\n if (value > type(uint80).max) {\n revert SafeCastOverflowedUintDowncast(80, value);\n }\n return uint80(value);\n }\n\n /**\n * @dev Returns the downcasted uint72 from uint256, reverting on\n * overflow (when the input is greater than largest uint72).\n *\n * Counterpart to Solidity's `uint72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toUint72(uint256 value) internal pure returns (uint72) {\n if (value > type(uint72).max) {\n revert SafeCastOverflowedUintDowncast(72, value);\n }\n return uint72(value);\n }\n\n /**\n * @dev Returns the downcasted uint64 from uint256, reverting on\n * overflow (when the input is greater than largest uint64).\n *\n * Counterpart to Solidity's `uint64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toUint64(uint256 value) internal pure returns (uint64) {\n if (value > type(uint64).max) {\n revert SafeCastOverflowedUintDowncast(64, value);\n }\n return uint64(value);\n }\n\n /**\n * @dev Returns the downcasted uint56 from uint256, reverting on\n * overflow (when the input is greater than largest uint56).\n *\n * Counterpart to Solidity's `uint56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toUint56(uint256 value) internal pure returns (uint56) {\n if (value > type(uint56).max) {\n revert SafeCastOverflowedUintDowncast(56, value);\n }\n return uint56(value);\n }\n\n /**\n * @dev Returns the downcasted uint48 from uint256, reverting on\n * overflow (when the input is greater than largest uint48).\n *\n * Counterpart to Solidity's `uint48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toUint48(uint256 value) internal pure returns (uint48) {\n if (value > type(uint48).max) {\n revert SafeCastOverflowedUintDowncast(48, value);\n }\n return uint48(value);\n }\n\n /**\n * @dev Returns the downcasted uint40 from uint256, reverting on\n * overflow (when the input is greater than largest uint40).\n *\n * Counterpart to Solidity's `uint40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toUint40(uint256 value) internal pure returns (uint40) {\n if (value > type(uint40).max) {\n revert SafeCastOverflowedUintDowncast(40, value);\n }\n return uint40(value);\n }\n\n /**\n * @dev Returns the downcasted uint32 from uint256, reverting on\n * overflow (when the input is greater than largest uint32).\n *\n * Counterpart to Solidity's `uint32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toUint32(uint256 value) internal pure returns (uint32) {\n if (value > type(uint32).max) {\n revert SafeCastOverflowedUintDowncast(32, value);\n }\n return uint32(value);\n }\n\n /**\n * @dev Returns the downcasted uint24 from uint256, reverting on\n * overflow (when the input is greater than largest uint24).\n *\n * Counterpart to Solidity's `uint24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toUint24(uint256 value) internal pure returns (uint24) {\n if (value > type(uint24).max) {\n revert SafeCastOverflowedUintDowncast(24, value);\n }\n return uint24(value);\n }\n\n /**\n * @dev Returns the downcasted uint16 from uint256, reverting on\n * overflow (when the input is greater than largest uint16).\n *\n * Counterpart to Solidity's `uint16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toUint16(uint256 value) internal pure returns (uint16) {\n if (value > type(uint16).max) {\n revert SafeCastOverflowedUintDowncast(16, value);\n }\n return uint16(value);\n }\n\n /**\n * @dev Returns the downcasted uint8 from uint256, reverting on\n * overflow (when the input is greater than largest uint8).\n *\n * Counterpart to Solidity's `uint8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toUint8(uint256 value) internal pure returns (uint8) {\n if (value > type(uint8).max) {\n revert SafeCastOverflowedUintDowncast(8, value);\n }\n return uint8(value);\n }\n\n /**\n * @dev Converts a signed int256 into an unsigned uint256.\n *\n * Requirements:\n *\n * - input must be greater than or equal to 0.\n */\n function toUint256(int256 value) internal pure returns (uint256) {\n if (value < 0) {\n revert SafeCastOverflowedIntToUint(value);\n }\n return uint256(value);\n }\n\n /**\n * @dev Returns the downcasted int248 from int256, reverting on\n * overflow (when the input is less than smallest int248 or\n * greater than largest int248).\n *\n * Counterpart to Solidity's `int248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toInt248(int256 value) internal pure returns (int248 downcasted) {\n downcasted = int248(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(248, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int240 from int256, reverting on\n * overflow (when the input is less than smallest int240 or\n * greater than largest int240).\n *\n * Counterpart to Solidity's `int240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toInt240(int256 value) internal pure returns (int240 downcasted) {\n downcasted = int240(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(240, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int232 from int256, reverting on\n * overflow (when the input is less than smallest int232 or\n * greater than largest int232).\n *\n * Counterpart to Solidity's `int232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toInt232(int256 value) internal pure returns (int232 downcasted) {\n downcasted = int232(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(232, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int224 from int256, reverting on\n * overflow (when the input is less than smallest int224 or\n * greater than largest int224).\n *\n * Counterpart to Solidity's `int224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toInt224(int256 value) internal pure returns (int224 downcasted) {\n downcasted = int224(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(224, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int216 from int256, reverting on\n * overflow (when the input is less than smallest int216 or\n * greater than largest int216).\n *\n * Counterpart to Solidity's `int216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toInt216(int256 value) internal pure returns (int216 downcasted) {\n downcasted = int216(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(216, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int208 from int256, reverting on\n * overflow (when the input is less than smallest int208 or\n * greater than largest int208).\n *\n * Counterpart to Solidity's `int208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toInt208(int256 value) internal pure returns (int208 downcasted) {\n downcasted = int208(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(208, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int200 from int256, reverting on\n * overflow (when the input is less than smallest int200 or\n * greater than largest int200).\n *\n * Counterpart to Solidity's `int200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toInt200(int256 value) internal pure returns (int200 downcasted) {\n downcasted = int200(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(200, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int192 from int256, reverting on\n * overflow (when the input is less than smallest int192 or\n * greater than largest int192).\n *\n * Counterpart to Solidity's `int192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toInt192(int256 value) internal pure returns (int192 downcasted) {\n downcasted = int192(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(192, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int184 from int256, reverting on\n * overflow (when the input is less than smallest int184 or\n * greater than largest int184).\n *\n * Counterpart to Solidity's `int184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toInt184(int256 value) internal pure returns (int184 downcasted) {\n downcasted = int184(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(184, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int176 from int256, reverting on\n * overflow (when the input is less than smallest int176 or\n * greater than largest int176).\n *\n * Counterpart to Solidity's `int176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toInt176(int256 value) internal pure returns (int176 downcasted) {\n downcasted = int176(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(176, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int168 from int256, reverting on\n * overflow (when the input is less than smallest int168 or\n * greater than largest int168).\n *\n * Counterpart to Solidity's `int168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toInt168(int256 value) internal pure returns (int168 downcasted) {\n downcasted = int168(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(168, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int160 from int256, reverting on\n * overflow (when the input is less than smallest int160 or\n * greater than largest int160).\n *\n * Counterpart to Solidity's `int160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toInt160(int256 value) internal pure returns (int160 downcasted) {\n downcasted = int160(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(160, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int152 from int256, reverting on\n * overflow (when the input is less than smallest int152 or\n * greater than largest int152).\n *\n * Counterpart to Solidity's `int152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toInt152(int256 value) internal pure returns (int152 downcasted) {\n downcasted = int152(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(152, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int144 from int256, reverting on\n * overflow (when the input is less than smallest int144 or\n * greater than largest int144).\n *\n * Counterpart to Solidity's `int144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toInt144(int256 value) internal pure returns (int144 downcasted) {\n downcasted = int144(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(144, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int136 from int256, reverting on\n * overflow (when the input is less than smallest int136 or\n * greater than largest int136).\n *\n * Counterpart to Solidity's `int136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toInt136(int256 value) internal pure returns (int136 downcasted) {\n downcasted = int136(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(136, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int128 from int256, reverting on\n * overflow (when the input is less than smallest int128 or\n * greater than largest int128).\n *\n * Counterpart to Solidity's `int128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toInt128(int256 value) internal pure returns (int128 downcasted) {\n downcasted = int128(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(128, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int120 from int256, reverting on\n * overflow (when the input is less than smallest int120 or\n * greater than largest int120).\n *\n * Counterpart to Solidity's `int120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toInt120(int256 value) internal pure returns (int120 downcasted) {\n downcasted = int120(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(120, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int112 from int256, reverting on\n * overflow (when the input is less than smallest int112 or\n * greater than largest int112).\n *\n * Counterpart to Solidity's `int112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toInt112(int256 value) internal pure returns (int112 downcasted) {\n downcasted = int112(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(112, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int104 from int256, reverting on\n * overflow (when the input is less than smallest int104 or\n * greater than largest int104).\n *\n * Counterpart to Solidity's `int104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toInt104(int256 value) internal pure returns (int104 downcasted) {\n downcasted = int104(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(104, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int96 from int256, reverting on\n * overflow (when the input is less than smallest int96 or\n * greater than largest int96).\n *\n * Counterpart to Solidity's `int96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toInt96(int256 value) internal pure returns (int96 downcasted) {\n downcasted = int96(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(96, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int88 from int256, reverting on\n * overflow (when the input is less than smallest int88 or\n * greater than largest int88).\n *\n * Counterpart to Solidity's `int88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toInt88(int256 value) internal pure returns (int88 downcasted) {\n downcasted = int88(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(88, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int80 from int256, reverting on\n * overflow (when the input is less than smallest int80 or\n * greater than largest int80).\n *\n * Counterpart to Solidity's `int80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toInt80(int256 value) internal pure returns (int80 downcasted) {\n downcasted = int80(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(80, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int72 from int256, reverting on\n * overflow (when the input is less than smallest int72 or\n * greater than largest int72).\n *\n * Counterpart to Solidity's `int72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toInt72(int256 value) internal pure returns (int72 downcasted) {\n downcasted = int72(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(72, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int64 from int256, reverting on\n * overflow (when the input is less than smallest int64 or\n * greater than largest int64).\n *\n * Counterpart to Solidity's `int64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toInt64(int256 value) internal pure returns (int64 downcasted) {\n downcasted = int64(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(64, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int56 from int256, reverting on\n * overflow (when the input is less than smallest int56 or\n * greater than largest int56).\n *\n * Counterpart to Solidity's `int56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toInt56(int256 value) internal pure returns (int56 downcasted) {\n downcasted = int56(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(56, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int48 from int256, reverting on\n * overflow (when the input is less than smallest int48 or\n * greater than largest int48).\n *\n * Counterpart to Solidity's `int48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toInt48(int256 value) internal pure returns (int48 downcasted) {\n downcasted = int48(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(48, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int40 from int256, reverting on\n * overflow (when the input is less than smallest int40 or\n * greater than largest int40).\n *\n * Counterpart to Solidity's `int40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toInt40(int256 value) internal pure returns (int40 downcasted) {\n downcasted = int40(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(40, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int32 from int256, reverting on\n * overflow (when the input is less than smallest int32 or\n * greater than largest int32).\n *\n * Counterpart to Solidity's `int32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toInt32(int256 value) internal pure returns (int32 downcasted) {\n downcasted = int32(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(32, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int24 from int256, reverting on\n * overflow (when the input is less than smallest int24 or\n * greater than largest int24).\n *\n * Counterpart to Solidity's `int24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toInt24(int256 value) internal pure returns (int24 downcasted) {\n downcasted = int24(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(24, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int16 from int256, reverting on\n * overflow (when the input is less than smallest int16 or\n * greater than largest int16).\n *\n * Counterpart to Solidity's `int16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toInt16(int256 value) internal pure returns (int16 downcasted) {\n downcasted = int16(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(16, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int8 from int256, reverting on\n * overflow (when the input is less than smallest int8 or\n * greater than largest int8).\n *\n * Counterpart to Solidity's `int8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toInt8(int256 value) internal pure returns (int8 downcasted) {\n downcasted = int8(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(8, value);\n }\n }\n\n /**\n * @dev Converts an unsigned uint256 into a signed int256.\n *\n * Requirements:\n *\n * - input must be less than or equal to maxInt256.\n */\n function toInt256(uint256 value) internal pure returns (int256) {\n // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\n if (value > uint256(type(int256).max)) {\n revert SafeCastOverflowedUintToInt(value);\n }\n return int256(value);\n }\n}\n"},"@openzeppelin/contracts/utils/math/SignedMath.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard signed math utilities missing in the Solidity language.\n */\nlibrary SignedMath {\n /**\n * @dev Returns the largest of two signed numbers.\n */\n function max(int256 a, int256 b) internal pure returns (int256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two signed numbers.\n */\n function min(int256 a, int256 b) internal pure returns (int256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two signed numbers without overflow.\n * The result is rounded towards zero.\n */\n function average(int256 a, int256 b) internal pure returns (int256) {\n // Formula from the book \"Hacker's Delight\"\n int256 x = (a & b) + ((a ^ b) >> 1);\n return x + (int256(uint256(x) >> 255) & (a ^ b));\n }\n\n /**\n * @dev Returns the absolute unsigned value of a signed value.\n */\n function abs(int256 n) internal pure returns (uint256) {\n unchecked {\n // must be unchecked in order to support `n = type(int256).min`\n return uint256(n >= 0 ? n : -n);\n }\n }\n}\n"},"@openzeppelin/contracts/utils/Nonces.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Nonces.sol)\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides tracking nonces for addresses. Nonces will only increment.\n */\nabstract contract Nonces {\n /**\n * @dev The nonce used for an `account` is not the expected current nonce.\n */\n error InvalidAccountNonce(address account, uint256 currentNonce);\n\n mapping(address account => uint256) private _nonces;\n\n /**\n * @dev Returns the next unused nonce for an address.\n */\n function nonces(address owner) public view virtual returns (uint256) {\n return _nonces[owner];\n }\n\n /**\n * @dev Consumes a nonce.\n *\n * Returns the current value and increments nonce.\n */\n function _useNonce(address owner) internal virtual returns (uint256) {\n // For each account, the nonce has an initial value of 0, can only be incremented by one, and cannot be\n // decremented or reset. This guarantees that the nonce never overflows.\n unchecked {\n // It is important to do x++ and not ++x here.\n return _nonces[owner]++;\n }\n }\n\n /**\n * @dev Same as {_useNonce} but checking that `nonce` is the next valid for `owner`.\n */\n function _useCheckedNonce(address owner, uint256 nonce) internal virtual {\n uint256 current = _useNonce(owner);\n if (nonce != current) {\n revert InvalidAccountNonce(owner, current);\n }\n }\n}\n"},"@openzeppelin/contracts/utils/ShortStrings.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/ShortStrings.sol)\n\npragma solidity ^0.8.20;\n\nimport {StorageSlot} from \"./StorageSlot.sol\";\n\n// | string | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |\n// | length | 0x BB |\ntype ShortString is bytes32;\n\n/**\n * @dev This library provides functions to convert short memory strings\n * into a `ShortString` type that can be used as an immutable variable.\n *\n * Strings of arbitrary length can be optimized using this library if\n * they are short enough (up to 31 bytes) by packing them with their\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\n * fallback mechanism can be used for every other case.\n *\n * Usage example:\n *\n * ```solidity\n * contract Named {\n * using ShortStrings for *;\n *\n * ShortString private immutable _name;\n * string private _nameFallback;\n *\n * constructor(string memory contractName) {\n * _name = contractName.toShortStringWithFallback(_nameFallback);\n * }\n *\n * function name() external view returns (string memory) {\n * return _name.toStringWithFallback(_nameFallback);\n * }\n * }\n * ```\n */\nlibrary ShortStrings {\n // Used as an identifier for strings longer than 31 bytes.\n bytes32 private constant FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\n\n error StringTooLong(string str);\n error InvalidShortString();\n\n /**\n * @dev Encode a string of at most 31 chars into a `ShortString`.\n *\n * This will trigger a `StringTooLong` error is the input string is too long.\n */\n function toShortString(string memory str) internal pure returns (ShortString) {\n bytes memory bstr = bytes(str);\n if (bstr.length > 31) {\n revert StringTooLong(str);\n }\n return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\n }\n\n /**\n * @dev Decode a `ShortString` back to a \"normal\" string.\n */\n function toString(ShortString sstr) internal pure returns (string memory) {\n uint256 len = byteLength(sstr);\n // using `new string(len)` would work locally but is not memory safe.\n string memory str = new string(32);\n /// @solidity memory-safe-assembly\n assembly {\n mstore(str, len)\n mstore(add(str, 0x20), sstr)\n }\n return str;\n }\n\n /**\n * @dev Return the length of a `ShortString`.\n */\n function byteLength(ShortString sstr) internal pure returns (uint256) {\n uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\n if (result > 31) {\n revert InvalidShortString();\n }\n return result;\n }\n\n /**\n * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\n */\n function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\n if (bytes(value).length < 32) {\n return toShortString(value);\n } else {\n StorageSlot.getStringSlot(store).value = value;\n return ShortString.wrap(FALLBACK_SENTINEL);\n }\n }\n\n /**\n * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\n */\n function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\n if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\n return toString(value);\n } else {\n return store;\n }\n }\n\n /**\n * @dev Return the length of a string that was encoded to `ShortString` or written to storage using\n * {setWithFallback}.\n *\n * WARNING: This will return the \"byte length\" of the string. This may not reflect the actual length in terms of\n * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\n */\n function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\n if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\n return byteLength(value);\n } else {\n return bytes(store).length;\n }\n }\n}\n"},"@openzeppelin/contracts/utils/StorageSlot.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```solidity\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(newImplementation.code.length > 0);\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n struct StringSlot {\n string value;\n }\n\n struct BytesSlot {\n bytes value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `StringSlot` with member `value` located at `slot`.\n */\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\n */\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := store.slot\n }\n }\n\n /**\n * @dev Returns an `BytesSlot` with member `value` located at `slot`.\n */\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\n */\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := store.slot\n }\n }\n}\n"},"@openzeppelin/contracts/utils/Strings.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\n\npragma solidity ^0.8.20;\n\nimport {Math} from \"./math/Math.sol\";\nimport {SignedMath} from \"./math/SignedMath.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant HEX_DIGITS = \"0123456789abcdef\";\n uint8 private constant ADDRESS_LENGTH = 20;\n\n /**\n * @dev The `value` string doesn't fit in the specified `length`.\n */\n error StringsInsufficientHexLength(uint256 value, uint256 length);\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\n */\n function toStringSigned(int256 value) internal pure returns (string memory) {\n return string.concat(value < 0 ? \"-\" : \"\", toString(SignedMath.abs(value)));\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n uint256 localValue = value;\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = HEX_DIGITS[localValue & 0xf];\n localValue >>= 4;\n }\n if (localValue != 0) {\n revert StringsInsufficientHexLength(value, length);\n }\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n * representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\n }\n\n /**\n * @dev Returns true if the two strings are equal.\n */\n function equal(string memory a, string memory b) internal pure returns (bool) {\n return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\n }\n}\n"},"contracts/BalancerPoolToken.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20Metadata } from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\nimport { IERC20Permit } from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\";\nimport { ERC165 } from \"@openzeppelin/contracts/utils/introspection/ERC165.sol\";\nimport { EIP712 } from \"@openzeppelin/contracts/utils/cryptography/EIP712.sol\";\nimport { ECDSA } from \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { Nonces } from \"@openzeppelin/contracts/utils/Nonces.sol\";\n\nimport { IRateProvider } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { VaultGuard } from \"./VaultGuard.sol\";\n\n/**\n * @notice `BalancerPoolToken` is a fully ERC20-compatible token to be used as the base contract for Balancer Pools,\n * with all the data and implementation delegated to the ERC20Multitoken contract.\n\n * @dev Implementation of the ERC-20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[ERC-2612].\n */\ncontract BalancerPoolToken is IERC20, IERC20Metadata, IERC20Permit, IRateProvider, EIP712, Nonces, ERC165, VaultGuard {\n bytes32 public constant PERMIT_TYPEHASH =\n keccak256(\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\");\n\n /**\n * @notice Operation failed due to an expired permit signature.\n * @param deadline The permit deadline that expired\n */\n error ERC2612ExpiredSignature(uint256 deadline);\n\n /**\n * @notice Operation failed due to a non-matching signature.\n * @param signer The address corresponding to the signature provider\n * @param owner The address of the owner (expected value of the signature provider)\n */\n error ERC2612InvalidSigner(address signer, address owner);\n\n // EIP712 also defines _name.\n string private _bptName;\n string private _bptSymbol;\n\n constructor(IVault vault_, string memory bptName, string memory bptSymbol) EIP712(bptName, \"1\") VaultGuard(vault_) {\n _bptName = bptName;\n _bptSymbol = bptSymbol;\n }\n\n /// @inheritdoc IERC20Metadata\n function name() external view returns (string memory) {\n return _bptName;\n }\n\n /// @inheritdoc IERC20Metadata\n function symbol() external view returns (string memory) {\n return _bptSymbol;\n }\n\n /// @inheritdoc IERC20Metadata\n function decimals() external pure returns (uint8) {\n // Always 18 decimals for BPT.\n return 18;\n }\n\n /// @inheritdoc IERC20\n function totalSupply() public view returns (uint256) {\n return _vault.totalSupply(address(this));\n }\n\n function getVault() public view returns (IVault) {\n return _vault;\n }\n\n /// @inheritdoc IERC20\n function balanceOf(address account) external view returns (uint256) {\n return _vault.balanceOf(address(this), account);\n }\n\n /// @inheritdoc IERC20\n function transfer(address to, uint256 amount) external returns (bool) {\n // Vault will perform the transfer and call emitTransfer to emit the event from this contract.\n _vault.transfer(msg.sender, to, amount);\n return true;\n }\n\n /// @inheritdoc IERC20\n function allowance(address owner, address spender) external view returns (uint256) {\n return _vault.allowance(address(this), owner, spender);\n }\n\n /// @inheritdoc IERC20\n function approve(address spender, uint256 amount) external returns (bool) {\n // Vault will perform the approval and call emitApproval to emit the event from this contract.\n _vault.approve(msg.sender, spender, amount);\n return true;\n }\n\n /// @inheritdoc IERC20\n function transferFrom(address from, address to, uint256 amount) external returns (bool) {\n // Vault will perform the transfer and call emitTransfer to emit the event from this contract.\n _vault.transferFrom(msg.sender, from, to, amount);\n return true;\n }\n\n /**\n * Accounting is centralized in the MultiToken contract, and the actual transfers and approvals are done there.\n * Operations can be initiated from either the token contract or the MultiToken.\n *\n * To maintain compliance with the ERC-20 standard, and conform to the expectations of off-chain processes,\n * the MultiToken calls `emitTransfer` and `emitApproval` during those operations, so that the event is emitted\n * only from the token contract. These events are NOT defined in the MultiToken contract.\n */\n\n /// @dev Emit the Transfer event. This function can only be called by the MultiToken.\n function emitTransfer(address from, address to, uint256 amount) external onlyVault {\n emit Transfer(from, to, amount);\n }\n\n /// @dev Emit the Approval event. This function can only be called by the MultiToken.\n function emitApproval(address owner, address spender, uint256 amount) external onlyVault {\n emit Approval(owner, spender, amount);\n }\n\n // @inheritdoc IERC20Permit\n function permit(\n address owner,\n address spender,\n uint256 amount,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) public virtual {\n // solhint-disable-next-line not-rely-on-time\n if (block.timestamp > deadline) {\n revert ERC2612ExpiredSignature(deadline);\n }\n\n bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, _useNonce(owner), deadline));\n\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signer = ECDSA.recover(hash, v, r, s);\n if (signer != owner) {\n revert ERC2612InvalidSigner(signer, owner);\n }\n\n _vault.approve(owner, spender, amount);\n }\n\n // @inheritdoc IERC20Permit\n function nonces(address owner) public view virtual override(IERC20Permit, Nonces) returns (uint256) {\n return super.nonces(owner);\n }\n\n /// @notice Increment the sender's nonce to revoke any currently granted (but not yet executed) `permit`.\n function incrementNonce() external {\n _useNonce(msg.sender);\n }\n\n // @inheritdoc IERC20Permit\n // solhint-disable-next-line func-name-mixedcase\n function DOMAIN_SEPARATOR() external view virtual returns (bytes32) {\n return _domainSeparatorV4();\n }\n\n /**\n * @notice Get the BPT rate, which is defined as: pool invariant/total supply.\n * @dev The VaultExtension contract defines a default implementation (`getBptRate`) to calculate the rate\n * of any given pool, which should be sufficient in nearly all cases.\n *\n * @return rate Rate of the pool's BPT\n */\n function getRate() public view virtual returns (uint256) {\n return getVault().getBptRate(address(this));\n }\n}\n"},"contracts/BasePoolMath.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IBasePool } from \"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\";\nimport { Rounding } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nlibrary BasePoolMath {\n using FixedPoint for uint256;\n\n /**\n * @notice An add liquidity operation increased the invariant above the limit.\n * @dev This value is determined by each pool type, and depends on the specific math used to compute\n * the price curve.\n *\n * @param invariantRatio The ratio of the new invariant (after an operation) to the old\n * @param maxInvariantRatio The maximum allowed invariant ratio\n */\n error InvariantRatioAboveMax(uint256 invariantRatio, uint256 maxInvariantRatio);\n\n /**\n * @notice A remove liquidity operation decreased the invariant below the limit.\n * @dev This value is determined by each pool type, and depends on the specific math used to compute\n * the price curve.\n *\n * @param invariantRatio The ratio of the new invariant (after an operation) to the old\n * @param minInvariantRatio The minimum allowed invariant ratio\n */\n error InvariantRatioBelowMin(uint256 invariantRatio, uint256 minInvariantRatio);\n\n // For security reasons, to help ensure that for all possible \"round trip\" paths the caller always receives the\n // same or fewer tokens than supplied, we have chosen the rounding direction to favor the protocol in all cases.\n\n /**\n * @notice Computes the proportional amounts of tokens to be deposited into the pool.\n * @dev This function computes the amount of each token that needs to be deposited in order to mint a specific\n * amount of pool tokens (BPT). It ensures that the amounts of tokens deposited are proportional to the current\n * pool balances.\n *\n * Calculation: For each token, amountIn = balance * (bptAmountOut / bptTotalSupply).\n * Rounding up is used to ensure that the pool is not underfunded.\n *\n * @param balances Array of current token balances in the pool\n * @param bptTotalSupply Total supply of the pool tokens (BPT)\n * @param bptAmountOut The amount of pool tokens that need to be minted\n * @return amountsIn Array of amounts for each token to be deposited\n */\n function computeProportionalAmountsIn(\n uint256[] memory balances,\n uint256 bptTotalSupply,\n uint256 bptAmountOut\n ) internal pure returns (uint256[] memory amountsIn) {\n /************************************************************************************\n // computeProportionalAmountsIn //\n // (per token) //\n // aI = amountIn / bptOut \\ //\n // b = balance aI = b * | ----------------- | //\n // bptOut = bptAmountOut \\ bptTotalSupply / //\n // bpt = bptTotalSupply //\n ************************************************************************************/\n\n // Create a new array to hold the amounts of each token to be deposited.\n amountsIn = new uint256[](balances.length);\n for (uint256 i = 0; i < balances.length; ++i) {\n // Since we multiply and divide we don't need to use FP math.\n // We're calculating amounts in so we round up.\n amountsIn[i] = balances[i].mulDivUp(bptAmountOut, bptTotalSupply);\n }\n }\n\n /**\n * @notice Computes the proportional amounts of tokens to be withdrawn from the pool.\n * @dev This function computes the amount of each token that will be withdrawn in exchange for burning\n * a specific amount of pool tokens (BPT). It ensures that the amounts of tokens withdrawn are proportional\n * to the current pool balances.\n *\n * Calculation: For each token, amountOut = balance * (bptAmountIn / bptTotalSupply).\n * Rounding down is used to prevent withdrawing more than the pool can afford.\n *\n * @param balances Array of current token balances in the pool\n * @param bptTotalSupply Total supply of the pool tokens (BPT)\n * @param bptAmountIn The amount of pool tokens that will be burned\n * @return amountsOut Array of amounts for each token to be withdrawn\n */\n function computeProportionalAmountsOut(\n uint256[] memory balances,\n uint256 bptTotalSupply,\n uint256 bptAmountIn\n ) internal pure returns (uint256[] memory amountsOut) {\n /**********************************************************************************************\n // computeProportionalAmountsOut //\n // (per token) //\n // aO = tokenAmountOut / bptIn \\ //\n // b = tokenBalance a0 = b * | --------------------- | //\n // bptIn = bptAmountIn \\ bptTotalSupply / //\n // bpt = bptTotalSupply //\n **********************************************************************************************/\n\n // Create a new array to hold the amounts of each token to be withdrawn.\n amountsOut = new uint256[](balances.length);\n for (uint256 i = 0; i < balances.length; ++i) {\n // Since we multiply and divide we don't need to use FP math.\n // Round down since we're calculating amounts out.\n amountsOut[i] = (balances[i] * bptAmountIn) / bptTotalSupply;\n }\n }\n\n /**\n * @notice Computes the amount of pool tokens (BPT) to be minted for an unbalanced liquidity addition.\n * @dev This function handles liquidity addition where the proportion of tokens deposited does not match\n * the current pool composition. It considers the current balances, exact amounts of tokens to be added,\n * total supply, and swap fee percentage. The function calculates a new invariant with the added tokens,\n * applying swap fees if necessary, and then calculates the amount of BPT to mint based on the change\n * in the invariant.\n *\n * @param currentBalances Current pool balances, sorted in token registration order\n * @param exactAmounts Array of exact amounts for each token to be added to the pool\n * @param totalSupply The current total supply of the pool tokens (BPT)\n * @param swapFeePercentage The swap fee percentage applied to the transaction\n * @param pool The pool to which we're adding liquidity\n * @return bptAmountOut The amount of pool tokens (BPT) that will be minted as a result of the liquidity addition\n * @return swapFeeAmounts The amount of swap fees charged for each token\n */\n function computeAddLiquidityUnbalanced(\n uint256[] memory currentBalances,\n uint256[] memory exactAmounts,\n uint256 totalSupply,\n uint256 swapFeePercentage,\n IBasePool pool\n ) internal view returns (uint256 bptAmountOut, uint256[] memory swapFeeAmounts) {\n /***********************************************************************\n // //\n // s = totalSupply (iFees - iCur) //\n // b = tokenBalance bptOut = s * -------------- //\n // bptOut = bptAmountOut iCur //\n // iFees = invariantWithFeesApplied //\n // iCur = currentInvariant //\n // iNew = newInvariant //\n ***********************************************************************/\n\n // Determine the number of tokens in the pool.\n uint256 numTokens = currentBalances.length;\n\n // Create a new array to hold the updated balances after the addition.\n uint256[] memory newBalances = new uint256[](numTokens);\n // Create a new array to hold the swap fee amount for each token.\n swapFeeAmounts = new uint256[](numTokens);\n\n // Loop through each token, updating the balance with the added amount.\n for (uint256 i = 0; i < numTokens; ++i) {\n newBalances[i] = currentBalances[i] + exactAmounts[i] - 1; // Undo balance round up for new balances.\n }\n\n // Calculate the new invariant ratio by dividing the new invariant by the old invariant.\n // Rounding current invariant up reduces BPT amount out at the end (see comments below).\n uint256 currentInvariant = pool.computeInvariant(currentBalances, Rounding.ROUND_UP);\n // Round down to make `taxableAmount` larger below.\n uint256 invariantRatio = pool.computeInvariant(newBalances, Rounding.ROUND_DOWN).divDown(currentInvariant);\n\n ensureInvariantRatioBelowMaximumBound(pool, invariantRatio);\n\n // Loop through each token to apply fees if necessary.\n for (uint256 i = 0; i < numTokens; ++i) {\n // Check if the new balance is greater than the equivalent proportional balance.\n // If so, calculate the taxable amount, rounding in favor of the protocol.\n // We round the second term down to subtract less and get a higher `taxableAmount`,\n // which charges higher swap fees. This will lower `newBalances`, which in turn lowers\n // `invariantWithFeesApplied` below.\n uint256 proportionalTokenBalance = invariantRatio.mulDown(currentBalances[i]);\n if (newBalances[i] > proportionalTokenBalance) {\n uint256 taxableAmount;\n unchecked {\n taxableAmount = newBalances[i] - proportionalTokenBalance;\n }\n // Calculate the fee amount.\n swapFeeAmounts[i] = taxableAmount.mulUp(swapFeePercentage);\n\n // Subtract the fee from the new balance.\n // We are essentially imposing swap fees on non-proportional incoming amounts.\n // Note: `swapFeeAmounts` should always be <= `taxableAmount` since `swapFeePercentage` is <= FP(1),\n // but since that's not verifiable within this contract, a checked subtraction is preferred.\n newBalances[i] = newBalances[i] - swapFeeAmounts[i];\n }\n }\n\n // Calculate the new invariant with fees applied.\n // This invariant should be lower than the original one, so we don't need to check invariant ratio bounds again.\n // Rounding down makes bptAmountOut go down (see comment below).\n uint256 invariantWithFeesApplied = pool.computeInvariant(newBalances, Rounding.ROUND_DOWN);\n\n // Calculate the amount of BPT to mint. This is done by multiplying the\n // total supply with the ratio of the change in invariant.\n // Since we multiply and divide we don't need to use FP math.\n // Round down since we're calculating BPT amount out. This is the most important result of this function,\n // equivalent to:\n // `totalSupply * (invariantWithFeesApplied / currentInvariant - 1)`\n\n // Then, to round `bptAmountOut` down we use `invariantWithFeesApplied` rounded down and `currentInvariant`\n // rounded up.\n // If rounding makes `invariantWithFeesApplied` smaller or equal to `currentInvariant`, this would effectively\n // be a donation. In that case we just let checked math revert for simplicity; it's not a valid use-case to\n // support at this point.\n bptAmountOut = (totalSupply * (invariantWithFeesApplied - currentInvariant)) / currentInvariant;\n }\n\n /**\n * @notice Computes the amount of input token needed to receive an exact amount of pool tokens (BPT) in a\n * single-token liquidity addition.\n * @dev This function is used when a user wants to add liquidity to the pool by specifying the exact amount\n * of pool tokens they want to receive, and the function calculates the corresponding amount of the input token.\n * It considers the current pool balances, total supply, swap fee percentage, and the desired BPT amount.\n *\n * @param currentBalances Array of current token balances in the pool, sorted in token registration order\n * @param tokenInIndex Index of the input token for which the amount needs to be calculated\n * @param exactBptAmountOut Exact amount of pool tokens (BPT) the user wants to receive\n * @param totalSupply The current total supply of the pool tokens (BPT)\n * @param swapFeePercentage The swap fee percentage applied to the taxable amount\n * @param pool The pool to which we're adding liquidity\n * @return amountInWithFee The amount of input token needed, including the swap fee, to receive the exact BPT amount\n * @return swapFeeAmounts The amount of swap fees charged for each token\n */\n function computeAddLiquiditySingleTokenExactOut(\n uint256[] memory currentBalances,\n uint256 tokenInIndex,\n uint256 exactBptAmountOut,\n uint256 totalSupply,\n uint256 swapFeePercentage,\n IBasePool pool\n ) internal view returns (uint256 amountInWithFee, uint256[] memory swapFeeAmounts) {\n // Calculate new supply after minting exactBptAmountOut.\n uint256 newSupply = exactBptAmountOut + totalSupply;\n\n // Calculate the initial amount of the input token needed for the desired amount of BPT out\n // \"divUp\" leads to a higher \"newBalance\", which in turn results in a larger \"amountIn\".\n // This leads to receiving more tokens for the same amount of BPT minted.\n uint256 invariantRatio = newSupply.divUp(totalSupply);\n ensureInvariantRatioBelowMaximumBound(pool, invariantRatio);\n\n uint256 newBalance = pool.computeBalance(currentBalances, tokenInIndex, invariantRatio);\n\n // Compute the amount to be deposited into the pool.\n uint256 amountIn = newBalance - currentBalances[tokenInIndex];\n\n // Calculate the non-taxable amount, which is the new balance proportionate to the BPT minted.\n // Since we multiply and divide we don't need to use FP math.\n // Rounding down makes `taxableAmount` larger, which in turn makes `fee` larger below.\n uint256 nonTaxableBalance = (newSupply * currentBalances[tokenInIndex]) / totalSupply;\n\n // Calculate the taxable amount, which is the difference between the actual new balance and\n // the non-taxable balance.\n uint256 taxableAmount = newBalance - nonTaxableBalance;\n\n // Calculate the swap fee based on the taxable amount and the swap fee percentage.\n uint256 fee = taxableAmount.divUp(swapFeePercentage.complement()) - taxableAmount;\n\n // Create swap fees amount array and set the single fee we charge.\n swapFeeAmounts = new uint256[](currentBalances.length);\n swapFeeAmounts[tokenInIndex] = fee;\n\n // Return the total amount of input token needed, including the swap fee.\n amountInWithFee = amountIn + fee;\n }\n\n /**\n * @notice Computes the amount of pool tokens to burn to receive exact amount out.\n * @param currentBalances Current pool balances, sorted in token registration order\n * @param tokenOutIndex Index of the token to receive in exchange for pool tokens burned\n * @param exactAmountOut Exact amount of tokens to receive\n * @param totalSupply The current total supply of the pool tokens (BPT)\n * @param swapFeePercentage The swap fee percentage applied to the taxable amount\n * @param pool The pool from which we're removing liquidity\n * @return bptAmountIn Amount of pool tokens to burn\n * @return swapFeeAmounts The amount of swap fees charged for each token\n */\n function computeRemoveLiquiditySingleTokenExactOut(\n uint256[] memory currentBalances,\n uint256 tokenOutIndex,\n uint256 exactAmountOut,\n uint256 totalSupply,\n uint256 swapFeePercentage,\n IBasePool pool\n ) internal view returns (uint256 bptAmountIn, uint256[] memory swapFeeAmounts) {\n // Determine the number of tokens in the pool.\n uint256 numTokens = currentBalances.length;\n\n // Create a new array to hold the updated balances.\n uint256[] memory newBalances = new uint256[](numTokens);\n\n // Copy currentBalances to newBalances.\n for (uint256 i = 0; i < numTokens; ++i) {\n newBalances[i] = currentBalances[i] - 1;\n }\n\n // Update the balance of tokenOutIndex with exactAmountOut.\n newBalances[tokenOutIndex] = newBalances[tokenOutIndex] - exactAmountOut;\n\n // Calculate the new invariant using the new balances (after the removal).\n // Calculate the new invariant ratio by dividing the new invariant by the old invariant.\n // Calculate the new proportional balance by multiplying the new invariant ratio by the current balance.\n // Calculate the taxable amount by subtracting the new balance from the equivalent proportional balance.\n // We round `currentInvariant` up as it affects the calculated `bptAmountIn` directly (see below).\n uint256 currentInvariant = pool.computeInvariant(currentBalances, Rounding.ROUND_UP);\n\n // We round invariant ratio up (see reason below).\n // This invariant ratio could be rounded up even more by rounding `currentInvariant` down. But since it only\n // affects the taxable amount and the fee calculation, whereas `currentInvariant` affects BPT in more directly,\n // we use `currentInvariant` rounded up here as well.\n uint256 invariantRatio = pool.computeInvariant(newBalances, Rounding.ROUND_UP).divUp(currentInvariant);\n\n ensureInvariantRatioAboveMinimumBound(pool, invariantRatio);\n\n // Taxable amount is proportional to invariant ratio; a larger taxable amount rounds in the Vault's favor.\n uint256 taxableAmount = invariantRatio.mulUp(currentBalances[tokenOutIndex]) - newBalances[tokenOutIndex];\n\n // Calculate the swap fee based on the taxable amount and the swap fee percentage.\n // Fee is proportional to taxable amount; larger fee rounds in the Vault's favor.\n uint256 fee = taxableAmount.divUp(swapFeePercentage.complement()) - taxableAmount;\n\n // Update new balances array with a fee.\n newBalances[tokenOutIndex] = newBalances[tokenOutIndex] - fee;\n\n // Calculate the new invariant with fees applied.\n // Larger fee means `invariantWithFeesApplied` goes lower.\n uint256 invariantWithFeesApplied = pool.computeInvariant(newBalances, Rounding.ROUND_DOWN);\n\n // Create swap fees amount array and set the single fee we charge.\n swapFeeAmounts = new uint256[](numTokens);\n swapFeeAmounts[tokenOutIndex] = fee;\n\n // Calculate the amount of BPT to burn. This is done by multiplying the total supply by the ratio of the\n // invariant delta to the current invariant.\n //\n // Calculating BPT amount in, so we round up. This is the most important result of this function, equivalent to:\n // `totalSupply * (1 - invariantWithFeesApplied / currentInvariant)`.\n // Then, to round `bptAmountIn` up we use `invariantWithFeesApplied` rounded down and `currentInvariant`\n // rounded up.\n //\n // Since `currentInvariant` is rounded up and `invariantWithFeesApplied` is rounded down, the difference\n // should always be positive. The checked math will revert if that is not the case.\n bptAmountIn = totalSupply.mulDivUp(currentInvariant - invariantWithFeesApplied, currentInvariant);\n }\n\n /**\n * @notice Computes the amount of a single token to withdraw for a given amount of BPT to burn.\n * @dev It computes the output token amount for an exact input of BPT, considering current balances,\n * total supply, and swap fees.\n *\n * @param currentBalances The current token balances in the pool\n * @param tokenOutIndex The index of the token to be withdrawn\n * @param exactBptAmountIn The exact amount of BPT the user wants to burn\n * @param totalSupply The current total supply of the pool tokens (BPT)\n * @param swapFeePercentage The swap fee percentage applied to the taxable amount\n * @param pool The pool from which we're removing liquidity\n * @return amountOutWithFee The amount of the output token the user receives, accounting for swap fees\n * @return swapFeeAmounts The total amount of swap fees charged\n */\n function computeRemoveLiquiditySingleTokenExactIn(\n uint256[] memory currentBalances,\n uint256 tokenOutIndex,\n uint256 exactBptAmountIn,\n uint256 totalSupply,\n uint256 swapFeePercentage,\n IBasePool pool\n ) internal view returns (uint256 amountOutWithFee, uint256[] memory swapFeeAmounts) {\n // Calculate new supply accounting for burning exactBptAmountIn.\n uint256 newSupply = totalSupply - exactBptAmountIn;\n uint256 invariantRatio = newSupply.divUp(totalSupply);\n ensureInvariantRatioAboveMinimumBound(pool, invariantRatio);\n\n // Calculate the new balance of the output token after the BPT burn.\n // \"divUp\" leads to a higher \"newBalance\", which in turn results in a lower \"amountOut\", but also a lower\n // \"taxableAmount\". Although the former leads to giving less tokens for the same amount of BPT burned,\n // the latter leads to charging less swap fees. In consequence, a conflict of interests arises regarding\n // the rounding of \"newBalance\"; we prioritize getting a lower \"amountOut\".\n uint256 newBalance = pool.computeBalance(currentBalances, tokenOutIndex, invariantRatio);\n\n // Compute the amount to be withdrawn from the pool.\n uint256 amountOut = currentBalances[tokenOutIndex] - newBalance;\n\n // Calculate the new balance proportionate to the amount of BPT burned.\n // We round up: higher `newBalanceBeforeTax` makes `taxableAmount` go up, which rounds in the Vault's favor.\n uint256 newBalanceBeforeTax = newSupply.mulDivUp(currentBalances[tokenOutIndex], totalSupply);\n\n // Compute the taxable amount: the difference between the new proportional and disproportional balances.\n uint256 taxableAmount = newBalanceBeforeTax - newBalance;\n\n // Calculate the swap fee on the taxable amount.\n uint256 fee = taxableAmount.mulUp(swapFeePercentage);\n\n // Create swap fees amount array and set the single fee we charge.\n swapFeeAmounts = new uint256[](currentBalances.length);\n swapFeeAmounts[tokenOutIndex] = fee;\n\n // Return the net amount after subtracting the fee.\n amountOutWithFee = amountOut - fee;\n }\n\n /**\n * @notice Validate the invariant ratio against the maximum bound.\n * @dev This is checked when we're adding liquidity, so the `invariantRatio` > 1.\n * @param pool The pool to which we're adding liquidity\n * @param invariantRatio The ratio of the new invariant (after an operation) to the old\n */\n function ensureInvariantRatioBelowMaximumBound(IBasePool pool, uint256 invariantRatio) internal view {\n uint256 maxInvariantRatio = pool.getMaximumInvariantRatio();\n if (invariantRatio > maxInvariantRatio) {\n revert InvariantRatioAboveMax(invariantRatio, maxInvariantRatio);\n }\n }\n\n /**\n * @notice Validate the invariant ratio against the maximum bound.\n * @dev This is checked when we're removing liquidity, so the `invariantRatio` < 1.\n * @param pool The pool from which we're removing liquidity\n * @param invariantRatio The ratio of the new invariant (after an operation) to the old\n */\n function ensureInvariantRatioAboveMinimumBound(IBasePool pool, uint256 invariantRatio) internal view {\n uint256 minInvariantRatio = pool.getMinimumInvariantRatio();\n if (invariantRatio < minInvariantRatio) {\n revert InvariantRatioBelowMin(invariantRatio, minInvariantRatio);\n }\n }\n}\n"},"contracts/lib/HooksConfigLib.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IHooks } from \"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { WordCodec } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\";\n\nimport { PoolConfigConst } from \"./PoolConfigConst.sol\";\n\n/**\n * @notice Helper functions to read and write the packed hook configuration flags stored in `_poolConfigBits`.\n * @dev This library has two additional functions. `toHooksConfig` constructs a `HooksConfig` structure from the\n * PoolConfig and the hooks contract address. Also, there are `call` functions that forward the arguments\n * to the corresponding functions in the hook contract, then validate and return the results.\n *\n * Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot per pool).\n * This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct. The layout (i.e.,\n * offsets for each data field) is specified in `PoolConfigConst`.\n *\n * There are two libraries for interpreting these data. This one parses fields related to hooks, and also\n * contains helpers for the struct building and hooks contract forwarding functions described above. `PoolConfigLib`\n * contains helpers related to the non-hook-related flags, along with aggregate fee percentages and other data\n * associated with pools.\n *\n * The `PoolData` struct contains the raw bitmap with the entire pool state (`PoolConfigBits`), plus the token\n * configuration, scaling factors, and dynamic information such as current balances and rates.\n *\n * The hooks contract addresses themselves are stored in a separate `_hooksContracts` mapping.\n */\nlibrary HooksConfigLib {\n using WordCodec for bytes32;\n using HooksConfigLib for PoolConfigBits;\n\n function enableHookAdjustedAmounts(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET);\n }\n\n function setHookAdjustedAmounts(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET)\n );\n }\n\n function shouldCallBeforeInitialize(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.BEFORE_INITIALIZE_OFFSET);\n }\n\n function setShouldCallBeforeInitialize(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.BEFORE_INITIALIZE_OFFSET)\n );\n }\n\n function shouldCallAfterInitialize(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.AFTER_INITIALIZE_OFFSET);\n }\n\n function setShouldCallAfterInitialize(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.AFTER_INITIALIZE_OFFSET)\n );\n }\n\n function shouldCallComputeDynamicSwapFee(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.DYNAMIC_SWAP_FEE_OFFSET);\n }\n\n function setShouldCallComputeDynamicSwapFee(\n PoolConfigBits config,\n bool value\n ) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.DYNAMIC_SWAP_FEE_OFFSET)\n );\n }\n\n function shouldCallBeforeSwap(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.BEFORE_SWAP_OFFSET);\n }\n\n function setShouldCallBeforeSwap(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return PoolConfigBits.wrap(PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.BEFORE_SWAP_OFFSET));\n }\n\n function shouldCallAfterSwap(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.AFTER_SWAP_OFFSET);\n }\n\n function setShouldCallAfterSwap(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return PoolConfigBits.wrap(PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.AFTER_SWAP_OFFSET));\n }\n\n function shouldCallBeforeAddLiquidity(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.BEFORE_ADD_LIQUIDITY_OFFSET);\n }\n\n function setShouldCallBeforeAddLiquidity(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.BEFORE_ADD_LIQUIDITY_OFFSET)\n );\n }\n\n function shouldCallAfterAddLiquidity(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.AFTER_ADD_LIQUIDITY_OFFSET);\n }\n\n function setShouldCallAfterAddLiquidity(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.AFTER_ADD_LIQUIDITY_OFFSET)\n );\n }\n\n function shouldCallBeforeRemoveLiquidity(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.BEFORE_REMOVE_LIQUIDITY_OFFSET);\n }\n\n function setShouldCallBeforeRemoveLiquidity(\n PoolConfigBits config,\n bool value\n ) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.BEFORE_REMOVE_LIQUIDITY_OFFSET)\n );\n }\n\n function shouldCallAfterRemoveLiquidity(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.AFTER_REMOVE_LIQUIDITY_OFFSET);\n }\n\n function setShouldCallAfterRemoveLiquidity(\n PoolConfigBits config,\n bool value\n ) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.AFTER_REMOVE_LIQUIDITY_OFFSET)\n );\n }\n\n function toHooksConfig(PoolConfigBits config, IHooks hooksContract) internal pure returns (HooksConfig memory) {\n return\n HooksConfig({\n enableHookAdjustedAmounts: config.enableHookAdjustedAmounts(),\n shouldCallBeforeInitialize: config.shouldCallBeforeInitialize(),\n shouldCallAfterInitialize: config.shouldCallAfterInitialize(),\n shouldCallBeforeAddLiquidity: config.shouldCallBeforeAddLiquidity(),\n shouldCallAfterAddLiquidity: config.shouldCallAfterAddLiquidity(),\n shouldCallBeforeRemoveLiquidity: config.shouldCallBeforeRemoveLiquidity(),\n shouldCallAfterRemoveLiquidity: config.shouldCallAfterRemoveLiquidity(),\n shouldCallComputeDynamicSwapFee: config.shouldCallComputeDynamicSwapFee(),\n shouldCallBeforeSwap: config.shouldCallBeforeSwap(),\n shouldCallAfterSwap: config.shouldCallAfterSwap(),\n hooksContract: address(hooksContract)\n });\n }\n\n /**\n * @dev Call the `onComputeDynamicSwapFeePercentage` hook and return the result. Reverts on failure.\n * @param swapParams The swap parameters used to calculate the fee\n * @param pool Pool address\n * @param staticSwapFeePercentage Value of the static swap fee, for reference\n * @param hooksContract Storage slot with the address of the hooks contract\n * @return swapFeePercentage The calculated swap fee percentage\n */\n function callComputeDynamicSwapFeeHook(\n PoolSwapParams memory swapParams,\n address pool,\n uint256 staticSwapFeePercentage,\n IHooks hooksContract\n ) internal view returns (uint256) {\n (bool success, uint256 swapFeePercentage) = hooksContract.onComputeDynamicSwapFeePercentage(\n swapParams,\n pool,\n staticSwapFeePercentage\n );\n\n if (success == false) {\n revert IVaultErrors.DynamicSwapFeeHookFailed();\n }\n\n // A 100% fee is not supported. In the ExactOut case, the Vault divides by the complement of the swap fee.\n // The minimum precision constraint provides an additional buffer.\n if (swapFeePercentage > MAX_FEE_PERCENTAGE) {\n revert IVaultErrors.PercentageAboveMax();\n }\n\n return swapFeePercentage;\n }\n\n /**\n * @dev Call the `onBeforeSwap` hook. Reverts on failure.\n * @param swapParams The swap parameters used in the hook\n * @param pool Pool address\n * @param hooksContract Storage slot with the address of the hooks contract\n */\n function callBeforeSwapHook(PoolSwapParams memory swapParams, address pool, IHooks hooksContract) internal {\n if (hooksContract.onBeforeSwap(swapParams, pool) == false) {\n // Hook contract implements onBeforeSwap, but it has failed, so reverts the transaction.\n revert IVaultErrors.BeforeSwapHookFailed();\n }\n }\n\n /**\n * @dev Call the `onAfterSwap` hook, then validate and return the result. Reverts on failure, or if the limits\n * are violated. If the hook contract did not enable hook-adjusted amounts, it will ignore the hook results and\n * return the original `amountCalculatedRaw`.\n *\n * @param config The encoded pool configuration\n * @param amountCalculatedScaled18 Token amount calculated by the swap\n * @param amountCalculatedRaw Token amount calculated by the swap\n * @param router Router address\n * @param vaultSwapParams The swap parameters\n * @param state Temporary state used in swap operations\n * @param poolData Struct containing balance and token information of the pool\n * @param hooksContract Storage slot with the address of the hooks contract\n * @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook\n */\n function callAfterSwapHook(\n PoolConfigBits config,\n uint256 amountCalculatedScaled18,\n uint256 amountCalculatedRaw,\n address router,\n VaultSwapParams memory vaultSwapParams,\n SwapState memory state,\n PoolData memory poolData,\n IHooks hooksContract\n ) internal returns (uint256) {\n // Adjust balances for the AfterSwap hook.\n (uint256 amountInScaled18, uint256 amountOutScaled18) = vaultSwapParams.kind == SwapKind.EXACT_IN\n ? (state.amountGivenScaled18, amountCalculatedScaled18)\n : (amountCalculatedScaled18, state.amountGivenScaled18);\n\n (bool success, uint256 hookAdjustedAmountCalculatedRaw) = hooksContract.onAfterSwap(\n AfterSwapParams({\n kind: vaultSwapParams.kind,\n tokenIn: vaultSwapParams.tokenIn,\n tokenOut: vaultSwapParams.tokenOut,\n amountInScaled18: amountInScaled18,\n amountOutScaled18: amountOutScaled18,\n tokenInBalanceScaled18: poolData.balancesLiveScaled18[state.indexIn],\n tokenOutBalanceScaled18: poolData.balancesLiveScaled18[state.indexOut],\n amountCalculatedScaled18: amountCalculatedScaled18,\n amountCalculatedRaw: amountCalculatedRaw,\n router: router,\n pool: vaultSwapParams.pool,\n userData: vaultSwapParams.userData\n })\n );\n\n if (success == false) {\n // Hook contract implements onAfterSwap, but it has failed, so reverts the transaction.\n revert IVaultErrors.AfterSwapHookFailed();\n }\n\n // If hook adjusted amounts is not enabled, ignore amounts returned by the hook\n if (config.enableHookAdjustedAmounts() == false) {\n return amountCalculatedRaw;\n }\n\n if (\n (vaultSwapParams.kind == SwapKind.EXACT_IN && hookAdjustedAmountCalculatedRaw < vaultSwapParams.limitRaw) ||\n (vaultSwapParams.kind == SwapKind.EXACT_OUT && hookAdjustedAmountCalculatedRaw > vaultSwapParams.limitRaw)\n ) {\n revert IVaultErrors.HookAdjustedSwapLimit(hookAdjustedAmountCalculatedRaw, vaultSwapParams.limitRaw);\n }\n\n return hookAdjustedAmountCalculatedRaw;\n }\n\n /**\n * @dev Call the `onBeforeAddLiquidity` hook. Reverts on failure.\n * @param router Router address\n * @param maxAmountsInScaled18 An array with maximum amounts for each input token of the add liquidity operation\n * @param params The add liquidity parameters\n * @param poolData Struct containing balance and token information of the pool\n * @param hooksContract Storage slot with the address of the hooks contract\n */\n function callBeforeAddLiquidityHook(\n address router,\n uint256[] memory maxAmountsInScaled18,\n AddLiquidityParams memory params,\n PoolData memory poolData,\n IHooks hooksContract\n ) internal {\n if (\n hooksContract.onBeforeAddLiquidity(\n router,\n params.pool,\n params.kind,\n maxAmountsInScaled18,\n params.minBptAmountOut,\n poolData.balancesLiveScaled18,\n params.userData\n ) == false\n ) {\n revert IVaultErrors.BeforeAddLiquidityHookFailed();\n }\n }\n\n /**\n * @dev Call the `onAfterAddLiquidity` hook, then validate and return the result. Reverts on failure, or if\n * the limits are violated. If the contract did not enable hook-adjusted amounts, it will ignore the hook\n * results and return the original `amountsInRaw`.\n *\n * @param config The encoded pool configuration\n * @param router Router address\n * @param amountsInScaled18 An array with amounts for each input token of the add liquidity operation\n * @param amountsInRaw An array with amounts for each input token of the add liquidity operation\n * @param bptAmountOut The BPT amount a user will receive after add liquidity operation succeeds\n * @param params The add liquidity parameters\n * @param poolData Struct containing balance and token information of the pool\n * @param hooksContract Storage slot with the address of the hooks contract\n * @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook\n */\n function callAfterAddLiquidityHook(\n PoolConfigBits config,\n address router,\n uint256[] memory amountsInScaled18,\n uint256[] memory amountsInRaw,\n uint256 bptAmountOut,\n AddLiquidityParams memory params,\n PoolData memory poolData,\n IHooks hooksContract\n ) internal returns (uint256[] memory) {\n (bool success, uint256[] memory hookAdjustedAmountsInRaw) = hooksContract.onAfterAddLiquidity(\n router,\n params.pool,\n params.kind,\n amountsInScaled18,\n amountsInRaw,\n bptAmountOut,\n poolData.balancesLiveScaled18,\n params.userData\n );\n\n if (success == false || hookAdjustedAmountsInRaw.length != amountsInRaw.length) {\n revert IVaultErrors.AfterAddLiquidityHookFailed();\n }\n\n // If hook adjusted amounts is not enabled, ignore amounts returned by the hook\n if (config.enableHookAdjustedAmounts() == false) {\n return amountsInRaw;\n }\n\n for (uint256 i = 0; i < hookAdjustedAmountsInRaw.length; i++) {\n if (hookAdjustedAmountsInRaw[i] > params.maxAmountsIn[i]) {\n revert IVaultErrors.HookAdjustedAmountInAboveMax(\n poolData.tokens[i],\n hookAdjustedAmountsInRaw[i],\n params.maxAmountsIn[i]\n );\n }\n }\n\n return hookAdjustedAmountsInRaw;\n }\n\n /**\n * @dev Call the `onBeforeRemoveLiquidity` hook. Reverts on failure.\n * @param minAmountsOutScaled18 Minimum amounts for each output token of the remove liquidity operation\n * @param router Router address\n * @param params The remove liquidity parameters\n * @param poolData Struct containing balance and token information of the pool\n * @param hooksContract Storage slot with the address of the hooks contract\n */\n function callBeforeRemoveLiquidityHook(\n uint256[] memory minAmountsOutScaled18,\n address router,\n RemoveLiquidityParams memory params,\n PoolData memory poolData,\n IHooks hooksContract\n ) internal {\n if (\n hooksContract.onBeforeRemoveLiquidity(\n router,\n params.pool,\n params.kind,\n params.maxBptAmountIn,\n minAmountsOutScaled18,\n poolData.balancesLiveScaled18,\n params.userData\n ) == false\n ) {\n revert IVaultErrors.BeforeRemoveLiquidityHookFailed();\n }\n }\n\n /**\n * @dev Call the `onAfterRemoveLiquidity` hook, then validate and return the result. Reverts on failure, or if\n * the limits are violated. If the contract did not enable hook-adjusted amounts, it will ignore the hook\n * results and return the original `amountsOutRaw`.\n *\n * @param config The encoded pool configuration\n * @param router Router address\n * @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n * @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n * @param bptAmountIn The BPT amount a user will need burn to remove the liquidity of the pool\n * @param params The remove liquidity parameters\n * @param poolData Struct containing balance and token information of the pool\n * @param hooksContract Storage slot with the address of the hooks contract\n * @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook\n */\n function callAfterRemoveLiquidityHook(\n PoolConfigBits config,\n address router,\n uint256[] memory amountsOutScaled18,\n uint256[] memory amountsOutRaw,\n uint256 bptAmountIn,\n RemoveLiquidityParams memory params,\n PoolData memory poolData,\n IHooks hooksContract\n ) internal returns (uint256[] memory) {\n (bool success, uint256[] memory hookAdjustedAmountsOutRaw) = hooksContract.onAfterRemoveLiquidity(\n router,\n params.pool,\n params.kind,\n bptAmountIn,\n amountsOutScaled18,\n amountsOutRaw,\n poolData.balancesLiveScaled18,\n params.userData\n );\n\n if (success == false || hookAdjustedAmountsOutRaw.length != amountsOutRaw.length) {\n revert IVaultErrors.AfterRemoveLiquidityHookFailed();\n }\n\n // If hook adjusted amounts is not enabled, ignore amounts returned by the hook\n if (config.enableHookAdjustedAmounts() == false) {\n return amountsOutRaw;\n }\n\n for (uint256 i = 0; i < hookAdjustedAmountsOutRaw.length; i++) {\n if (hookAdjustedAmountsOutRaw[i] < params.minAmountsOut[i]) {\n revert IVaultErrors.HookAdjustedAmountOutBelowMin(\n poolData.tokens[i],\n hookAdjustedAmountsOutRaw[i],\n params.minAmountsOut[i]\n );\n }\n }\n\n return hookAdjustedAmountsOutRaw;\n }\n\n /**\n * @dev Call the `onBeforeInitialize` hook. Reverts on failure.\n * @param exactAmountsInScaled18 An array with the initial liquidity of the pool\n * @param userData Additional (optional) data required for adding initial liquidity\n * @param hooksContract Storage slot with the address of the hooks contract\n */\n function callBeforeInitializeHook(\n uint256[] memory exactAmountsInScaled18,\n bytes memory userData,\n IHooks hooksContract\n ) internal {\n if (hooksContract.onBeforeInitialize(exactAmountsInScaled18, userData) == false) {\n revert IVaultErrors.BeforeInitializeHookFailed();\n }\n }\n\n /**\n * @dev Call the `onAfterInitialize` hook. Reverts on failure.\n * @param exactAmountsInScaled18 An array with the initial liquidity of the pool\n * @param bptAmountOut The BPT amount a user will receive after initialization operation succeeds\n * @param userData Additional (optional) data required for adding initial liquidity\n * @param hooksContract Storage slot with the address of the hooks contract\n */\n function callAfterInitializeHook(\n uint256[] memory exactAmountsInScaled18,\n uint256 bptAmountOut,\n bytes memory userData,\n IHooks hooksContract\n ) internal {\n if (hooksContract.onAfterInitialize(exactAmountsInScaled18, bptAmountOut, userData) == false) {\n revert IVaultErrors.AfterInitializeHookFailed();\n }\n }\n}\n"},"contracts/lib/PoolConfigConst.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { FEE_BITLENGTH } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\n/**\n * @notice Helper functions to read and write the packed configuration flags stored in `_poolConfigBits`.\n * @dev Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot per pool).\n * This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct. The layout (i.e.,\n * offsets for each data field) is specified here.\n *\n * There are two libraries for interpreting these data. `HooksConfigLib` parses fields related to hooks, while\n * `PoolConfigLib` contains helpers related to the non-hook-related flags, along with aggregate fee percentages\n * and other data associated with pools.\n */\nlibrary PoolConfigConst {\n // Bit offsets for main pool config settings.\n uint8 public constant POOL_REGISTERED_OFFSET = 0;\n uint8 public constant POOL_INITIALIZED_OFFSET = POOL_REGISTERED_OFFSET + 1;\n uint8 public constant POOL_PAUSED_OFFSET = POOL_INITIALIZED_OFFSET + 1;\n uint8 public constant POOL_RECOVERY_MODE_OFFSET = POOL_PAUSED_OFFSET + 1;\n\n // Bit offsets for liquidity operations.\n uint8 public constant UNBALANCED_LIQUIDITY_OFFSET = POOL_RECOVERY_MODE_OFFSET + 1;\n uint8 public constant ADD_LIQUIDITY_CUSTOM_OFFSET = UNBALANCED_LIQUIDITY_OFFSET + 1;\n uint8 public constant REMOVE_LIQUIDITY_CUSTOM_OFFSET = ADD_LIQUIDITY_CUSTOM_OFFSET + 1;\n uint8 public constant DONATION_OFFSET = REMOVE_LIQUIDITY_CUSTOM_OFFSET + 1;\n\n // Bit offsets for hooks config.\n uint8 public constant BEFORE_INITIALIZE_OFFSET = DONATION_OFFSET + 1;\n uint8 public constant ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET = BEFORE_INITIALIZE_OFFSET + 1;\n uint8 public constant AFTER_INITIALIZE_OFFSET = ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET + 1;\n uint8 public constant DYNAMIC_SWAP_FEE_OFFSET = AFTER_INITIALIZE_OFFSET + 1;\n uint8 public constant BEFORE_SWAP_OFFSET = DYNAMIC_SWAP_FEE_OFFSET + 1;\n uint8 public constant AFTER_SWAP_OFFSET = BEFORE_SWAP_OFFSET + 1;\n uint8 public constant BEFORE_ADD_LIQUIDITY_OFFSET = AFTER_SWAP_OFFSET + 1;\n uint8 public constant AFTER_ADD_LIQUIDITY_OFFSET = BEFORE_ADD_LIQUIDITY_OFFSET + 1;\n uint8 public constant BEFORE_REMOVE_LIQUIDITY_OFFSET = AFTER_ADD_LIQUIDITY_OFFSET + 1;\n uint8 public constant AFTER_REMOVE_LIQUIDITY_OFFSET = BEFORE_REMOVE_LIQUIDITY_OFFSET + 1;\n\n // Bit offsets for uint values.\n uint8 public constant STATIC_SWAP_FEE_OFFSET = AFTER_REMOVE_LIQUIDITY_OFFSET + 1;\n uint256 public constant AGGREGATE_SWAP_FEE_OFFSET = STATIC_SWAP_FEE_OFFSET + FEE_BITLENGTH;\n uint256 public constant AGGREGATE_YIELD_FEE_OFFSET = AGGREGATE_SWAP_FEE_OFFSET + FEE_BITLENGTH;\n uint256 public constant DECIMAL_SCALING_FACTORS_OFFSET = AGGREGATE_YIELD_FEE_OFFSET + FEE_BITLENGTH;\n uint256 public constant PAUSE_WINDOW_END_TIME_OFFSET =\n DECIMAL_SCALING_FACTORS_OFFSET + TOKEN_DECIMAL_DIFFS_BITLENGTH;\n\n // Uses a uint40 to pack the values: 8 tokens * 5 bits/token.\n // This maximum token count is also hard-coded in the Vault.\n uint8 public constant TOKEN_DECIMAL_DIFFS_BITLENGTH = 40;\n uint8 public constant DECIMAL_DIFF_BITLENGTH = 5;\n\n uint8 public constant TIMESTAMP_BITLENGTH = 32;\n}\n"},"contracts/lib/PoolConfigLib.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { WordCodec } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\";\n\nimport { PoolConfigConst } from \"./PoolConfigConst.sol\";\n\n/**\n * @notice Helper functions to read and write the packed hook configuration flags stored in `_poolConfigBits`.\n * @dev Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot\n * per pool). This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct.\n * The layout (i.e., offsets for each data field) is specified in `PoolConfigConst`.\n *\n * There are two libraries for interpreting these data. `HooksConfigLib` parses fields related to hooks, while\n * this one contains helpers related to the non-hook-related flags, along with aggregate fee percentages and\n * other data associated with pools.\n *\n * The `PoolData` struct contains the raw bitmap with the entire pool state (`PoolConfigBits`), plus the token\n * configuration, scaling factors, and dynamic information such as current balances and rates.\n */\nlibrary PoolConfigLib {\n using WordCodec for bytes32;\n using PoolConfigLib for PoolConfigBits;\n\n // Bit offsets for main pool config settings.\n function isPoolRegistered(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.POOL_REGISTERED_OFFSET);\n }\n\n function setPoolRegistered(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.POOL_REGISTERED_OFFSET)\n );\n }\n\n function isPoolInitialized(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.POOL_INITIALIZED_OFFSET);\n }\n\n function setPoolInitialized(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.POOL_INITIALIZED_OFFSET)\n );\n }\n\n function isPoolPaused(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.POOL_PAUSED_OFFSET);\n }\n\n function setPoolPaused(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return PoolConfigBits.wrap(PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.POOL_PAUSED_OFFSET));\n }\n\n function isPoolInRecoveryMode(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.POOL_RECOVERY_MODE_OFFSET);\n }\n\n function setPoolInRecoveryMode(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.POOL_RECOVERY_MODE_OFFSET)\n );\n }\n\n // Bit offsets for liquidity operations.\n function supportsUnbalancedLiquidity(PoolConfigBits config) internal pure returns (bool) {\n // NOTE: The unbalanced liquidity flag is default-on (false means it is supported).\n // This function returns the inverted value.\n return !PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.UNBALANCED_LIQUIDITY_OFFSET);\n }\n\n function requireUnbalancedLiquidityEnabled(PoolConfigBits config) internal pure {\n if (config.supportsUnbalancedLiquidity() == false) {\n revert IVaultErrors.DoesNotSupportUnbalancedLiquidity();\n }\n }\n\n function setDisableUnbalancedLiquidity(\n PoolConfigBits config,\n bool disableUnbalancedLiquidity\n ) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(\n disableUnbalancedLiquidity,\n PoolConfigConst.UNBALANCED_LIQUIDITY_OFFSET\n )\n );\n }\n\n function supportsAddLiquidityCustom(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.ADD_LIQUIDITY_CUSTOM_OFFSET);\n }\n\n function requireAddLiquidityCustomEnabled(PoolConfigBits config) internal pure {\n if (config.supportsAddLiquidityCustom() == false) {\n revert IVaultErrors.DoesNotSupportAddLiquidityCustom();\n }\n }\n\n function setAddLiquidityCustom(\n PoolConfigBits config,\n bool enableAddLiquidityCustom\n ) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(\n enableAddLiquidityCustom,\n PoolConfigConst.ADD_LIQUIDITY_CUSTOM_OFFSET\n )\n );\n }\n\n function supportsRemoveLiquidityCustom(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.REMOVE_LIQUIDITY_CUSTOM_OFFSET);\n }\n\n function requireRemoveLiquidityCustomEnabled(PoolConfigBits config) internal pure {\n if (config.supportsRemoveLiquidityCustom() == false) {\n revert IVaultErrors.DoesNotSupportRemoveLiquidityCustom();\n }\n }\n\n function setRemoveLiquidityCustom(\n PoolConfigBits config,\n bool enableRemoveLiquidityCustom\n ) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(\n enableRemoveLiquidityCustom,\n PoolConfigConst.REMOVE_LIQUIDITY_CUSTOM_OFFSET\n )\n );\n }\n\n function supportsDonation(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.DONATION_OFFSET);\n }\n\n function setDonation(PoolConfigBits config, bool enableDonation) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(enableDonation, PoolConfigConst.DONATION_OFFSET)\n );\n }\n\n function requireDonationEnabled(PoolConfigBits config) internal pure {\n if (config.supportsDonation() == false) {\n revert IVaultErrors.DoesNotSupportDonation();\n }\n }\n\n // Bit offsets for uint values.\n function getStaticSwapFeePercentage(PoolConfigBits config) internal pure returns (uint256) {\n return\n PoolConfigBits.unwrap(config).decodeUint(PoolConfigConst.STATIC_SWAP_FEE_OFFSET, FEE_BITLENGTH) *\n FEE_SCALING_FACTOR;\n }\n\n function setStaticSwapFeePercentage(PoolConfigBits config, uint256 value) internal pure returns (PoolConfigBits) {\n // A 100% fee is not supported. In the ExactOut case, the Vault divides by the complement of the swap fee.\n // The max fee percentage is slightly below 100%.\n if (value > MAX_FEE_PERCENTAGE) {\n revert IVaultErrors.PercentageAboveMax();\n }\n value /= FEE_SCALING_FACTOR;\n\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertUint(value, PoolConfigConst.STATIC_SWAP_FEE_OFFSET, FEE_BITLENGTH)\n );\n }\n\n function getAggregateSwapFeePercentage(PoolConfigBits config) internal pure returns (uint256) {\n return\n PoolConfigBits.unwrap(config).decodeUint(PoolConfigConst.AGGREGATE_SWAP_FEE_OFFSET, FEE_BITLENGTH) *\n FEE_SCALING_FACTOR;\n }\n\n function setAggregateSwapFeePercentage(\n PoolConfigBits config,\n uint256 value\n ) internal pure returns (PoolConfigBits) {\n if (value > MAX_FEE_PERCENTAGE) {\n revert IVaultErrors.PercentageAboveMax();\n }\n value /= FEE_SCALING_FACTOR;\n\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertUint(\n value,\n PoolConfigConst.AGGREGATE_SWAP_FEE_OFFSET,\n FEE_BITLENGTH\n )\n );\n }\n\n function getAggregateYieldFeePercentage(PoolConfigBits config) internal pure returns (uint256) {\n return\n PoolConfigBits.unwrap(config).decodeUint(PoolConfigConst.AGGREGATE_YIELD_FEE_OFFSET, FEE_BITLENGTH) *\n FEE_SCALING_FACTOR;\n }\n\n function setAggregateYieldFeePercentage(\n PoolConfigBits config,\n uint256 value\n ) internal pure returns (PoolConfigBits) {\n if (value > MAX_FEE_PERCENTAGE) {\n revert IVaultErrors.PercentageAboveMax();\n }\n value /= FEE_SCALING_FACTOR;\n\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertUint(\n value,\n PoolConfigConst.AGGREGATE_YIELD_FEE_OFFSET,\n FEE_BITLENGTH\n )\n );\n }\n\n function getTokenDecimalDiffs(PoolConfigBits config) internal pure returns (uint40) {\n return\n uint40(\n PoolConfigBits.unwrap(config).decodeUint(\n PoolConfigConst.DECIMAL_SCALING_FACTORS_OFFSET,\n PoolConfigConst.TOKEN_DECIMAL_DIFFS_BITLENGTH\n )\n );\n }\n\n function getDecimalScalingFactors(\n PoolConfigBits config,\n uint256 numTokens\n ) internal pure returns (uint256[] memory) {\n uint256[] memory scalingFactors = new uint256[](numTokens);\n\n bytes32 tokenDecimalDiffs = bytes32(uint256(config.getTokenDecimalDiffs()));\n\n for (uint256 i = 0; i < numTokens; ++i) {\n uint256 decimalDiff = tokenDecimalDiffs.decodeUint(\n i * PoolConfigConst.DECIMAL_DIFF_BITLENGTH,\n PoolConfigConst.DECIMAL_DIFF_BITLENGTH\n );\n\n // This is a \"raw\" factor, not a fixed point number. It should be applied using raw math to raw amounts\n // instead of using FP multiplication.\n scalingFactors[i] = 10 ** decimalDiff;\n }\n\n return scalingFactors;\n }\n\n function setTokenDecimalDiffs(PoolConfigBits config, uint40 value) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertUint(\n value,\n PoolConfigConst.DECIMAL_SCALING_FACTORS_OFFSET,\n PoolConfigConst.TOKEN_DECIMAL_DIFFS_BITLENGTH\n )\n );\n }\n\n function getPauseWindowEndTime(PoolConfigBits config) internal pure returns (uint32) {\n return\n uint32(\n PoolConfigBits.unwrap(config).decodeUint(\n PoolConfigConst.PAUSE_WINDOW_END_TIME_OFFSET,\n PoolConfigConst.TIMESTAMP_BITLENGTH\n )\n );\n }\n\n function setPauseWindowEndTime(PoolConfigBits config, uint32 value) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertUint(\n value,\n PoolConfigConst.PAUSE_WINDOW_END_TIME_OFFSET,\n PoolConfigConst.TIMESTAMP_BITLENGTH\n )\n );\n }\n\n // Convert from an array of decimal differences, to the encoded 40-bit value (8 tokens * 5 bits/token).\n function toTokenDecimalDiffs(uint8[] memory tokenDecimalDiffs) internal pure returns (uint40) {\n bytes32 value;\n\n for (uint256 i = 0; i < tokenDecimalDiffs.length; ++i) {\n value = value.insertUint(\n tokenDecimalDiffs[i],\n i * PoolConfigConst.DECIMAL_DIFF_BITLENGTH,\n PoolConfigConst.DECIMAL_DIFF_BITLENGTH\n );\n }\n\n return uint40(uint256(value));\n }\n}\n"},"contracts/lib/PoolDataLib.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { PoolData, TokenInfo, TokenType, Rounding } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\n\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\nimport { ScalingHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\";\nimport { PackedTokenBalance } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\";\n\nimport { PoolConfigBits, PoolConfigLib } from \"./PoolConfigLib.sol\";\n\n/**\n * @notice Helper functions to read/write a `PoolData` struct.\n * @dev Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot per pool).\n * This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct. The layout (i.e.,\n * offsets for each data field) is specified in `PoolConfigConst`.\n *\n * The `PoolData` struct contains the raw bitmap with the entire pool state (`PoolConfigBits`), plus the token\n * configuration, scaling factors, and dynamic information such as current balances and rates.\n */\nlibrary PoolDataLib {\n using PackedTokenBalance for bytes32;\n using FixedPoint for *;\n using ScalingHelpers for *;\n using PoolConfigLib for PoolConfigBits;\n\n function load(\n PoolData memory poolData,\n mapping(uint256 tokenIndex => bytes32 packedTokenBalance) storage poolTokenBalances,\n PoolConfigBits poolConfigBits,\n mapping(IERC20 poolToken => TokenInfo tokenInfo) storage poolTokenInfo,\n IERC20[] storage tokens,\n Rounding roundingDirection\n ) internal view {\n uint256 numTokens = tokens.length;\n\n poolData.poolConfigBits = poolConfigBits;\n poolData.tokens = tokens;\n poolData.tokenInfo = new TokenInfo[](numTokens);\n poolData.balancesRaw = new uint256[](numTokens);\n poolData.balancesLiveScaled18 = new uint256[](numTokens);\n poolData.decimalScalingFactors = PoolConfigLib.getDecimalScalingFactors(poolData.poolConfigBits, numTokens);\n poolData.tokenRates = new uint256[](numTokens);\n\n bool poolSubjectToYieldFees = poolData.poolConfigBits.isPoolInitialized() &&\n poolData.poolConfigBits.getAggregateYieldFeePercentage() > 0 &&\n poolData.poolConfigBits.isPoolInRecoveryMode() == false;\n\n for (uint256 i = 0; i < numTokens; ++i) {\n TokenInfo memory tokenInfo = poolTokenInfo[poolData.tokens[i]];\n bytes32 packedBalance = poolTokenBalances[i];\n\n poolData.tokenInfo[i] = tokenInfo;\n poolData.tokenRates[i] = getTokenRate(tokenInfo);\n updateRawAndLiveBalance(poolData, i, packedBalance.getBalanceRaw(), roundingDirection);\n\n // If there are no yield fees, we can save gas by skipping to the next token now.\n if (poolSubjectToYieldFees == false) {\n continue;\n }\n\n // `poolData` already has live balances computed from raw balances according to the token rates and the\n // given rounding direction. Charging a yield fee changes the raw balance, in which case the safest and\n // most numerically precise way to adjust the live balance is to simply repeat the scaling (hence the\n // second call below).\n\n // The Vault actually guarantees that a token with paysYieldFees set is a WITH_RATE token, so technically\n // we could just check the flag, but we don't want to introduce that dependency for a slight gas savings.\n bool tokenSubjectToYieldFees = tokenInfo.paysYieldFees && tokenInfo.tokenType == TokenType.WITH_RATE;\n\n // Do not charge yield fees before the pool is initialized, or in recovery mode.\n if (tokenSubjectToYieldFees) {\n uint256 aggregateYieldFeePercentage = poolData.poolConfigBits.getAggregateYieldFeePercentage();\n uint256 balanceRaw = poolData.balancesRaw[i];\n\n uint256 aggregateYieldFeeAmountRaw = _computeYieldFeesDue(\n poolData,\n packedBalance.getBalanceDerived(),\n i,\n aggregateYieldFeePercentage\n );\n\n if (aggregateYieldFeeAmountRaw > 0) {\n updateRawAndLiveBalance(poolData, i, balanceRaw - aggregateYieldFeeAmountRaw, roundingDirection);\n }\n }\n }\n }\n\n function syncPoolBalancesAndFees(\n PoolData memory poolData,\n mapping(uint256 tokenIndex => bytes32 packedTokenBalance) storage poolTokenBalances,\n mapping(IERC20 token => bytes32 packedFeeAmounts) storage poolAggregateProtocolFeeAmounts\n ) internal {\n uint256 numTokens = poolData.balancesRaw.length;\n\n for (uint256 i = 0; i < numTokens; ++i) {\n IERC20 token = poolData.tokens[i];\n bytes32 packedBalances = poolTokenBalances[i];\n uint256 storedBalanceRaw = packedBalances.getBalanceRaw();\n\n // `poolData` now has balances updated with yield fees.\n // If yield fees are not 0, then the stored balance is greater than the one in memory.\n if (storedBalanceRaw > poolData.balancesRaw[i]) {\n // Both Swap and Yield fees are stored together in a `PackedTokenBalance`.\n // We have designated \"Derived\" the derived half for Yield fee storage.\n bytes32 packedProtocolFeeAmounts = poolAggregateProtocolFeeAmounts[token];\n poolAggregateProtocolFeeAmounts[token] = packedProtocolFeeAmounts.setBalanceDerived(\n packedProtocolFeeAmounts.getBalanceDerived() + (storedBalanceRaw - poolData.balancesRaw[i])\n );\n }\n\n poolTokenBalances[i] = PackedTokenBalance.toPackedBalance(\n poolData.balancesRaw[i],\n poolData.balancesLiveScaled18[i]\n );\n }\n }\n\n /**\n * @dev This is typically called after a reentrant callback (e.g., a \"before\" liquidity operation callback),\n * to refresh the poolData struct with any balances (or rates) that might have changed.\n *\n * Preconditions: tokenConfig, balancesRaw, and decimalScalingFactors must be current in `poolData`.\n * Side effects: mutates tokenRates, balancesLiveScaled18 in `poolData`.\n */\n function reloadBalancesAndRates(\n PoolData memory poolData,\n mapping(uint256 tokenIndex => bytes32 packedTokenBalance) storage poolTokenBalances,\n Rounding roundingDirection\n ) internal view {\n uint256 numTokens = poolData.tokens.length;\n\n // It's possible a reentrant hook changed the raw balances in Vault storage.\n // Update them before computing the live balances.\n bytes32 packedBalance;\n\n for (uint256 i = 0; i < numTokens; ++i) {\n poolData.tokenRates[i] = getTokenRate(poolData.tokenInfo[i]);\n\n packedBalance = poolTokenBalances[i];\n\n // Note the order dependency. This requires up-to-date tokenRate for the token at index `i` in `poolData`.\n updateRawAndLiveBalance(poolData, i, packedBalance.getBalanceRaw(), roundingDirection);\n }\n }\n\n function getTokenRate(TokenInfo memory tokenInfo) internal view returns (uint256 rate) {\n TokenType tokenType = tokenInfo.tokenType;\n\n if (tokenType == TokenType.STANDARD) {\n rate = FixedPoint.ONE;\n } else if (tokenType == TokenType.WITH_RATE) {\n rate = tokenInfo.rateProvider.getRate();\n } else {\n revert IVaultErrors.InvalidTokenConfiguration();\n }\n }\n\n function updateRawAndLiveBalance(\n PoolData memory poolData,\n uint256 tokenIndex,\n uint256 newRawBalance,\n Rounding roundingDirection\n ) internal pure {\n poolData.balancesRaw[tokenIndex] = newRawBalance;\n\n function(uint256, uint256, uint256) internal pure returns (uint256) _upOrDown = roundingDirection ==\n Rounding.ROUND_UP\n ? ScalingHelpers.toScaled18ApplyRateRoundUp\n : ScalingHelpers.toScaled18ApplyRateRoundDown;\n\n poolData.balancesLiveScaled18[tokenIndex] = _upOrDown(\n newRawBalance,\n poolData.decimalScalingFactors[tokenIndex],\n poolData.tokenRates[tokenIndex]\n );\n }\n\n // solhint-disable-next-line private-vars-leading-underscore\n function _computeYieldFeesDue(\n PoolData memory poolData,\n uint256 lastLiveBalance,\n uint256 tokenIndex,\n uint256 aggregateYieldFeePercentage\n ) internal pure returns (uint256 aggregateYieldFeeAmountRaw) {\n uint256 currentLiveBalance = poolData.balancesLiveScaled18[tokenIndex];\n\n // Do not charge fees if rates go down. If the rate were to go up, down, and back up again, protocol fees\n // would be charged multiple times on the \"same\" yield. For tokens subject to yield fees, this should not\n // happen, or at least be very rare. It can be addressed for known volatile rates by setting the yield fee\n // exempt flag on registration, or compensated off-chain if there is an incident with a normally\n // well-behaved rate provider.\n if (currentLiveBalance > lastLiveBalance) {\n unchecked {\n // Magnitudes are checked above, so it's safe to do unchecked math here.\n uint256 aggregateYieldFeeAmountScaled18 = (currentLiveBalance - lastLiveBalance).mulUp(\n aggregateYieldFeePercentage\n );\n\n // A pool is subject to yield fees if poolSubjectToYieldFees is true, meaning that\n // `protocolYieldFeePercentage > 0`. So, we don't need to check this again in here, saving some gas.\n aggregateYieldFeeAmountRaw = aggregateYieldFeeAmountScaled18.toRawUndoRateRoundDown(\n poolData.decimalScalingFactors[tokenIndex],\n poolData.tokenRates[tokenIndex]\n );\n }\n }\n }\n}\n"},"contracts/lib/VaultStateLib.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { WordCodec } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\";\n\n// @notice Custom type to store the Vault configuration.\ntype VaultStateBits is bytes32;\n\n/// @notice Helper functions for reading and writing the `VaultState` struct.\nlibrary VaultStateLib {\n using WordCodec for bytes32;\n\n // Bit offsets for the Vault state flags.\n uint256 public constant QUERY_DISABLED_OFFSET = 0;\n uint256 public constant VAULT_PAUSED_OFFSET = QUERY_DISABLED_OFFSET + 1;\n uint256 public constant BUFFER_PAUSED_OFFSET = VAULT_PAUSED_OFFSET + 1;\n\n function isQueryDisabled(VaultStateBits config) internal pure returns (bool) {\n return VaultStateBits.unwrap(config).decodeBool(QUERY_DISABLED_OFFSET);\n }\n\n function setQueryDisabled(VaultStateBits config, bool value) internal pure returns (VaultStateBits) {\n return VaultStateBits.wrap(VaultStateBits.unwrap(config).insertBool(value, QUERY_DISABLED_OFFSET));\n }\n\n function isVaultPaused(VaultStateBits config) internal pure returns (bool) {\n return VaultStateBits.unwrap(config).decodeBool(VAULT_PAUSED_OFFSET);\n }\n\n function setVaultPaused(VaultStateBits config, bool value) internal pure returns (VaultStateBits) {\n return VaultStateBits.wrap(VaultStateBits.unwrap(config).insertBool(value, VAULT_PAUSED_OFFSET));\n }\n\n function areBuffersPaused(VaultStateBits config) internal pure returns (bool) {\n return VaultStateBits.unwrap(config).decodeBool(BUFFER_PAUSED_OFFSET);\n }\n\n function setBuffersPaused(VaultStateBits config, bool value) internal pure returns (VaultStateBits) {\n return VaultStateBits.wrap(VaultStateBits.unwrap(config).insertBool(value, BUFFER_PAUSED_OFFSET));\n }\n}\n"},"contracts/token/ERC20MultiToken.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20Errors } from \"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\";\n\nimport { IERC20MultiTokenErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol\";\n\nimport { EVMCallModeHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\";\n\nimport { BalancerPoolToken } from \"../BalancerPoolToken.sol\";\n\n/**\n * @notice Store Token data and handle accounting for pool tokens in the Vault.\n * @dev The ERC20MultiToken is an ERC20-focused multi-token implementation that is fully compatible with the ERC20 API\n * on the token side. It also allows for the minting and burning of tokens on the multi-token side.\n */\nabstract contract ERC20MultiToken is IERC20Errors, IERC20MultiTokenErrors {\n // Minimum total supply amount.\n uint256 internal constant _POOL_MINIMUM_TOTAL_SUPPLY = 1e6;\n\n /**\n * @notice Pool tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\n * @param pool The pool token being transferred\n * @param from The token source\n * @param to The token destination\n * @param value The number of tokens\n */\n event Transfer(address indexed pool, address indexed from, address indexed to, uint256 value);\n\n /**\n * @notice The allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\n * @param pool The pool token receiving the allowance\n * @param owner The token holder\n * @param spender The account being authorized to spend a given amount of the token\n * @param value The number of tokens spender is authorized to transfer from owner\n */\n event Approval(address indexed pool, address indexed owner, address indexed spender, uint256 value);\n\n // Users' pool token (BPT) balances.\n mapping(address token => mapping(address owner => uint256 balance)) private _balances;\n\n // Users' pool token (BPT) allowances.\n mapping(address token => mapping(address owner => mapping(address spender => uint256 allowance)))\n private _allowances;\n\n // Total supply of all pool tokens (BPT). These are tokens minted and burned by the Vault.\n // The Vault balances of regular pool tokens are stored in `_reservesOf`.\n mapping(address token => uint256 totalSupply) private _totalSupplyOf;\n\n function _totalSupply(address pool) internal view returns (uint256) {\n return _totalSupplyOf[pool];\n }\n\n function _balanceOf(address pool, address account) internal view returns (uint256) {\n return _balances[pool][account];\n }\n\n function _allowance(address pool, address owner, address spender) internal view returns (uint256) {\n // Owner can spend anything without approval\n if (owner == spender) {\n return type(uint256).max;\n } else {\n return _allowances[pool][owner][spender];\n }\n }\n\n /**\n * @dev DO NOT CALL THIS METHOD!\n * Only `removeLiquidity` in the Vault may call this - in a query context - to allow burning tokens the caller\n * does not have.\n */\n function _queryModeBalanceIncrease(address pool, address to, uint256 amount) internal {\n // Enforce that this can only be called in a read-only, query context.\n if (EVMCallModeHelpers.isStaticCall() == false) {\n revert EVMCallModeHelpers.NotStaticCall();\n }\n\n // Increase `to` balance to ensure the burn function succeeds during query.\n _balances[address(pool)][to] += amount;\n }\n\n function _mint(address pool, address to, uint256 amount) internal {\n if (to == address(0)) {\n revert ERC20InvalidReceiver(to);\n }\n\n uint256 newTotalSupply = _totalSupplyOf[pool] + amount;\n unchecked {\n // Overflow is not possible. balance + amount is at most totalSupply + amount, which is checked above.\n _balances[pool][to] += amount;\n }\n\n _ensurePoolMinimumTotalSupply(newTotalSupply);\n\n _totalSupplyOf[pool] = newTotalSupply;\n\n emit Transfer(pool, address(0), to, amount);\n\n // We also emit the \"transfer\" event on the pool token to ensure full compliance with the ERC20 standard.\n BalancerPoolToken(pool).emitTransfer(address(0), to, amount);\n }\n\n function _ensurePoolMinimumTotalSupply(uint256 newTotalSupply) internal pure {\n if (newTotalSupply < _POOL_MINIMUM_TOTAL_SUPPLY) {\n revert PoolTotalSupplyTooLow(newTotalSupply);\n }\n }\n\n function _mintMinimumSupplyReserve(address pool) internal {\n _totalSupplyOf[pool] += _POOL_MINIMUM_TOTAL_SUPPLY;\n unchecked {\n // Overflow is not possible. balance + amount is at most totalSupply + amount, which is checked above.\n _balances[pool][address(0)] += _POOL_MINIMUM_TOTAL_SUPPLY;\n }\n emit Transfer(pool, address(0), address(0), _POOL_MINIMUM_TOTAL_SUPPLY);\n\n // We also emit the \"transfer\" event on the pool token to ensure full compliance with the ERC20 standard.\n BalancerPoolToken(pool).emitTransfer(address(0), address(0), _POOL_MINIMUM_TOTAL_SUPPLY);\n }\n\n function _burn(address pool, address from, uint256 amount) internal {\n if (from == address(0)) {\n revert ERC20InvalidSender(from);\n }\n\n uint256 accountBalance = _balances[pool][from];\n if (amount > accountBalance) {\n revert ERC20InsufficientBalance(from, accountBalance, amount);\n }\n\n unchecked {\n _balances[pool][from] = accountBalance - amount;\n }\n uint256 newTotalSupply = _totalSupplyOf[pool] - amount;\n\n _ensurePoolMinimumTotalSupply(newTotalSupply);\n\n _totalSupplyOf[pool] = newTotalSupply;\n\n // We also emit the \"transfer\" event on the pool token to ensure full compliance with the ERC20 standard.\n // If this function fails we keep going, as this is used in recovery mode.\n // Well-behaved pools will just emit an event here, so they should never fail.\n try BalancerPoolToken(pool).emitTransfer(from, address(0), amount) {} catch {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n // Emit the internal event last to spend some gas after try / catch.\n emit Transfer(pool, from, address(0), amount);\n }\n\n function _transfer(address pool, address from, address to, uint256 amount) internal {\n if (from == address(0)) {\n revert ERC20InvalidSender(from);\n }\n\n if (to == address(0)) {\n revert ERC20InvalidReceiver(to);\n }\n\n uint256 fromBalance = _balances[pool][from];\n if (amount > fromBalance) {\n revert ERC20InsufficientBalance(from, fromBalance, amount);\n }\n\n unchecked {\n _balances[pool][from] = fromBalance - amount;\n // Overflow is not possible. The sum of all balances is capped by totalSupply, and that sum is preserved by\n // decrementing then incrementing.\n _balances[pool][to] += amount;\n }\n\n emit Transfer(pool, from, to, amount);\n\n // We also emit the \"transfer\" event on the pool token to ensure full compliance with the ERC20 standard.\n BalancerPoolToken(pool).emitTransfer(from, to, amount);\n }\n\n function _approve(address pool, address owner, address spender, uint256 amount) internal {\n if (owner == address(0)) {\n revert ERC20InvalidApprover(owner);\n }\n\n if (spender == address(0)) {\n revert ERC20InvalidSpender(spender);\n }\n\n _allowances[pool][owner][spender] = amount;\n\n // We also emit the \"approve\" event on the pool token to ensure full compliance with the ERC20 standard.\n // If this function fails we keep going, as this is used in recovery mode.\n // Well-behaved pools will just emit an event here, so they should never fail.\n try BalancerPoolToken(pool).emitApproval(owner, spender, amount) {} catch {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n // Emit the internal event last to spend some gas after try / catch.\n emit Approval(pool, owner, spender, amount);\n }\n\n function _spendAllowance(address pool, address owner, address spender, uint256 amount) internal {\n uint256 currentAllowance = _allowance(pool, owner, spender);\n if (currentAllowance != type(uint256).max) {\n if (amount > currentAllowance) {\n revert ERC20InsufficientAllowance(spender, currentAllowance, amount);\n }\n\n unchecked {\n _approve(pool, owner, spender, currentAllowance - amount);\n }\n }\n }\n}\n"},"contracts/Vault.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\nimport { Proxy } from \"@openzeppelin/contracts/proxy/Proxy.sol\";\n\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVaultExtension } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\";\nimport { IPoolLiquidity } from \"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol\";\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVaultAdmin } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\";\nimport { IVaultMain } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\";\nimport { IBasePool } from \"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\";\nimport { IHooks } from \"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { StorageSlotExtension } from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\";\nimport { PackedTokenBalance } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\";\nimport { ScalingHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\";\nimport { CastingHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\";\nimport { BufferHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol\";\nimport { InputHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\nimport {\n TransientStorageHelpers\n} from \"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\";\n\nimport { VaultStateLib, VaultStateBits } from \"./lib/VaultStateLib.sol\";\nimport { HooksConfigLib } from \"./lib/HooksConfigLib.sol\";\nimport { PoolConfigLib } from \"./lib/PoolConfigLib.sol\";\nimport { PoolDataLib } from \"./lib/PoolDataLib.sol\";\nimport { BasePoolMath } from \"./BasePoolMath.sol\";\nimport { VaultCommon } from \"./VaultCommon.sol\";\n\ncontract Vault is IVaultMain, VaultCommon, Proxy {\n using PackedTokenBalance for bytes32;\n using BufferHelpers for bytes32;\n using InputHelpers for uint256;\n using FixedPoint for *;\n using Address for *;\n using CastingHelpers for uint256[];\n using SafeCast for *;\n using SafeERC20 for IERC20;\n using PoolConfigLib for PoolConfigBits;\n using HooksConfigLib for PoolConfigBits;\n using VaultStateLib for VaultStateBits;\n using ScalingHelpers for *;\n using TransientStorageHelpers for *;\n using StorageSlotExtension for *;\n using PoolDataLib for PoolData;\n\n // Local reference to the Proxy pattern Vault extension contract.\n IVaultExtension private immutable _vaultExtension;\n\n constructor(IVaultExtension vaultExtension, IAuthorizer authorizer, IProtocolFeeController protocolFeeController) {\n if (address(vaultExtension.vault()) != address(this)) {\n revert WrongVaultExtensionDeployment();\n }\n\n if (address(protocolFeeController.vault()) != address(this)) {\n revert WrongProtocolFeeControllerDeployment();\n }\n\n _vaultExtension = vaultExtension;\n _protocolFeeController = protocolFeeController;\n\n _vaultPauseWindowEndTime = IVaultAdmin(address(vaultExtension)).getPauseWindowEndTime();\n _vaultBufferPeriodDuration = IVaultAdmin(address(vaultExtension)).getBufferPeriodDuration();\n _vaultBufferPeriodEndTime = IVaultAdmin(address(vaultExtension)).getBufferPeriodEndTime();\n\n _MINIMUM_TRADE_AMOUNT = IVaultAdmin(address(vaultExtension)).getMinimumTradeAmount();\n _MINIMUM_WRAP_AMOUNT = IVaultAdmin(address(vaultExtension)).getMinimumWrapAmount();\n\n _authorizer = authorizer;\n }\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @dev This modifier is used for functions that temporarily modify the token deltas\n * of the Vault, but expect to revert or settle balances by the end of their execution.\n * It works by ensuring that the balances are properly settled by the time the last\n * operation is executed.\n *\n * This is useful for functions like `unlock`, which perform arbitrary external calls:\n * we can keep track of temporary deltas changes, and make sure they are settled by the\n * time the external call is complete.\n */\n modifier transient() {\n bool isUnlockedBefore = _isUnlocked().tload();\n\n if (isUnlockedBefore == false) {\n _isUnlocked().tstore(true);\n }\n\n // The caller does everything here and has to settle all outstanding balances.\n _;\n\n if (isUnlockedBefore == false) {\n if (_nonZeroDeltaCount().tload() != 0) {\n revert BalanceNotSettled();\n }\n\n _isUnlocked().tstore(false);\n\n // If a user adds liquidity to a pool, then does a proportional withdrawal from that pool during the same\n // interaction, the system charges a \"round-trip\" fee on the withdrawal. This fee makes it harder for an\n // user to add liquidity to a pool using a virtually infinite flash loan, swapping in the same pool in a way\n // that benefits him and removes liquidity in the same transaction, which is not a valid use case.\n //\n // Here we introduce the \"session\" concept, to prevent this fee from being charged accidentally. For\n // example, if an aggregator or account abstraction contract bundled several unrelated operations in the\n // same transaction that involved the same pool with different senders, the guardrail could be triggered\n // for a user doing a simple withdrawal. If proper limits were set, the whole transaction would revert,\n // and if they were not, the user would be unfairly \"taxed.\"\n //\n // Defining an \"interaction\" this way - as a single `unlock` call vs. an entire transaction - prevents the\n // guardrail from being triggered in the cases described above.\n\n // Increase session counter after locking the Vault.\n _sessionIdSlot().tIncrement();\n }\n }\n\n /// @inheritdoc IVaultMain\n function unlock(bytes calldata data) external transient returns (bytes memory result) {\n return (msg.sender).functionCall(data);\n }\n\n /// @inheritdoc IVaultMain\n function settle(IERC20 token, uint256 amountHint) external nonReentrant onlyWhenUnlocked returns (uint256 credit) {\n uint256 reservesBefore = _reservesOf[token];\n uint256 currentReserves = token.balanceOf(address(this));\n _reservesOf[token] = currentReserves;\n credit = currentReserves - reservesBefore;\n\n // If the given hint is equal or greater to the reserve difference, we just take the actual reserve difference\n // as the paid amount; the actual balance of the tokens in the Vault is what matters here.\n if (credit > amountHint) {\n // If the difference in reserves is higher than the amount claimed to be paid by the caller, there was some\n // leftover that had been sent to the Vault beforehand, which was not incorporated into the reserves.\n // In that case, we simply discard the leftover by considering the given hint as the amount paid.\n // In turn, this gives the caller credit for the given amount hint, which is what the caller is expecting.\n credit = amountHint;\n }\n\n _supplyCredit(token, credit);\n }\n\n /// @inheritdoc IVaultMain\n function sendTo(IERC20 token, address to, uint256 amount) external nonReentrant onlyWhenUnlocked {\n _takeDebt(token, amount);\n _reservesOf[token] -= amount;\n\n token.safeTransfer(to, amount);\n }\n\n /*******************************************************************************\n Pool Operations\n *******************************************************************************/\n\n // The Vault performs all upscaling and downscaling (due to token decimals, rates, etc.), so that the pools\n // don't have to. However, scaling inevitably leads to rounding errors, so we take great care to ensure that\n // any rounding errors favor the Vault. An important invariant of the system is that there is no repeatable\n // path where tokensOut > tokensIn.\n //\n // In general, this means rounding up any values entering the Vault, and rounding down any values leaving\n // the Vault, so that external users either pay a little extra or receive a little less in the case of a\n // rounding error.\n //\n // However, it's not always straightforward to determine the correct rounding direction, given the presence\n // and complexity of intermediate steps. An \"amountIn\" sounds like it should be rounded up: but only if that\n // is the amount actually being transferred. If instead it is an amount sent to the pool math, where rounding\n // up would result in a *higher* calculated amount out, that would favor the user instead of the Vault. So in\n // that case, amountIn should be rounded down.\n //\n // See comments justifying the rounding direction in each case.\n //\n // This reasoning applies to Weighted Pool math, and is likely to apply to others as well, but of course\n // it's possible a new pool type might not conform. Duplicate the tests for new pool types (e.g., Stable Math).\n // Also, the final code should ensure that we are not relying entirely on the rounding directions here,\n // but have enough additional layers (e.g., minimum amounts, buffer wei on all transfers) to guarantee safety,\n // even if it turns out these directions are incorrect for a new pool type.\n\n /*******************************************************************************\n Swaps\n *******************************************************************************/\n\n /// @inheritdoc IVaultMain\n function swap(\n VaultSwapParams memory vaultSwapParams\n )\n external\n onlyWhenUnlocked\n withInitializedPool(vaultSwapParams.pool)\n returns (uint256 amountCalculated, uint256 amountIn, uint256 amountOut)\n {\n _ensureUnpaused(vaultSwapParams.pool);\n\n if (vaultSwapParams.amountGivenRaw == 0) {\n revert AmountGivenZero();\n }\n\n if (vaultSwapParams.tokenIn == vaultSwapParams.tokenOut) {\n revert CannotSwapSameToken();\n }\n\n // `_loadPoolDataUpdatingBalancesAndYieldFees` is non-reentrant, as it updates storage as well\n // as filling in poolData in memory. Since the swap hooks are reentrant and could do anything, including\n // change these balances, we cannot defer settlement until `_swap`.\n //\n // Sets all fields in `poolData`. Side effects: updates `_poolTokenBalances`, `_aggregateFeeAmounts`\n // in storage.\n PoolData memory poolData = _loadPoolDataUpdatingBalancesAndYieldFees(vaultSwapParams.pool, Rounding.ROUND_DOWN);\n SwapState memory swapState = _loadSwapState(vaultSwapParams, poolData);\n PoolSwapParams memory poolSwapParams = _buildPoolSwapParams(vaultSwapParams, swapState, poolData);\n\n if (poolData.poolConfigBits.shouldCallBeforeSwap()) {\n HooksConfigLib.callBeforeSwapHook(\n poolSwapParams,\n vaultSwapParams.pool,\n _hooksContracts[vaultSwapParams.pool]\n );\n\n // The call to `onBeforeSwap` could potentially update token rates and balances.\n // We update `poolData.tokenRates`, `poolData.rawBalances` and `poolData.balancesLiveScaled18`\n // to ensure the `onSwap` and `onComputeDynamicSwapFeePercentage` are called with the current values.\n poolData.reloadBalancesAndRates(_poolTokenBalances[vaultSwapParams.pool], Rounding.ROUND_DOWN);\n\n // Also update amountGivenScaled18, as it will now be used in the swap, and the rates might have changed.\n swapState.amountGivenScaled18 = _computeAmountGivenScaled18(vaultSwapParams, poolData, swapState);\n\n poolSwapParams = _buildPoolSwapParams(vaultSwapParams, swapState, poolData);\n }\n\n // Note that this must be called *after* the before hook, to guarantee that the swap params are the same\n // as those passed to the main operation.\n //\n // At this point, the static swap fee percentage is loaded in the `swapState` as the default, to be used\n // unless the pool has a dynamic swap fee. It is also passed into the hook, to support common cases\n // where the dynamic fee computation logic uses it.\n if (poolData.poolConfigBits.shouldCallComputeDynamicSwapFee()) {\n swapState.swapFeePercentage = HooksConfigLib.callComputeDynamicSwapFeeHook(\n poolSwapParams,\n vaultSwapParams.pool,\n swapState.swapFeePercentage,\n _hooksContracts[vaultSwapParams.pool]\n );\n }\n\n // Non-reentrant call that updates accounting.\n // The following side-effects are important to note:\n // PoolData balancesRaw and balancesLiveScaled18 are adjusted for swap amounts and fees inside of _swap.\n uint256 amountCalculatedScaled18;\n (amountCalculated, amountCalculatedScaled18, amountIn, amountOut) = _swap(\n vaultSwapParams,\n swapState,\n poolData,\n poolSwapParams\n );\n\n // The new amount calculated is 'amountCalculated + delta'. If the underlying hook fails, or limits are\n // violated, `onAfterSwap` will revert. Uses msg.sender as the Router (the contract that called the Vault).\n if (poolData.poolConfigBits.shouldCallAfterSwap()) {\n // `hooksContract` needed to fix stack too deep.\n IHooks hooksContract = _hooksContracts[vaultSwapParams.pool];\n\n amountCalculated = poolData.poolConfigBits.callAfterSwapHook(\n amountCalculatedScaled18,\n amountCalculated,\n msg.sender,\n vaultSwapParams,\n swapState,\n poolData,\n hooksContract\n );\n }\n\n if (vaultSwapParams.kind == SwapKind.EXACT_IN) {\n amountOut = amountCalculated;\n } else {\n amountIn = amountCalculated;\n }\n }\n\n function _loadSwapState(\n VaultSwapParams memory vaultSwapParams,\n PoolData memory poolData\n ) private pure returns (SwapState memory swapState) {\n swapState.indexIn = _findTokenIndex(poolData.tokens, vaultSwapParams.tokenIn);\n swapState.indexOut = _findTokenIndex(poolData.tokens, vaultSwapParams.tokenOut);\n\n swapState.amountGivenScaled18 = _computeAmountGivenScaled18(vaultSwapParams, poolData, swapState);\n swapState.swapFeePercentage = poolData.poolConfigBits.getStaticSwapFeePercentage();\n }\n\n function _buildPoolSwapParams(\n VaultSwapParams memory vaultSwapParams,\n SwapState memory swapState,\n PoolData memory poolData\n ) internal view returns (PoolSwapParams memory) {\n // Uses msg.sender as the Router (the contract that called the Vault).\n return\n PoolSwapParams({\n kind: vaultSwapParams.kind,\n amountGivenScaled18: swapState.amountGivenScaled18,\n balancesScaled18: poolData.balancesLiveScaled18,\n indexIn: swapState.indexIn,\n indexOut: swapState.indexOut,\n router: msg.sender,\n userData: vaultSwapParams.userData\n });\n }\n\n /**\n * @dev Preconditions: decimalScalingFactors and tokenRates in `poolData` must be current.\n * Uses amountGivenRaw and kind from `vaultSwapParams`.\n */\n function _computeAmountGivenScaled18(\n VaultSwapParams memory vaultSwapParams,\n PoolData memory poolData,\n SwapState memory swapState\n ) private pure returns (uint256) {\n // If the amountGiven is entering the pool math (ExactIn), round down, since a lower apparent amountIn leads\n // to a lower calculated amountOut, favoring the pool.\n return\n vaultSwapParams.kind == SwapKind.EXACT_IN\n ? vaultSwapParams.amountGivenRaw.toScaled18ApplyRateRoundDown(\n poolData.decimalScalingFactors[swapState.indexIn],\n poolData.tokenRates[swapState.indexIn]\n )\n : vaultSwapParams.amountGivenRaw.toScaled18ApplyRateRoundUp(\n poolData.decimalScalingFactors[swapState.indexOut],\n // If the swap is ExactOut, the amountGiven is the amount of tokenOut. So, we want to use the rate\n // rounded up to calculate the amountGivenScaled18, because if this value is bigger, the\n // amountCalculatedRaw will be bigger, implying that the user will pay for any rounding\n // inconsistency, and not the Vault.\n poolData.tokenRates[swapState.indexOut].computeRateRoundUp()\n );\n }\n\n /**\n * @dev Auxiliary struct to prevent stack-too-deep issues inside `_swap` function.\n * Total swap fees include LP (pool) fees and aggregate (protocol + pool creator) fees.\n */\n struct SwapInternalLocals {\n uint256 totalSwapFeeAmountScaled18;\n uint256 totalSwapFeeAmountRaw;\n uint256 aggregateFeeAmountRaw;\n }\n\n /**\n * @dev Main non-reentrant portion of the swap, which calls the pool hook and updates accounting. `vaultSwapParams`\n * are passed to the pool's `onSwap` hook.\n *\n * Preconditions: complete `SwapParams`, `SwapState`, and `PoolData`.\n * Side effects: mutates balancesRaw and balancesLiveScaled18 in `poolData`.\n * Updates `_aggregateFeeAmounts`, and `_poolTokenBalances` in storage.\n * Emits Swap event.\n */\n function _swap(\n VaultSwapParams memory vaultSwapParams,\n SwapState memory swapState,\n PoolData memory poolData,\n PoolSwapParams memory poolSwapParams\n )\n internal\n nonReentrant\n returns (\n uint256 amountCalculatedRaw,\n uint256 amountCalculatedScaled18,\n uint256 amountInRaw,\n uint256 amountOutRaw\n )\n {\n SwapInternalLocals memory locals;\n\n if (vaultSwapParams.kind == SwapKind.EXACT_IN) {\n // Round up to avoid losses during precision loss.\n locals.totalSwapFeeAmountScaled18 = poolSwapParams.amountGivenScaled18.mulUp(swapState.swapFeePercentage);\n poolSwapParams.amountGivenScaled18 -= locals.totalSwapFeeAmountScaled18;\n }\n\n _ensureValidSwapAmount(poolSwapParams.amountGivenScaled18);\n\n // Perform the swap request hook and compute the new balances for 'token in' and 'token out' after the swap.\n amountCalculatedScaled18 = IBasePool(vaultSwapParams.pool).onSwap(poolSwapParams);\n\n _ensureValidSwapAmount(amountCalculatedScaled18);\n\n // Note that balances are kept in memory, and are not fully computed until the `setPoolBalances` below.\n // Intervening code cannot read balances from storage, as they are temporarily out-of-sync here. This function\n // is nonReentrant, to guard against read-only reentrancy issues.\n\n // (1) and (2): get raw amounts and check limits.\n if (vaultSwapParams.kind == SwapKind.EXACT_IN) {\n // Restore the original input value; this function should not mutate memory inputs.\n // At this point swap fee amounts have already been computed for EXACT_IN.\n poolSwapParams.amountGivenScaled18 = swapState.amountGivenScaled18;\n\n // For `ExactIn` the amount calculated is leaving the Vault, so we round down.\n amountCalculatedRaw = amountCalculatedScaled18.toRawUndoRateRoundDown(\n poolData.decimalScalingFactors[swapState.indexOut],\n // If the swap is ExactIn, the amountCalculated is the amount of tokenOut. So, we want to use the rate\n // rounded up to calculate the amountCalculatedRaw, because scale down (undo rate) is a division, the\n // larger the rate, the smaller the amountCalculatedRaw. So, any rounding imprecision will stay in the\n // Vault and not be drained by the user.\n poolData.tokenRates[swapState.indexOut].computeRateRoundUp()\n );\n\n (amountInRaw, amountOutRaw) = (vaultSwapParams.amountGivenRaw, amountCalculatedRaw);\n\n if (amountOutRaw < vaultSwapParams.limitRaw) {\n revert SwapLimit(amountOutRaw, vaultSwapParams.limitRaw);\n }\n } else {\n // To ensure symmetry with EXACT_IN, the swap fee used by ExactOut is\n // `amountCalculated * fee% / (100% - fee%)`. Add it to the calculated amountIn. Round up to avoid losing\n // value due to precision loss. Note that if the `swapFeePercentage` were 100% here, this would revert with\n // division by zero. We protect against this by ensuring in PoolConfigLib and HooksConfigLib that all swap\n // fees (static, dynamic, pool creator, and aggregate) are less than 100%.\n locals.totalSwapFeeAmountScaled18 = amountCalculatedScaled18.mulDivUp(\n swapState.swapFeePercentage,\n swapState.swapFeePercentage.complement()\n );\n\n amountCalculatedScaled18 += locals.totalSwapFeeAmountScaled18;\n\n // For `ExactOut` the amount calculated is entering the Vault, so we round up.\n amountCalculatedRaw = amountCalculatedScaled18.toRawUndoRateRoundUp(\n poolData.decimalScalingFactors[swapState.indexIn],\n poolData.tokenRates[swapState.indexIn]\n );\n\n (amountInRaw, amountOutRaw) = (amountCalculatedRaw, vaultSwapParams.amountGivenRaw);\n\n if (amountInRaw > vaultSwapParams.limitRaw) {\n revert SwapLimit(amountInRaw, vaultSwapParams.limitRaw);\n }\n }\n\n // 3) Deltas: debit for token in, credit for token out.\n _takeDebt(vaultSwapParams.tokenIn, amountInRaw);\n _supplyCredit(vaultSwapParams.tokenOut, amountOutRaw);\n\n // 4) Compute and charge protocol and creator fees.\n // Note that protocol fee storage is updated before balance storage, as the final raw balances need to take\n // the fees into account.\n (locals.totalSwapFeeAmountRaw, locals.aggregateFeeAmountRaw) = _computeAndChargeAggregateSwapFees(\n poolData,\n locals.totalSwapFeeAmountScaled18,\n vaultSwapParams.pool,\n vaultSwapParams.tokenIn,\n swapState.indexIn\n );\n\n // 5) Pool balances: raw and live.\n\n poolData.updateRawAndLiveBalance(\n swapState.indexIn,\n poolData.balancesRaw[swapState.indexIn] + amountInRaw - locals.aggregateFeeAmountRaw,\n Rounding.ROUND_DOWN\n );\n poolData.updateRawAndLiveBalance(\n swapState.indexOut,\n poolData.balancesRaw[swapState.indexOut] - amountOutRaw,\n Rounding.ROUND_DOWN\n );\n\n // 6) Store pool balances, raw and live (only index in and out).\n mapping(uint256 tokenIndex => bytes32 packedTokenBalance) storage poolBalances = _poolTokenBalances[\n vaultSwapParams.pool\n ];\n poolBalances[swapState.indexIn] = PackedTokenBalance.toPackedBalance(\n poolData.balancesRaw[swapState.indexIn],\n poolData.balancesLiveScaled18[swapState.indexIn]\n );\n poolBalances[swapState.indexOut] = PackedTokenBalance.toPackedBalance(\n poolData.balancesRaw[swapState.indexOut],\n poolData.balancesLiveScaled18[swapState.indexOut]\n );\n\n // 7) Off-chain events.\n emit Swap(\n vaultSwapParams.pool,\n vaultSwapParams.tokenIn,\n vaultSwapParams.tokenOut,\n amountInRaw,\n amountOutRaw,\n swapState.swapFeePercentage,\n locals.totalSwapFeeAmountRaw\n );\n }\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /// @inheritdoc IVaultMain\n function addLiquidity(\n AddLiquidityParams memory params\n )\n external\n onlyWhenUnlocked\n withInitializedPool(params.pool)\n returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData)\n {\n // Round balances up when adding liquidity:\n // If proportional, higher balances = higher proportional amountsIn, favoring the pool.\n // If unbalanced, higher balances = lower invariant ratio with fees.\n // bptOut = supply * (ratio - 1), so lower ratio = less bptOut, favoring the pool.\n\n _ensureUnpaused(params.pool);\n _addLiquidityCalled().tSet(_sessionIdSlot().tload(), params.pool, true);\n\n // `_loadPoolDataUpdatingBalancesAndYieldFees` is non-reentrant, as it updates storage as well\n // as filling in poolData in memory. Since the add liquidity hooks are reentrant and could do anything,\n // including change these balances, we cannot defer settlement until `_addLiquidity`.\n //\n // Sets all fields in `poolData`. Side effects: updates `_poolTokenBalances`, and\n // `_aggregateFeeAmounts` in storage.\n PoolData memory poolData = _loadPoolDataUpdatingBalancesAndYieldFees(params.pool, Rounding.ROUND_UP);\n InputHelpers.ensureInputLengthMatch(poolData.tokens.length, params.maxAmountsIn.length);\n\n // Amounts are entering pool math, so round down.\n // Introducing `maxAmountsInScaled18` here and passing it through to _addLiquidity is not ideal,\n // but it avoids the even worse options of mutating amountsIn inside AddLiquidityParams,\n // or cluttering the AddLiquidityParams interface by adding amountsInScaled18.\n uint256[] memory maxAmountsInScaled18 = params.maxAmountsIn.copyToScaled18ApplyRateRoundDownArray(\n poolData.decimalScalingFactors,\n poolData.tokenRates\n );\n\n if (poolData.poolConfigBits.shouldCallBeforeAddLiquidity()) {\n HooksConfigLib.callBeforeAddLiquidityHook(\n msg.sender,\n maxAmountsInScaled18,\n params,\n poolData,\n _hooksContracts[params.pool]\n );\n // The hook might have altered the balances, so we need to read them again to ensure that the data\n // are fresh moving forward. We also need to upscale (adding liquidity, so round up) again.\n poolData.reloadBalancesAndRates(_poolTokenBalances[params.pool], Rounding.ROUND_UP);\n\n // Also update maxAmountsInScaled18, as the rates might have changed.\n maxAmountsInScaled18 = params.maxAmountsIn.copyToScaled18ApplyRateRoundDownArray(\n poolData.decimalScalingFactors,\n poolData.tokenRates\n );\n }\n\n // The bulk of the work is done here: the corresponding Pool hook is called, and the final balances\n // are computed. This function is non-reentrant, as it performs the accounting updates.\n //\n // Note that poolData is mutated to update the Raw and Live balances, so they are accurate when passed\n // into the AfterAddLiquidity hook.\n //\n // `amountsInScaled18` will be overwritten in the custom case, so we need to pass it back and forth to\n // encapsulate that logic in `_addLiquidity`.\n uint256[] memory amountsInScaled18;\n (amountsIn, amountsInScaled18, bptAmountOut, returnData) = _addLiquidity(\n poolData,\n params,\n maxAmountsInScaled18\n );\n\n // AmountsIn can be changed by onAfterAddLiquidity if the hook charges fees or gives discounts.\n // Uses msg.sender as the Router (the contract that called the Vault).\n if (poolData.poolConfigBits.shouldCallAfterAddLiquidity()) {\n // `hooksContract` needed to fix stack too deep.\n IHooks hooksContract = _hooksContracts[params.pool];\n\n amountsIn = poolData.poolConfigBits.callAfterAddLiquidityHook(\n msg.sender,\n amountsInScaled18,\n amountsIn,\n bptAmountOut,\n params,\n poolData,\n hooksContract\n );\n }\n }\n\n // Avoid \"stack too deep\" - without polluting the Add/RemoveLiquidity params interface.\n struct LiquidityLocals {\n uint256 numTokens;\n uint256 aggregateSwapFeeAmountRaw;\n uint256 tokenIndex;\n }\n\n /**\n * @dev Calls the appropriate pool hook and calculates the required inputs and outputs for the operation\n * considering the given kind, and updates the Vault's internal accounting. This includes:\n * - Setting pool balances\n * - Taking debt from the liquidity provider\n * - Minting pool tokens\n * - Emitting events\n *\n * It is non-reentrant, as it performs external calls and updates the Vault's state accordingly.\n */\n function _addLiquidity(\n PoolData memory poolData,\n AddLiquidityParams memory params,\n uint256[] memory maxAmountsInScaled18\n )\n internal\n nonReentrant\n returns (\n uint256[] memory amountsInRaw,\n uint256[] memory amountsInScaled18,\n uint256 bptAmountOut,\n bytes memory returnData\n )\n {\n LiquidityLocals memory locals;\n locals.numTokens = poolData.tokens.length;\n amountsInRaw = new uint256[](locals.numTokens);\n // `swapFeeAmounts` stores scaled18 amounts first, and is then reused to store raw amounts.\n uint256[] memory swapFeeAmounts;\n\n if (params.kind == AddLiquidityKind.PROPORTIONAL) {\n bptAmountOut = params.minBptAmountOut;\n // Initializes the swapFeeAmounts empty array (no swap fees on proportional add liquidity).\n swapFeeAmounts = new uint256[](locals.numTokens);\n\n amountsInScaled18 = BasePoolMath.computeProportionalAmountsIn(\n poolData.balancesLiveScaled18,\n _totalSupply(params.pool),\n bptAmountOut\n );\n } else if (params.kind == AddLiquidityKind.DONATION) {\n poolData.poolConfigBits.requireDonationEnabled();\n\n swapFeeAmounts = new uint256[](maxAmountsInScaled18.length);\n bptAmountOut = 0;\n amountsInScaled18 = maxAmountsInScaled18;\n } else if (params.kind == AddLiquidityKind.UNBALANCED) {\n poolData.poolConfigBits.requireUnbalancedLiquidityEnabled();\n\n amountsInScaled18 = maxAmountsInScaled18;\n // Deep copy given max amounts in raw to calculated amounts in raw to avoid scaling later, ensuring that\n // `maxAmountsIn` is preserved.\n ScalingHelpers.copyToArray(params.maxAmountsIn, amountsInRaw);\n\n (bptAmountOut, swapFeeAmounts) = BasePoolMath.computeAddLiquidityUnbalanced(\n poolData.balancesLiveScaled18,\n maxAmountsInScaled18,\n _totalSupply(params.pool),\n poolData.poolConfigBits.getStaticSwapFeePercentage(),\n IBasePool(params.pool)\n );\n } else if (params.kind == AddLiquidityKind.SINGLE_TOKEN_EXACT_OUT) {\n poolData.poolConfigBits.requireUnbalancedLiquidityEnabled();\n\n bptAmountOut = params.minBptAmountOut;\n locals.tokenIndex = InputHelpers.getSingleInputIndex(maxAmountsInScaled18);\n\n amountsInScaled18 = maxAmountsInScaled18;\n (amountsInScaled18[locals.tokenIndex], swapFeeAmounts) = BasePoolMath\n .computeAddLiquiditySingleTokenExactOut(\n poolData.balancesLiveScaled18,\n locals.tokenIndex,\n bptAmountOut,\n _totalSupply(params.pool),\n poolData.poolConfigBits.getStaticSwapFeePercentage(),\n IBasePool(params.pool)\n );\n } else if (params.kind == AddLiquidityKind.CUSTOM) {\n poolData.poolConfigBits.requireAddLiquidityCustomEnabled();\n\n // Uses msg.sender as the Router (the contract that called the Vault).\n (amountsInScaled18, bptAmountOut, swapFeeAmounts, returnData) = IPoolLiquidity(params.pool)\n .onAddLiquidityCustom(\n msg.sender,\n maxAmountsInScaled18,\n params.minBptAmountOut,\n poolData.balancesLiveScaled18,\n params.userData\n );\n } else {\n revert InvalidAddLiquidityKind();\n }\n\n // At this point we have the calculated BPT amount.\n if (bptAmountOut < params.minBptAmountOut) {\n revert BptAmountOutBelowMin(bptAmountOut, params.minBptAmountOut);\n }\n\n _ensureValidTradeAmount(bptAmountOut);\n\n for (uint256 i = 0; i < locals.numTokens; ++i) {\n uint256 amountInRaw;\n\n // 1) Calculate raw amount in.\n {\n uint256 amountInScaled18 = amountsInScaled18[i];\n _ensureValidTradeAmount(amountInScaled18);\n\n // If the value in memory is not set, convert scaled amount to raw.\n if (amountsInRaw[i] == 0) {\n // amountsInRaw are amounts actually entering the Pool, so we round up.\n // Do not mutate in place yet, as we need them scaled for the `onAfterAddLiquidity` hook.\n amountInRaw = amountInScaled18.toRawUndoRateRoundUp(\n poolData.decimalScalingFactors[i],\n poolData.tokenRates[i]\n );\n\n amountsInRaw[i] = amountInRaw;\n } else {\n // Exact in requests will have the raw amount in memory already, so we use it moving forward and\n // skip downscaling.\n amountInRaw = amountsInRaw[i];\n }\n }\n\n IERC20 token = poolData.tokens[i];\n\n // 2) Check limits for raw amounts.\n if (amountInRaw > params.maxAmountsIn[i]) {\n revert AmountInAboveMax(token, amountInRaw, params.maxAmountsIn[i]);\n }\n\n // 3) Deltas: Debit of token[i] for amountInRaw.\n _takeDebt(token, amountInRaw);\n\n // 4) Compute and charge protocol and creator fees.\n // swapFeeAmounts[i] is now raw instead of scaled.\n (swapFeeAmounts[i], locals.aggregateSwapFeeAmountRaw) = _computeAndChargeAggregateSwapFees(\n poolData,\n swapFeeAmounts[i],\n params.pool,\n token,\n i\n );\n\n // 5) Pool balances: raw and live.\n // We need regular balances to complete the accounting, and the upscaled balances\n // to use in the `after` hook later on.\n\n // A pool's token balance increases by amounts in after adding liquidity, minus fees.\n poolData.updateRawAndLiveBalance(\n i,\n poolData.balancesRaw[i] + amountInRaw - locals.aggregateSwapFeeAmountRaw,\n Rounding.ROUND_DOWN\n );\n }\n\n // 6) Store pool balances, raw and live.\n _writePoolBalancesToStorage(params.pool, poolData);\n\n // 7) BPT supply adjustment.\n // When adding liquidity, we must mint tokens concurrently with updating pool balances,\n // as the pool's math relies on totalSupply.\n _mint(address(params.pool), params.to, bptAmountOut);\n\n // 8) Off-chain events.\n emit LiquidityAdded(\n params.pool,\n params.to,\n params.kind,\n _totalSupply(params.pool),\n amountsInRaw,\n swapFeeAmounts\n );\n }\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /// @inheritdoc IVaultMain\n function removeLiquidity(\n RemoveLiquidityParams memory params\n )\n external\n onlyWhenUnlocked\n withInitializedPool(params.pool)\n returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData)\n {\n // Round down when removing liquidity:\n // If proportional, lower balances = lower proportional amountsOut, favoring the pool.\n // If unbalanced, lower balances = lower invariant ratio without fees.\n // bptIn = supply * (1 - ratio), so lower ratio = more bptIn, favoring the pool.\n _ensureUnpaused(params.pool);\n\n // `_loadPoolDataUpdatingBalancesAndYieldFees` is non-reentrant, as it updates storage as well\n // as filling in poolData in memory. Since the swap hooks are reentrant and could do anything, including\n // change these balances, we cannot defer settlement until `_removeLiquidity`.\n //\n // Sets all fields in `poolData`. Side effects: updates `_poolTokenBalances` and\n // `_aggregateFeeAmounts in storage.\n PoolData memory poolData = _loadPoolDataUpdatingBalancesAndYieldFees(params.pool, Rounding.ROUND_DOWN);\n InputHelpers.ensureInputLengthMatch(poolData.tokens.length, params.minAmountsOut.length);\n\n // Amounts are entering pool math; higher amounts would burn more BPT, so round up to favor the pool.\n // Do not mutate minAmountsOut, so that we can directly compare the raw limits later, without potentially\n // losing precision by scaling up and then down.\n uint256[] memory minAmountsOutScaled18 = params.minAmountsOut.copyToScaled18ApplyRateRoundUpArray(\n poolData.decimalScalingFactors,\n poolData.tokenRates\n );\n\n // Uses msg.sender as the Router (the contract that called the Vault).\n if (poolData.poolConfigBits.shouldCallBeforeRemoveLiquidity()) {\n HooksConfigLib.callBeforeRemoveLiquidityHook(\n minAmountsOutScaled18,\n msg.sender,\n params,\n poolData,\n _hooksContracts[params.pool]\n );\n\n // The hook might alter the balances, so we need to read them again to ensure that the data is\n // fresh moving forward. We also need to upscale (removing liquidity, so round down) again.\n poolData.reloadBalancesAndRates(_poolTokenBalances[params.pool], Rounding.ROUND_DOWN);\n\n // Also update minAmountsOutScaled18, as the rates might have changed.\n minAmountsOutScaled18 = params.minAmountsOut.copyToScaled18ApplyRateRoundUpArray(\n poolData.decimalScalingFactors,\n poolData.tokenRates\n );\n }\n\n // The bulk of the work is done here: the corresponding Pool hook is called, and the final balances\n // are computed. This function is non-reentrant, as it performs the accounting updates.\n //\n // Note that poolData is mutated to update the Raw and Live balances, so they are accurate when passed\n // into the AfterRemoveLiquidity hook.\n uint256[] memory amountsOutScaled18;\n (bptAmountIn, amountsOut, amountsOutScaled18, returnData) = _removeLiquidity(\n poolData,\n params,\n minAmountsOutScaled18\n );\n\n // AmountsOut can be changed by onAfterRemoveLiquidity if the hook charges fees or gives discounts.\n // Uses msg.sender as the Router (the contract that called the Vault).\n if (poolData.poolConfigBits.shouldCallAfterRemoveLiquidity()) {\n // `hooksContract` needed to fix stack too deep.\n IHooks hooksContract = _hooksContracts[params.pool];\n\n amountsOut = poolData.poolConfigBits.callAfterRemoveLiquidityHook(\n msg.sender,\n amountsOutScaled18,\n amountsOut,\n bptAmountIn,\n params,\n poolData,\n hooksContract\n );\n }\n }\n\n /**\n * @dev Calls the appropriate pool hook and calculates the required inputs and outputs for the operation\n * considering the given kind, and updates the Vault's internal accounting. This includes:\n * - Setting pool balances\n * - Supplying credit to the liquidity provider\n * - Burning pool tokens\n * - Emitting events\n *\n * It is non-reentrant, as it performs external calls and updates the Vault's state accordingly.\n */\n function _removeLiquidity(\n PoolData memory poolData,\n RemoveLiquidityParams memory params,\n uint256[] memory minAmountsOutScaled18\n )\n internal\n nonReentrant\n returns (\n uint256 bptAmountIn,\n uint256[] memory amountsOutRaw,\n uint256[] memory amountsOutScaled18,\n bytes memory returnData\n )\n {\n LiquidityLocals memory locals;\n locals.numTokens = poolData.tokens.length;\n amountsOutRaw = new uint256[](locals.numTokens);\n // `swapFeeAmounts` stores scaled18 amounts first, and is then reused to store raw amounts.\n uint256[] memory swapFeeAmounts;\n\n if (params.kind == RemoveLiquidityKind.PROPORTIONAL) {\n bptAmountIn = params.maxBptAmountIn;\n swapFeeAmounts = new uint256[](locals.numTokens);\n amountsOutScaled18 = BasePoolMath.computeProportionalAmountsOut(\n poolData.balancesLiveScaled18,\n _totalSupply(params.pool),\n bptAmountIn\n );\n\n // Charge round-trip fee if liquidity was added to this pool in the same unlock call; this is not really a\n // valid use case, and may be an attack. Use caution when removing liquidity through a Safe or other\n // multisig / non-EOA address. Use \"sign and execute,\" ideally through a private node (or at least not\n // allowing public execution) to avoid front-running, and always set strict limits so that it will revert\n // if any unexpected fees are charged. (It is also possible to check whether the flag has been set before\n // withdrawing, by calling `getAddLiquidityCalledFlag`.)\n if (_addLiquidityCalled().tGet(_sessionIdSlot().tload(), params.pool)) {\n uint256 swapFeePercentage = poolData.poolConfigBits.getStaticSwapFeePercentage();\n for (uint256 i = 0; i < locals.numTokens; ++i) {\n swapFeeAmounts[i] = amountsOutScaled18[i].mulUp(swapFeePercentage);\n amountsOutScaled18[i] -= swapFeeAmounts[i];\n }\n }\n } else if (params.kind == RemoveLiquidityKind.SINGLE_TOKEN_EXACT_IN) {\n poolData.poolConfigBits.requireUnbalancedLiquidityEnabled();\n bptAmountIn = params.maxBptAmountIn;\n amountsOutScaled18 = minAmountsOutScaled18;\n locals.tokenIndex = InputHelpers.getSingleInputIndex(params.minAmountsOut);\n\n (amountsOutScaled18[locals.tokenIndex], swapFeeAmounts) = BasePoolMath\n .computeRemoveLiquiditySingleTokenExactIn(\n poolData.balancesLiveScaled18,\n locals.tokenIndex,\n bptAmountIn,\n _totalSupply(params.pool),\n poolData.poolConfigBits.getStaticSwapFeePercentage(),\n IBasePool(params.pool)\n );\n } else if (params.kind == RemoveLiquidityKind.SINGLE_TOKEN_EXACT_OUT) {\n poolData.poolConfigBits.requireUnbalancedLiquidityEnabled();\n amountsOutScaled18 = minAmountsOutScaled18;\n locals.tokenIndex = InputHelpers.getSingleInputIndex(params.minAmountsOut);\n amountsOutRaw[locals.tokenIndex] = params.minAmountsOut[locals.tokenIndex];\n\n (bptAmountIn, swapFeeAmounts) = BasePoolMath.computeRemoveLiquiditySingleTokenExactOut(\n poolData.balancesLiveScaled18,\n locals.tokenIndex,\n amountsOutScaled18[locals.tokenIndex],\n _totalSupply(params.pool),\n poolData.poolConfigBits.getStaticSwapFeePercentage(),\n IBasePool(params.pool)\n );\n } else if (params.kind == RemoveLiquidityKind.CUSTOM) {\n poolData.poolConfigBits.requireRemoveLiquidityCustomEnabled();\n // Uses msg.sender as the Router (the contract that called the Vault).\n (bptAmountIn, amountsOutScaled18, swapFeeAmounts, returnData) = IPoolLiquidity(params.pool)\n .onRemoveLiquidityCustom(\n msg.sender,\n params.maxBptAmountIn,\n minAmountsOutScaled18,\n poolData.balancesLiveScaled18,\n params.userData\n );\n } else {\n revert InvalidRemoveLiquidityKind();\n }\n\n if (bptAmountIn > params.maxBptAmountIn) {\n revert BptAmountInAboveMax(bptAmountIn, params.maxBptAmountIn);\n }\n\n _ensureValidTradeAmount(bptAmountIn);\n\n for (uint256 i = 0; i < locals.numTokens; ++i) {\n uint256 amountOutRaw;\n\n // 1) Calculate raw amount out.\n {\n uint256 amountOutScaled18 = amountsOutScaled18[i];\n _ensureValidTradeAmount(amountOutScaled18);\n\n // If the value in memory is not set, convert scaled amount to raw.\n if (amountsOutRaw[i] == 0) {\n // amountsOut are amounts exiting the Pool, so we round down.\n // Do not mutate in place yet, as we need them scaled for the `onAfterRemoveLiquidity` hook.\n amountOutRaw = amountOutScaled18.toRawUndoRateRoundDown(\n poolData.decimalScalingFactors[i],\n poolData.tokenRates[i]\n );\n amountsOutRaw[i] = amountOutRaw;\n } else {\n // Exact out requests will have the raw amount in memory already, so we use it moving forward and\n // skip downscaling.\n amountOutRaw = amountsOutRaw[i];\n }\n }\n\n IERC20 token = poolData.tokens[i];\n // 2) Check limits for raw amounts.\n if (amountOutRaw < params.minAmountsOut[i]) {\n revert AmountOutBelowMin(token, amountOutRaw, params.minAmountsOut[i]);\n }\n\n // 3) Deltas: Credit token[i] for amountOutRaw.\n _supplyCredit(token, amountOutRaw);\n\n // 4) Compute and charge protocol and creator fees.\n // swapFeeAmounts[i] is now raw instead of scaled.\n (swapFeeAmounts[i], locals.aggregateSwapFeeAmountRaw) = _computeAndChargeAggregateSwapFees(\n poolData,\n swapFeeAmounts[i],\n params.pool,\n token,\n i\n );\n\n // 5) Pool balances: raw and live.\n // We need regular balances to complete the accounting, and the upscaled balances\n // to use in the `after` hook later on.\n\n // A Pool's token balance always decreases after an exit (potentially by 0).\n // Also adjust by protocol and pool creator fees.\n poolData.updateRawAndLiveBalance(\n i,\n poolData.balancesRaw[i] - (amountOutRaw + locals.aggregateSwapFeeAmountRaw),\n Rounding.ROUND_DOWN\n );\n }\n\n // 6) Store pool balances, raw and live.\n _writePoolBalancesToStorage(params.pool, poolData);\n\n // 7) BPT supply adjustment.\n // Uses msg.sender as the Router (the contract that called the Vault).\n _spendAllowance(address(params.pool), params.from, msg.sender, bptAmountIn);\n\n if (_isQueryContext()) {\n // Increase `from` balance to ensure the burn function succeeds.\n _queryModeBalanceIncrease(params.pool, params.from, bptAmountIn);\n }\n // When removing liquidity, we must burn tokens concurrently with updating pool balances,\n // as the pool's math relies on totalSupply.\n // Burning will be reverted if it results in a total supply less than the _POOL_MINIMUM_TOTAL_SUPPLY.\n _burn(address(params.pool), params.from, bptAmountIn);\n\n // 8) Off-chain events.\n emit LiquidityRemoved(\n params.pool,\n params.from,\n params.kind,\n _totalSupply(params.pool),\n amountsOutRaw,\n swapFeeAmounts\n );\n }\n\n /**\n * @dev Preconditions: poolConfigBits, decimalScalingFactors, tokenRates in `poolData`.\n * Side effects: updates `_aggregateFeeAmounts` storage.\n * Note that this computes the aggregate total of the protocol fees and stores it, without emitting any events.\n * Splitting the fees and event emission occur during fee collection.\n * Should only be called in a non-reentrant context.\n *\n * @return totalSwapFeeAmountRaw Total swap fees raw (LP + aggregate protocol fees)\n * @return aggregateSwapFeeAmountRaw Sum of protocol and pool creator fees raw\n */\n function _computeAndChargeAggregateSwapFees(\n PoolData memory poolData,\n uint256 totalSwapFeeAmountScaled18,\n address pool,\n IERC20 token,\n uint256 index\n ) internal returns (uint256 totalSwapFeeAmountRaw, uint256 aggregateSwapFeeAmountRaw) {\n // If totalSwapFeeAmountScaled18 equals zero, no need to charge anything.\n if (totalSwapFeeAmountScaled18 > 0) {\n // The total swap fee does not go into the pool; amountIn does, and the raw fee at this point does not\n // modify it. Given that all of the fee may belong to the pool creator (i.e. outside pool balances),\n // we round down to protect the invariant.\n\n totalSwapFeeAmountRaw = totalSwapFeeAmountScaled18.toRawUndoRateRoundDown(\n poolData.decimalScalingFactors[index],\n poolData.tokenRates[index]\n );\n\n // Aggregate fees are not charged in Recovery Mode, but we still calculate and return the raw total swap\n // fee above for off-chain reporting purposes.\n if (poolData.poolConfigBits.isPoolInRecoveryMode() == false) {\n uint256 aggregateSwapFeePercentage = poolData.poolConfigBits.getAggregateSwapFeePercentage();\n\n // We have already calculated raw total fees rounding up.\n // Total fees = LP fees + aggregate fees, so by rounding aggregate fees down we round the fee split in\n // the LPs' favor, in turn increasing token balances and the pool invariant.\n aggregateSwapFeeAmountRaw = totalSwapFeeAmountRaw.mulDown(aggregateSwapFeePercentage);\n\n // Ensure we can never charge more than the total swap fee.\n if (aggregateSwapFeeAmountRaw > totalSwapFeeAmountRaw) {\n revert ProtocolFeesExceedTotalCollected();\n }\n\n // Both Swap and Yield fees are stored together in a PackedTokenBalance.\n // We have designated \"Raw\" the derived half for Swap fee storage.\n bytes32 currentPackedBalance = _aggregateFeeAmounts[pool][token];\n _aggregateFeeAmounts[pool][token] = currentPackedBalance.setBalanceRaw(\n currentPackedBalance.getBalanceRaw() + aggregateSwapFeeAmountRaw\n );\n }\n }\n }\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /// @inheritdoc IVaultMain\n function getPoolTokenCountAndIndexOfToken(\n address pool,\n IERC20 token\n ) external view withRegisteredPool(pool) returns (uint256, uint256) {\n IERC20[] memory poolTokens = _poolTokens[pool];\n\n uint256 index = _findTokenIndex(poolTokens, token);\n\n return (poolTokens.length, index);\n }\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /// @inheritdoc IVaultMain\n function transfer(address owner, address to, uint256 amount) external returns (bool) {\n _transfer(msg.sender, owner, to, amount);\n return true;\n }\n\n /// @inheritdoc IVaultMain\n function transferFrom(address spender, address from, address to, uint256 amount) external returns (bool) {\n _spendAllowance(msg.sender, from, spender, amount);\n _transfer(msg.sender, from, to, amount);\n return true;\n }\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /// @inheritdoc IVaultMain\n function erc4626BufferWrapOrUnwrap(\n BufferWrapOrUnwrapParams memory params\n )\n external\n onlyWhenUnlocked\n whenVaultBuffersAreNotPaused\n withInitializedBuffer(params.wrappedToken)\n nonReentrant\n returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw)\n {\n IERC20 underlyingToken = IERC20(params.wrappedToken.asset());\n _ensureCorrectBufferAsset(params.wrappedToken, address(underlyingToken));\n\n _ensureValidWrapAmount(params.wrappedToken, params.amountGivenRaw);\n\n if (params.direction == WrappingDirection.UNWRAP) {\n bytes32 bufferBalances;\n (amountInRaw, amountOutRaw, bufferBalances) = _unwrapWithBuffer(\n params.kind,\n underlyingToken,\n params.wrappedToken,\n params.amountGivenRaw\n );\n emit Unwrap(params.wrappedToken, amountInRaw, amountOutRaw, bufferBalances);\n } else {\n bytes32 bufferBalances;\n (amountInRaw, amountOutRaw, bufferBalances) = _wrapWithBuffer(\n params.kind,\n underlyingToken,\n params.wrappedToken,\n params.amountGivenRaw\n );\n emit Wrap(params.wrappedToken, amountInRaw, amountOutRaw, bufferBalances);\n }\n\n if (params.kind == SwapKind.EXACT_IN) {\n if (amountOutRaw < params.limitRaw) {\n revert SwapLimit(amountOutRaw, params.limitRaw);\n }\n amountCalculatedRaw = amountOutRaw;\n } else {\n if (amountInRaw > params.limitRaw) {\n revert SwapLimit(amountInRaw, params.limitRaw);\n }\n amountCalculatedRaw = amountInRaw;\n }\n\n _ensureValidWrapAmount(params.wrappedToken, amountCalculatedRaw);\n }\n\n // If amount is too small, rounding issues can be introduced that favor the user and can leak value\n // from the buffer.\n // _MINIMUM_WRAP_AMOUNT prevents it. Most tokens have protections against it already; this is just an extra layer\n // of security.\n function _ensureValidWrapAmount(IERC4626 wrappedToken, uint256 amount) private view {\n if (amount < _MINIMUM_WRAP_AMOUNT) {\n revert WrapAmountTooSmall(wrappedToken);\n }\n }\n\n /**\n * @dev If the buffer has enough liquidity, it uses the internal ERC4626 buffer to perform the wrap\n * operation without any external calls. If not, it wraps the assets needed to fulfill the trade + the imbalance\n * of assets in the buffer, so that the buffer is rebalanced at the end of the operation.\n *\n * Updates `_reservesOf` and token deltas in storage.\n */\n function _wrapWithBuffer(\n SwapKind kind,\n IERC20 underlyingToken,\n IERC4626 wrappedToken,\n uint256 amountGiven\n ) internal returns (uint256 amountInUnderlying, uint256 amountOutWrapped, bytes32 bufferBalances) {\n if (kind == SwapKind.EXACT_IN) {\n // EXACT_IN wrap, so AmountGiven is an underlying amount. `deposit` is the ERC4626 operation that receives\n // an underlying amount in and calculates the wrapped amount out with the correct rounding. 1 wei is\n // removed from amountGiven to compensate for any rate manipulation. Also, 1 wei is removed from the\n // preview result to compensate for any rounding imprecision, so that the buffer does not leak value.\n (amountInUnderlying, amountOutWrapped) = (amountGiven, wrappedToken.previewDeposit(amountGiven - 1) - 1);\n } else {\n // EXACT_OUT wrap, so AmountGiven is a wrapped amount. `mint` is the ERC4626 operation that receives a\n // wrapped amount out and calculates the underlying amount in with the correct rounding. 1 wei is\n // added to amountGiven to compensate for any rate manipulation. Also, 1 wei is added to the\n // preview result to compensate for any rounding imprecision, so that the buffer does not leak value.\n (amountInUnderlying, amountOutWrapped) = (wrappedToken.previewMint(amountGiven + 1) + 1, amountGiven);\n }\n\n bufferBalances = _bufferTokenBalances[wrappedToken];\n\n // If it's a query, the Vault may not have enough underlying tokens to wrap. Since in a query we do not expect\n // the sender to pay for underlying tokens to wrap upfront, return the calculated amount without checking for\n // the imbalance.\n if (_isQueryContext()) {\n return (amountInUnderlying, amountOutWrapped, bufferBalances);\n }\n\n if (bufferBalances.getBalanceDerived() >= amountOutWrapped) {\n // The buffer has enough liquidity to facilitate the wrap without making an external call.\n uint256 newDerivedBalance;\n unchecked {\n // We have verified above that this is safe to do unchecked.\n newDerivedBalance = bufferBalances.getBalanceDerived() - amountOutWrapped;\n }\n\n bufferBalances = PackedTokenBalance.toPackedBalance(\n bufferBalances.getBalanceRaw() + amountInUnderlying,\n newDerivedBalance\n );\n _bufferTokenBalances[wrappedToken] = bufferBalances;\n } else {\n // The buffer does not have enough liquidity to facilitate the wrap without making an external call.\n // We wrap the user's tokens via an external call and additionally rebalance the buffer if it has an\n // imbalance of underlying tokens.\n\n // Expected amount of underlying deposited into the wrapper protocol.\n uint256 vaultUnderlyingDeltaHint;\n // Expected amount of wrapped minted by the wrapper protocol.\n uint256 vaultWrappedDeltaHint;\n\n if (kind == SwapKind.EXACT_IN) {\n // EXACT_IN requires the exact amount of underlying tokens to be deposited, so we call deposit.\n // The amount of underlying tokens to deposit is the necessary amount to fulfill the trade\n // (amountInUnderlying), plus the amount needed to leave the buffer rebalanced 50/50 at the end\n // (bufferUnderlyingImbalance). `bufferUnderlyingImbalance` may be positive if the buffer has an excess\n // of underlying, or negative if the buffer has an excess of wrapped tokens. `vaultUnderlyingDeltaHint`\n // will always be a positive number, because if `abs(bufferUnderlyingImbalance) > amountInUnderlying`\n // and `bufferUnderlyingImbalance < 0`, it means the buffer has enough liquidity to fulfill the trade\n // (i.e. `bufferBalances.getBalanceDerived() >= amountOutWrapped`).\n int256 bufferUnderlyingImbalance = bufferBalances.getBufferUnderlyingImbalance(wrappedToken);\n vaultUnderlyingDeltaHint = (amountInUnderlying.toInt256() + bufferUnderlyingImbalance).toUint256();\n underlyingToken.forceApprove(address(wrappedToken), vaultUnderlyingDeltaHint);\n vaultWrappedDeltaHint = wrappedToken.deposit(vaultUnderlyingDeltaHint, address(this));\n } else {\n // EXACT_OUT requires the exact amount of wrapped tokens to be minted, so we call mint.\n // The amount of wrapped tokens to mint is the amount necessary to fulfill the trade\n // (amountOutWrapped), minus the excess amount of wrapped tokens in the buffer (bufferWrappedImbalance).\n // `bufferWrappedImbalance` may be positive if buffer has an excess of wrapped assets or negative if\n // the buffer has an excess of underlying assets. `vaultWrappedDeltaHint` will always be a positive\n // number, because if `abs(bufferWrappedImbalance) > amountOutWrapped` and `bufferWrappedImbalance > 0`,\n // it means the buffer has enough liquidity to fulfill the trade\n // (i.e. `bufferBalances.getBalanceDerived() >= amountOutWrapped`).\n int256 bufferWrappedImbalance = bufferBalances.getBufferWrappedImbalance(wrappedToken);\n vaultWrappedDeltaHint = (amountOutWrapped.toInt256() - bufferWrappedImbalance).toUint256();\n\n // For Wrap ExactOut, we also need to calculate `vaultUnderlyingDeltaHint` before the mint operation,\n // to approve the transfer of underlying tokens to the wrapper protocol.\n vaultUnderlyingDeltaHint = wrappedToken.previewMint(vaultWrappedDeltaHint);\n\n // The mint operation returns exactly `vaultWrappedDeltaHint` shares. To do so, it withdraws underlying\n // tokens from the Vault and returns the shares. So, the Vault needs to approve the transfer of\n // underlying tokens to the wrapper.\n underlyingToken.forceApprove(address(wrappedToken), vaultUnderlyingDeltaHint);\n\n vaultUnderlyingDeltaHint = wrappedToken.mint(vaultWrappedDeltaHint, address(this));\n }\n\n // Remove approval, in case deposit/mint consumed less tokens than we approved.\n // E.g., A malicious wrapper could not consume all of the underlying tokens and use the Vault approval to\n // drain the Vault.\n underlyingToken.forceApprove(address(wrappedToken), 0);\n\n // Check if the Vault's underlying balance decreased by `vaultUnderlyingDeltaHint` and the Vault's\n // wrapped balance increased by `vaultWrappedDeltaHint`. If not, it reverts.\n _settleWrap(underlyingToken, IERC20(wrappedToken), vaultUnderlyingDeltaHint, vaultWrappedDeltaHint);\n\n // In a wrap operation, the buffer underlying balance increases by `amountInUnderlying` (the amount that\n // the caller deposited into the buffer) and decreases by `vaultUnderlyingDeltaHint` (the amount of\n // underlying deposited by the buffer into the wrapper protocol). Conversely, the buffer wrapped balance\n // decreases by `amountOutWrapped` (the amount of wrapped tokens that the buffer returned to the caller)\n // and increases by `vaultWrappedDeltaHint` (the amount of wrapped tokens minted by the wrapper protocol).\n bufferBalances = PackedTokenBalance.toPackedBalance(\n bufferBalances.getBalanceRaw() + amountInUnderlying - vaultUnderlyingDeltaHint,\n bufferBalances.getBalanceDerived() + vaultWrappedDeltaHint - amountOutWrapped\n );\n _bufferTokenBalances[wrappedToken] = bufferBalances;\n }\n\n _takeDebt(underlyingToken, amountInUnderlying);\n _supplyCredit(wrappedToken, amountOutWrapped);\n }\n\n /**\n * @dev If the buffer has enough liquidity, it uses the internal ERC4626 buffer to perform the unwrap\n * operation without any external calls. If not, it unwraps the assets needed to fulfill the trade + the imbalance\n * of assets in the buffer, so that the buffer is rebalanced at the end of the operation.\n *\n * Updates `_reservesOf` and token deltas in storage.\n */\n function _unwrapWithBuffer(\n SwapKind kind,\n IERC20 underlyingToken,\n IERC4626 wrappedToken,\n uint256 amountGiven\n ) internal returns (uint256 amountInWrapped, uint256 amountOutUnderlying, bytes32 bufferBalances) {\n if (kind == SwapKind.EXACT_IN) {\n // EXACT_IN unwrap, so AmountGiven is a wrapped amount. `redeem` is the ERC4626 operation that receives a\n // wrapped amount in and calculates the underlying amount out with the correct rounding. 1 wei is removed\n // from amountGiven to compensate for any rate manipulation. Also, 1 wei is removed from the preview result\n // to compensate for any rounding imprecision, so that the buffer does not leak value.\n (amountInWrapped, amountOutUnderlying) = (amountGiven, wrappedToken.previewRedeem(amountGiven - 1) - 1);\n } else {\n // EXACT_OUT unwrap, so AmountGiven is an underlying amount. `withdraw` is the ERC4626 operation that\n // receives an underlying amount out and calculates the wrapped amount in with the correct rounding. 1 wei\n // is added to amountGiven to compensate for any rate manipulation. Also, 1 wei is added to the preview\n // result to compensate for any rounding imprecision, so that the buffer does not leak value.\n (amountInWrapped, amountOutUnderlying) = (wrappedToken.previewWithdraw(amountGiven + 1) + 1, amountGiven);\n }\n\n bufferBalances = _bufferTokenBalances[wrappedToken];\n\n // If it's a query, the Vault may not have enough wrapped tokens to unwrap. Since in a query we do not expect\n // the sender to pay for wrapped tokens to unwrap upfront, return the calculated amount without checking for\n // the imbalance.\n if (_isQueryContext()) {\n return (amountInWrapped, amountOutUnderlying, bufferBalances);\n }\n\n if (bufferBalances.getBalanceRaw() >= amountOutUnderlying) {\n // The buffer has enough liquidity to facilitate the wrap without making an external call.\n uint256 newRawBalance;\n unchecked {\n // We have verified above that this is safe to do unchecked.\n newRawBalance = bufferBalances.getBalanceRaw() - amountOutUnderlying;\n }\n bufferBalances = PackedTokenBalance.toPackedBalance(\n newRawBalance,\n bufferBalances.getBalanceDerived() + amountInWrapped\n );\n _bufferTokenBalances[wrappedToken] = bufferBalances;\n } else {\n // The buffer does not have enough liquidity to facilitate the unwrap without making an external call.\n // We unwrap the user's tokens via an external call and additionally rebalance the buffer if it has an\n // imbalance of wrapped tokens.\n\n // Expected amount of underlying withdrawn from the wrapper protocol.\n uint256 vaultUnderlyingDeltaHint;\n // Expected amount of wrapped burned by the wrapper protocol.\n uint256 vaultWrappedDeltaHint;\n\n if (kind == SwapKind.EXACT_IN) {\n // EXACT_IN requires the exact amount of wrapped tokens to be unwrapped, so we call redeem. The amount\n // of wrapped tokens to redeem is the amount necessary to fulfill the trade (amountInWrapped), plus the\n // amount needed to leave the buffer rebalanced 50/50 at the end (bufferWrappedImbalance).\n // `bufferWrappedImbalance` may be positive if the buffer has an excess of wrapped, or negative if the\n // buffer has an excess of underlying tokens. `vaultWrappedDeltaHint` will always be a positive number,\n // because if `abs(bufferWrappedImbalance) > amountInWrapped` and `bufferWrappedImbalance < 0`, it\n // means the buffer has enough liquidity to fulfill the trade\n // (i.e. `bufferBalances.getBalanceRaw() >= amountOutUnderlying`).\n int256 bufferWrappedImbalance = bufferBalances.getBufferWrappedImbalance(wrappedToken);\n vaultWrappedDeltaHint = (amountInWrapped.toInt256() + bufferWrappedImbalance).toUint256();\n vaultUnderlyingDeltaHint = wrappedToken.redeem(vaultWrappedDeltaHint, address(this), address(this));\n } else {\n // EXACT_OUT requires the exact amount of underlying tokens to be returned, so we call withdraw.\n // The amount of underlying tokens to withdraw is the amount necessary to fulfill the trade\n // (amountOutUnderlying), minus the excess amount of underlying assets in the buffer\n // (bufferUnderlyingImbalance). `bufferUnderlyingImbalance` may be positive if the buffer has an excess\n // of underlying, or negative if the buffer has an excess of wrapped tokens. `vaultUnderlyingDeltaHint`\n // will always be a positive number, because if `abs(bufferUnderlyingImbalance) > amountOutUnderlying`\n // and `bufferUnderlyingImbalance > 0`, it means the buffer has enough liquidity to fulfill the trade\n // (i.e. `bufferBalances.getBalanceRaw() >= amountOutUnderlying`).\n int256 bufferUnderlyingImbalance = bufferBalances.getBufferUnderlyingImbalance(wrappedToken);\n vaultUnderlyingDeltaHint = (amountOutUnderlying.toInt256() - bufferUnderlyingImbalance).toUint256();\n vaultWrappedDeltaHint = wrappedToken.withdraw(vaultUnderlyingDeltaHint, address(this), address(this));\n }\n\n // Check if the Vault's underlying balance increased by `vaultUnderlyingDeltaHint` and the Vault's\n // wrapped balance decreased by `vaultWrappedDeltaHint`. If not, it reverts.\n _settleUnwrap(underlyingToken, IERC20(wrappedToken), vaultUnderlyingDeltaHint, vaultWrappedDeltaHint);\n\n // In an unwrap operation, the buffer underlying balance increases by `vaultUnderlyingDeltaHint` (the\n // amount of underlying withdrawn by the buffer from the wrapper protocol) and decreases by\n // `amountOutUnderlying` (the amount of underlying assets that the caller withdrawn from the buffer).\n // Conversely, the buffer wrapped balance increases by `amountInWrapped` (the amount of wrapped tokens that\n // the caller sent to the buffer) and decreases by `vaultWrappedDeltaHint` (the amount of wrapped tokens\n // burned by the wrapper protocol).\n bufferBalances = PackedTokenBalance.toPackedBalance(\n bufferBalances.getBalanceRaw() + vaultUnderlyingDeltaHint - amountOutUnderlying,\n bufferBalances.getBalanceDerived() + amountInWrapped - vaultWrappedDeltaHint\n );\n _bufferTokenBalances[wrappedToken] = bufferBalances;\n }\n\n _takeDebt(wrappedToken, amountInWrapped);\n _supplyCredit(underlyingToken, amountOutUnderlying);\n }\n\n /**\n * @notice Updates the reserves of the Vault after an ERC4626 wrap (deposit/mint) operation.\n * @dev If there are extra tokens in the Vault balances, these will be added to the reserves (which, in practice,\n * is equal to discarding such tokens). This approach avoids DoS attacks, when a frontrunner leaves vault balances\n * and reserves out of sync before a transaction starts.\n *\n * @param underlyingToken Underlying token of the ERC4626 wrapped token\n * @param wrappedToken ERC4626 wrapped token\n * @param underlyingDeltaHint Amount of underlying tokens the wrapper should have removed from the Vault\n * @param wrappedDeltaHint Amount of wrapped tokens the wrapper should have added to the Vault\n */\n function _settleWrap(\n IERC20 underlyingToken,\n IERC20 wrappedToken,\n uint256 underlyingDeltaHint,\n uint256 wrappedDeltaHint\n ) internal {\n // A wrap operation removes underlying tokens from the Vault, so the Vault's expected underlying balance after\n // the operation is `underlyingReservesBefore - underlyingDeltaHint`.\n uint256 expectedUnderlyingReservesAfter = _reservesOf[underlyingToken] - underlyingDeltaHint;\n\n // A wrap operation adds wrapped tokens to the Vault, so the Vault's expected wrapped balance after the\n // operation is `wrappedReservesBefore + wrappedDeltaHint`.\n uint256 expectedWrappedReservesAfter = _reservesOf[wrappedToken] + wrappedDeltaHint;\n\n _settleWrapUnwrap(underlyingToken, wrappedToken, expectedUnderlyingReservesAfter, expectedWrappedReservesAfter);\n }\n\n /**\n * @notice Updates the reserves of the Vault after an ERC4626 unwrap (withdraw/redeem) operation.\n * @dev If there are extra tokens in the Vault balances, these will be added to the reserves (which, in practice,\n * is equal to discarding such tokens). This approach avoids DoS attacks, when a frontrunner leaves vault balances\n * and state of reserves out of sync before a transaction starts.\n *\n * @param underlyingToken Underlying of ERC4626 wrapped token\n * @param wrappedToken ERC4626 wrapped token\n * @param underlyingDeltaHint Amount of underlying tokens supposedly added to the Vault\n * @param wrappedDeltaHint Amount of wrapped tokens supposedly removed from the Vault\n */\n function _settleUnwrap(\n IERC20 underlyingToken,\n IERC20 wrappedToken,\n uint256 underlyingDeltaHint,\n uint256 wrappedDeltaHint\n ) internal {\n // An unwrap operation adds underlying tokens to the Vault, so the Vault's expected underlying balance after\n // the operation is `underlyingReservesBefore + underlyingDeltaHint`.\n uint256 expectedUnderlyingReservesAfter = _reservesOf[underlyingToken] + underlyingDeltaHint;\n\n // An unwrap operation removes wrapped tokens from the Vault, so the Vault's expected wrapped balance after the\n // operation is `wrappedReservesBefore - wrappedDeltaHint`.\n uint256 expectedWrappedReservesAfter = _reservesOf[wrappedToken] - wrappedDeltaHint;\n\n _settleWrapUnwrap(underlyingToken, wrappedToken, expectedUnderlyingReservesAfter, expectedWrappedReservesAfter);\n }\n\n /**\n * @notice Updates the reserves of the Vault after an ERC4626 wrap/unwrap operation.\n * @dev If reserves of underlying or wrapped tokens are bigger than expected, the extra tokens will be discarded,\n * which avoids a possible DoS. However, if reserves are smaller than expected, it means that the wrapper didn't\n * respect the amount given and/or the amount calculated (informed by the wrapper operation and stored as a hint\n * variable), so the token is not ERC4626 compliant and the function should be reverted.\n *\n * @param underlyingToken Underlying of ERC4626 wrapped token\n * @param wrappedToken ERC4626 wrapped token\n * @param expectedUnderlyingReservesAfter Vault's expected reserves of underlying after the wrap/unwrap operation\n * @param expectedWrappedReservesAfter Vault's expected reserves of wrapped after the wrap/unwrap operation\n */\n function _settleWrapUnwrap(\n IERC20 underlyingToken,\n IERC20 wrappedToken,\n uint256 expectedUnderlyingReservesAfter,\n uint256 expectedWrappedReservesAfter\n ) internal {\n // Update the Vault's underlying reserves.\n uint256 underlyingBalancesAfter = underlyingToken.balanceOf(address(this));\n if (underlyingBalancesAfter < expectedUnderlyingReservesAfter) {\n // If Vault's underlying balance is smaller than expected, the Vault was drained and the operation should\n // revert. It may happen in different ways, depending on the wrap/unwrap operation:\n // * deposit: the wrapper didn't respect the exact amount in of underlying;\n // * mint: the underlying amount subtracted from the Vault is bigger than wrapper's calculated amount in;\n // * withdraw: the wrapper didn't respect the exact amount out of underlying;\n // * redeem: the underlying amount added to the Vault is smaller than wrapper's calculated amount out.\n revert NotEnoughUnderlying(\n IERC4626(address(wrappedToken)),\n expectedUnderlyingReservesAfter,\n underlyingBalancesAfter\n );\n }\n // Update the Vault's underlying reserves, discarding any unexpected imbalance of tokens (difference between\n // actual and expected vault balance).\n _reservesOf[underlyingToken] = underlyingBalancesAfter;\n\n // Update the Vault's wrapped reserves.\n uint256 wrappedBalancesAfter = wrappedToken.balanceOf(address(this));\n if (wrappedBalancesAfter < expectedWrappedReservesAfter) {\n // If the Vault's wrapped balance is smaller than expected, the Vault was drained and the operation should\n // revert. It may happen in different ways, depending on the wrap/unwrap operation:\n // * deposit: the wrapped amount added to the Vault is smaller than wrapper's calculated amount out;\n // * mint: the wrapper didn't respect the exact amount out of wrapped;\n // * withdraw: the wrapped amount subtracted from the Vault is bigger than wrapper's calculated amount in;\n // * redeem: the wrapper didn't respect the exact amount in of wrapped.\n revert NotEnoughWrapped(\n IERC4626(address(wrappedToken)),\n expectedWrappedReservesAfter,\n wrappedBalancesAfter\n );\n }\n // Update the Vault's wrapped reserves, discarding any unexpected surplus of tokens (difference between\n // the Vault's actual and expected balances).\n _reservesOf[wrappedToken] = wrappedBalancesAfter;\n }\n\n // Minimum token value in or out (applied to scaled18 values), enforced as a security measure to block potential\n // exploitation of rounding errors. This is called in the context of adding or removing liquidity, so zero is\n // allowed to support single-token operations.\n function _ensureValidTradeAmount(uint256 tradeAmount) internal view {\n if (tradeAmount != 0) {\n _ensureValidSwapAmount(tradeAmount);\n }\n }\n\n // Minimum token value in or out (applied to scaled18 values), enforced as a security measure to block potential\n // exploitation of rounding errors. This is called in the swap context, so zero is not a valid amount. Note that\n // since this is applied to the scaled amount, the corresponding minimum raw amount will vary according to token\n // decimals. The math functions are called with scaled amounts, and the magnitude of the minimum values is based\n // on the maximum error, so this is fine. Trying to adjust for decimals would add complexity and significant gas\n // to the critical path, so we don't do it. (Note that very low-decimal tokens don't work well in AMMs generally;\n // this is another reason to avoid them.)\n function _ensureValidSwapAmount(uint256 tradeAmount) internal view {\n if (tradeAmount < _MINIMUM_TRADE_AMOUNT) {\n revert TradeAmountTooSmall();\n }\n }\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /// @inheritdoc IVaultMain\n function getVaultExtension() external view returns (address) {\n return _implementation();\n }\n\n /**\n * @inheritdoc Proxy\n * @dev Returns the VaultExtension contract, to which fallback requests are forwarded.\n */\n function _implementation() internal view override returns (address) {\n return address(_vaultExtension);\n }\n\n /*******************************************************************************\n Default handlers\n *******************************************************************************/\n\n receive() external payable {\n revert CannotReceiveEth();\n }\n\n // solhint-disable no-complex-fallback\n\n /**\n * @inheritdoc Proxy\n * @dev Override proxy implementation of `fallback` to disallow incoming ETH transfers.\n * This function actually returns whatever the VaultExtension does when handling the request.\n */\n fallback() external payable override {\n if (msg.value > 0) {\n revert CannotReceiveEth();\n }\n\n _fallback();\n }\n}\n"},"contracts/VaultCommon.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { ISwapFeePercentageBounds } from \"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\";\nimport { PoolData, Rounding } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVaultEvents } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\";\n\nimport { StorageSlotExtension } from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\";\nimport { EVMCallModeHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\";\nimport { PackedTokenBalance } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\";\nimport { ScalingHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\";\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\nimport {\n TransientStorageHelpers\n} from \"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\";\n\nimport { VaultStateBits, VaultStateLib } from \"./lib/VaultStateLib.sol\";\nimport { PoolConfigBits, PoolConfigLib } from \"./lib/PoolConfigLib.sol\";\nimport { ERC20MultiToken } from \"./token/ERC20MultiToken.sol\";\nimport { PoolDataLib } from \"./lib/PoolDataLib.sol\";\nimport { VaultStorage } from \"./VaultStorage.sol\";\n\n/**\n * @notice Functions and modifiers shared between the main Vault and its extension contracts.\n * @dev This contract contains common utilities in the inheritance chain that require storage to work,\n * and will be required in both the main Vault and its extensions.\n */\nabstract contract VaultCommon is IVaultEvents, IVaultErrors, VaultStorage, ReentrancyGuardTransient, ERC20MultiToken {\n using PoolConfigLib for PoolConfigBits;\n using VaultStateLib for VaultStateBits;\n using SafeCast for *;\n using TransientStorageHelpers for *;\n using StorageSlotExtension for *;\n using PoolDataLib for PoolData;\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @dev This modifier ensures that the function it modifies can only be called\n * when a tab has been opened.\n */\n modifier onlyWhenUnlocked() {\n _ensureUnlocked();\n _;\n }\n\n function _ensureUnlocked() internal view {\n if (_isUnlocked().tload() == false) {\n revert VaultIsNotUnlocked();\n }\n }\n\n /**\n * @notice Expose the state of the Vault's reentrancy guard.\n * @return True if the Vault is currently executing a nonReentrant function\n */\n function reentrancyGuardEntered() public view returns (bool) {\n return _reentrancyGuardEntered();\n }\n\n /**\n * @notice Records the `credit` for a given token.\n * @param token The ERC20 token for which the 'credit' will be accounted\n * @param credit The amount of `token` supplied to the Vault in favor of the caller\n */\n function _supplyCredit(IERC20 token, uint256 credit) internal {\n _accountDelta(token, -credit.toInt256());\n }\n\n /**\n * @notice Records the `debt` for a given token.\n * @param token The ERC20 token for which the `debt` will be accounted\n * @param debt The amount of `token` taken from the Vault in favor of the caller\n */\n function _takeDebt(IERC20 token, uint256 debt) internal {\n _accountDelta(token, debt.toInt256());\n }\n\n /**\n * @dev Accounts the delta for the given token. A positive delta represents debt,\n * while a negative delta represents surplus.\n *\n * @param token The ERC20 token for which the delta is being accounted\n * @param delta The difference in the token balance\n * Positive indicates a debit or a decrease in Vault's tokens,\n * negative indicates a credit or an increase in Vault's tokens.\n */\n function _accountDelta(IERC20 token, int256 delta) internal {\n // If the delta is zero, there's nothing to account for.\n if (delta == 0) return;\n\n // Get the current recorded delta for this token.\n int256 current = _tokenDeltas().tGet(token);\n\n // Calculate the new delta after accounting for the change.\n int256 next = current + delta;\n\n if (next == 0) {\n // If the resultant delta becomes zero after this operation,\n // decrease the count of non-zero deltas.\n _nonZeroDeltaCount().tDecrement();\n } else if (current == 0) {\n // If there was no previous delta (i.e., it was zero) and now we have one,\n // increase the count of non-zero deltas.\n _nonZeroDeltaCount().tIncrement();\n }\n\n // Update the delta for this token.\n _tokenDeltas().tSet(token, next);\n }\n\n /*******************************************************************************\n Vault Pausing\n *******************************************************************************/\n\n /// @dev Modifier to make a function callable only when the Vault is not paused.\n modifier whenVaultNotPaused() {\n _ensureVaultNotPaused();\n _;\n }\n\n /// @dev Reverts if the Vault is paused.\n function _ensureVaultNotPaused() internal view {\n if (_isVaultPaused()) {\n revert VaultPaused();\n }\n }\n\n /// @dev Reverts if the Vault or the given pool are paused.\n function _ensureUnpaused(address pool) internal view {\n _ensureVaultNotPaused();\n _ensurePoolNotPaused(pool);\n }\n\n /**\n * @dev For gas efficiency, storage is only read before `_vaultBufferPeriodEndTime`. Once we're past that\n * timestamp, the expression short-circuits false, and the Vault is permanently unpaused.\n */\n function _isVaultPaused() internal view returns (bool) {\n // solhint-disable-next-line not-rely-on-time\n return block.timestamp <= _vaultBufferPeriodEndTime && _vaultStateBits.isVaultPaused();\n }\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /// @dev Reverts if the pool is paused.\n function _ensurePoolNotPaused(address pool) internal view {\n if (_isPoolPaused(pool)) {\n revert PoolPaused(pool);\n }\n }\n\n /// @dev Check both the flag and timestamp to determine whether the pool is paused.\n function _isPoolPaused(address pool) internal view returns (bool) {\n (bool paused, ) = _getPoolPausedState(pool);\n\n return paused;\n }\n\n /// @dev Lowest level routine that plucks only the minimum necessary parts from storage.\n function _getPoolPausedState(address pool) internal view returns (bool, uint32) {\n PoolConfigBits config = _poolConfigBits[pool];\n\n bool isPoolPaused = config.isPoolPaused();\n uint32 pauseWindowEndTime = config.getPauseWindowEndTime();\n\n // Use the Vault's buffer period.\n // solhint-disable-next-line not-rely-on-time\n return (isPoolPaused && block.timestamp <= pauseWindowEndTime + _vaultBufferPeriodDuration, pauseWindowEndTime);\n }\n\n /*******************************************************************************\n Buffer Pausing\n *******************************************************************************/\n /// @dev Modifier to make a function callable only when vault buffers are not paused.\n modifier whenVaultBuffersAreNotPaused() {\n _ensureVaultBuffersAreNotPaused();\n _;\n }\n\n /// @dev Reverts if vault buffers are paused.\n function _ensureVaultBuffersAreNotPaused() internal view {\n if (_vaultStateBits.areBuffersPaused()) {\n revert VaultBuffersArePaused();\n }\n }\n\n /*******************************************************************************\n Pool Registration and Initialization\n *******************************************************************************/\n\n /// @dev Reverts unless `pool` is a registered Pool.\n modifier withRegisteredPool(address pool) {\n _ensureRegisteredPool(pool);\n _;\n }\n\n /// @dev Reverts unless `pool` is an initialized Pool.\n modifier withInitializedPool(address pool) {\n _ensureInitializedPool(pool);\n _;\n }\n\n function _ensureRegisteredPool(address pool) internal view {\n if (!_isPoolRegistered(pool)) {\n revert PoolNotRegistered(pool);\n }\n }\n\n /// @dev See `isPoolRegistered`\n function _isPoolRegistered(address pool) internal view returns (bool) {\n PoolConfigBits config = _poolConfigBits[pool];\n return config.isPoolRegistered();\n }\n\n function _ensureInitializedPool(address pool) internal view {\n if (!_isPoolInitialized(pool)) {\n revert PoolNotInitialized(pool);\n }\n }\n\n /// @dev See `isPoolInitialized`\n function _isPoolInitialized(address pool) internal view returns (bool) {\n PoolConfigBits config = _poolConfigBits[pool];\n return config.isPoolInitialized();\n }\n\n /*******************************************************************************\n Buffer Initialization & Validation\n *******************************************************************************/\n\n modifier withInitializedBuffer(IERC4626 wrappedToken) {\n _ensureBufferInitialized(wrappedToken);\n _;\n }\n\n function _ensureBufferInitialized(IERC4626 wrappedToken) internal view {\n if (_bufferAssets[wrappedToken] == address(0)) {\n revert BufferNotInitialized(wrappedToken);\n }\n }\n\n /**\n * @dev This assumes `underlyingToken` is non-zero; should be called by functions that have already ensured the\n * buffer has been initialized (e.g., those protected by `withInitializedBuffer`).\n */\n function _ensureCorrectBufferAsset(IERC4626 wrappedToken, address underlyingToken) internal view {\n if (_bufferAssets[wrappedToken] != underlyingToken) {\n // Asset was changed since the buffer was initialized.\n revert WrongUnderlyingToken(wrappedToken, underlyingToken);\n }\n }\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @dev Packs and sets the raw and live balances of a Pool's tokens to the current values in poolData.balancesRaw\n * and poolData.liveBalances in the same storage slot.\n */\n function _writePoolBalancesToStorage(address pool, PoolData memory poolData) internal {\n mapping(uint256 tokenIndex => bytes32 packedTokenBalance) storage poolBalances = _poolTokenBalances[pool];\n\n for (uint256 i = 0; i < poolData.balancesRaw.length; ++i) {\n // We assume all newBalances are properly ordered.\n poolBalances[i] = PackedTokenBalance.toPackedBalance(\n poolData.balancesRaw[i],\n poolData.balancesLiveScaled18[i]\n );\n }\n }\n\n /**\n * @dev Fill in PoolData, including paying protocol yield fees and computing final raw and live balances.\n * In normal operation, we update both balances and fees together. However, while Recovery Mode is enabled,\n * we cannot track yield fees, as that would involve making external calls that could fail and block withdrawals.\n *\n * Therefore, disabling Recovery Mode requires writing *only* the balances to storage, so we still need this\n * as a separate function. It is normally called by `_loadPoolDataUpdatingBalancesAndYieldFees`, but in the\n * Recovery Mode special case, it is called separately, with the result passed into `_writePoolBalancesToStorage`.\n */\n function _loadPoolData(address pool, Rounding roundingDirection) internal view returns (PoolData memory poolData) {\n poolData.load(\n _poolTokenBalances[pool],\n _poolConfigBits[pool],\n _poolTokenInfo[pool],\n _poolTokens[pool],\n roundingDirection\n );\n }\n\n /**\n * @dev Fill in PoolData, including paying protocol yield fees and computing final raw and live balances.\n * This function modifies protocol fees and balance storage. Out of an abundance of caution, since `_loadPoolData`\n * makes external calls, we are making anything that calls it and then modifies storage non-reentrant.\n * Side effects: updates `_aggregateFeeAmounts` and `_poolTokenBalances` in storage.\n */\n function _loadPoolDataUpdatingBalancesAndYieldFees(\n address pool,\n Rounding roundingDirection\n ) internal nonReentrant returns (PoolData memory poolData) {\n // Initialize poolData with base information for subsequent calculations.\n poolData.load(\n _poolTokenBalances[pool],\n _poolConfigBits[pool],\n _poolTokenInfo[pool],\n _poolTokens[pool],\n roundingDirection\n );\n\n PoolDataLib.syncPoolBalancesAndFees(poolData, _poolTokenBalances[pool], _aggregateFeeAmounts[pool]);\n }\n\n /**\n * @dev Updates the raw and live balance of a given token in poolData, scaling the given raw balance by both decimal\n * and token rates, and rounding the result in the given direction. Assumes scaling factors and rates are current\n * in PoolData.\n */\n function _updateRawAndLiveTokenBalancesInPoolData(\n PoolData memory poolData,\n uint256 newRawBalance,\n Rounding roundingDirection,\n uint256 tokenIndex\n ) internal pure returns (uint256) {\n poolData.balancesRaw[tokenIndex] = newRawBalance;\n\n function(uint256, uint256, uint256) internal pure returns (uint256) _upOrDown = roundingDirection ==\n Rounding.ROUND_UP\n ? ScalingHelpers.toScaled18ApplyRateRoundUp\n : ScalingHelpers.toScaled18ApplyRateRoundDown;\n\n poolData.balancesLiveScaled18[tokenIndex] = _upOrDown(\n newRawBalance,\n poolData.decimalScalingFactors[tokenIndex],\n poolData.tokenRates[tokenIndex]\n );\n\n return _upOrDown(newRawBalance, poolData.decimalScalingFactors[tokenIndex], poolData.tokenRates[tokenIndex]);\n }\n\n function _setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) internal {\n // These cannot be called during pool construction. Pools must be deployed first, then registered.\n if (swapFeePercentage < ISwapFeePercentageBounds(pool).getMinimumSwapFeePercentage()) {\n revert SwapFeePercentageTooLow();\n }\n\n if (swapFeePercentage > ISwapFeePercentageBounds(pool).getMaximumSwapFeePercentage()) {\n revert SwapFeePercentageTooHigh();\n }\n\n // The library also checks that the percentage is <= FP(1), regardless of what the pool defines.\n _poolConfigBits[pool] = _poolConfigBits[pool].setStaticSwapFeePercentage(swapFeePercentage);\n\n emit SwapFeePercentageChanged(pool, swapFeePercentage);\n }\n\n /// @dev Find the index of a token in a token array. Reverts if not found.\n function _findTokenIndex(IERC20[] memory tokens, IERC20 token) internal pure returns (uint256) {\n for (uint256 i = 0; i < tokens.length; i++) {\n if (tokens[i] == token) {\n return i;\n }\n }\n\n revert TokenNotRegistered(token);\n }\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /// @dev Place on functions that may only be called when the associated pool is in recovery mode.\n modifier onlyInRecoveryMode(address pool) {\n _ensurePoolInRecoveryMode(pool);\n _;\n }\n\n /// @dev Reverts if the pool is not in recovery mode.\n function _ensurePoolInRecoveryMode(address pool) internal view {\n if (!_isPoolInRecoveryMode(pool)) {\n revert PoolNotInRecoveryMode(pool);\n }\n }\n\n /**\n * @notice Checks whether a pool is in recovery mode.\n * @param pool Address of the pool to check\n * @return inRecoveryMode True if the pool is in recovery mode, false otherwise\n */\n function _isPoolInRecoveryMode(address pool) internal view returns (bool) {\n return _poolConfigBits[pool].isPoolInRecoveryMode();\n }\n\n function _isQueryContext() internal view returns (bool) {\n return EVMCallModeHelpers.isStaticCall() && _vaultStateBits.isQueryDisabled() == false;\n }\n}\n"},"contracts/VaultGuard.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\n/// @notice Contract that shares the modifier `onlyVault`.\ncontract VaultGuard {\n IVault internal immutable _vault;\n\n constructor(IVault vault) {\n _vault = vault;\n }\n\n modifier onlyVault() {\n _ensureOnlyVault();\n _;\n }\n\n function _ensureOnlyVault() private view {\n if (msg.sender != address(_vault)) {\n revert IVaultErrors.SenderIsNotVault(msg.sender);\n }\n }\n}\n"},"contracts/VaultStorage.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVaultExtension } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\";\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IHooks } from \"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { StorageSlotExtension } from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\";\nimport {\n TransientStorageHelpers,\n TokenDeltaMappingSlotType,\n UintToAddressToBooleanMappingSlot\n} from \"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\";\n\nimport { VaultStateBits } from \"./lib/VaultStateLib.sol\";\nimport { PoolConfigBits } from \"./lib/PoolConfigLib.sol\";\n\n// solhint-disable max-states-count\n\n/**\n * @notice Storage layout for the Vault.\n * @dev This contract has no code, but is inherited by all three Vault contracts. In order to ensure that *only* the\n * Vault contract's storage is actually used, calls to the extension contracts must be delegate calls made through the\n * main Vault.\n */\ncontract VaultStorage {\n using StorageSlotExtension for *;\n\n /***************************************************************************\n Constants\n ***************************************************************************/\n\n // Pools can have between two and eight tokens.\n uint256 internal constant _MIN_TOKENS = 2;\n // This maximum token count is also implicitly hard-coded in `PoolConfigLib` (through packing `tokenDecimalDiffs`).\n uint256 internal constant _MAX_TOKENS = 8;\n // Tokens with more than 18 decimals are not supported. Tokens must also implement `IERC20Metadata.decimals`.\n uint8 internal constant _MAX_TOKEN_DECIMALS = 18;\n\n // Maximum pause and buffer period durations.\n uint256 internal constant _MAX_PAUSE_WINDOW_DURATION = 365 days * 4;\n uint256 internal constant _MAX_BUFFER_PERIOD_DURATION = 180 days;\n\n // Minimum swap amount (applied to scaled18 values), enforced as a security measure to block potential\n // exploitation of rounding errors.\n // solhint-disable-next-line var-name-mixedcase\n uint256 internal immutable _MINIMUM_TRADE_AMOUNT;\n\n // Minimum given amount to wrap/unwrap (applied to native decimal values), to avoid rounding issues.\n // solhint-disable-next-line var-name-mixedcase\n uint256 internal immutable _MINIMUM_WRAP_AMOUNT;\n\n /***************************************************************************\n Transient Storage Declarations\n ***************************************************************************/\n\n // NOTE: If you use a constant, then it is simply replaced everywhere when this constant is used\n // by what is written after =. If you use immutable, the value is first calculated and\n // then replaced everywhere. That means that if a constant has executable variables,\n // they will be executed every time the constant is used.\n\n // solhint-disable var-name-mixedcase\n bytes32 private immutable _IS_UNLOCKED_SLOT = _calculateVaultStorageSlot(\"isUnlocked\");\n bytes32 private immutable _NON_ZERO_DELTA_COUNT_SLOT = _calculateVaultStorageSlot(\"nonZeroDeltaCount\");\n bytes32 private immutable _TOKEN_DELTAS_SLOT = _calculateVaultStorageSlot(\"tokenDeltas\");\n bytes32 private immutable _ADD_LIQUIDITY_CALLED_SLOT = _calculateVaultStorageSlot(\"addLiquidityCalled\");\n bytes32 private immutable _SESSION_ID_SLOT = _calculateVaultStorageSlot(\"sessionId\");\n // solhint-enable var-name-mixedcase\n\n /***************************************************************************\n Pool State\n ***************************************************************************/\n\n // Pool-specific configuration data (e.g., fees, pause window, configuration flags).\n mapping(address pool => PoolConfigBits poolConfig) internal _poolConfigBits;\n\n // Accounts assigned to specific roles; e.g., pauseManager, swapManager.\n mapping(address pool => PoolRoleAccounts roleAccounts) internal _poolRoleAccounts;\n\n // The hooks contracts associated with each pool.\n mapping(address pool => IHooks hooksContract) internal _hooksContracts;\n\n // The set of tokens associated with each pool.\n mapping(address pool => IERC20[] poolTokens) internal _poolTokens;\n\n // The token configuration of each Pool's tokens.\n mapping(address pool => mapping(IERC20 token => TokenInfo tokenInfo)) internal _poolTokenInfo;\n\n // Structure containing the current raw and \"last live\" scaled balances. Last live balances are used for\n // yield fee computation, and since these have rates applied, they are stored as scaled 18-decimal FP values.\n // Each value takes up half the storage slot (i.e., 128 bits).\n mapping(address pool => mapping(uint256 tokenIndex => bytes32 packedTokenBalance)) internal _poolTokenBalances;\n\n // Aggregate protocol swap/yield fees accumulated in the Vault for harvest.\n // Reusing PackedTokenBalance for the bytes32 values to save bytecode (despite differing semantics).\n // It's arbitrary which is which: we define raw = swap; derived = yield.\n mapping(address pool => mapping(IERC20 token => bytes32 packedFeeAmounts)) internal _aggregateFeeAmounts;\n\n /***************************************************************************\n Vault State\n ***************************************************************************/\n\n // The Pause Window and Buffer Period are timestamp-based: they should not be relied upon for sub-minute accuracy.\n uint32 internal immutable _vaultPauseWindowEndTime;\n uint32 internal immutable _vaultBufferPeriodEndTime;\n\n // Stored as a convenience, to avoid calculating it on every operation.\n uint32 internal immutable _vaultBufferPeriodDuration;\n\n // Bytes32 with pause flags for the Vault, buffers, and queries.\n VaultStateBits internal _vaultStateBits;\n\n /**\n * @dev Represents the total reserve of each ERC20 token. It should be always equal to `token.balanceOf(vault)`,\n * except during `unlock`.\n */\n mapping(IERC20 token => uint256 vaultBalance) internal _reservesOf;\n\n /// @dev Flag that prevents re-enabling queries.\n bool internal _queriesDisabledPermanently;\n\n /***************************************************************************\n Contract References\n ***************************************************************************/\n\n // Upgradeable contract in charge of setting permissions.\n IAuthorizer internal _authorizer;\n\n // Contract that receives aggregate swap and yield fees.\n IProtocolFeeController internal _protocolFeeController;\n\n /***************************************************************************\n ERC4626 Buffers\n ***************************************************************************/\n\n // Any ERC4626 token can trade using a buffer, which is like a pool, but internal to the Vault.\n // The registry key is the wrapped token address, so there can only ever be one buffer per wrapped token.\n // This means they are permissionless, and have no registration function.\n //\n // Anyone can add liquidity to a buffer\n\n // A buffer will only ever have two tokens: wrapped and underlying. We pack the wrapped and underlying balances\n // into a single bytes32, interpreted with the `PackedTokenBalance` library.\n\n // ERC4626 token address -> PackedTokenBalance, which stores both the underlying and wrapped token balances.\n // Reusing PackedTokenBalance to save bytecode (despite differing semantics).\n // It's arbitrary which is which: we define raw = underlying token; derived = wrapped token.\n mapping(IERC4626 wrappedToken => bytes32 packedTokenBalance) internal _bufferTokenBalances;\n\n // The LP balances for buffers. LP balances are not tokenized (i.e., represented by ERC20 tokens like BPT), but\n // rather accounted for within the Vault.\n\n // Track the internal \"BPT\" shares of each buffer depositor.\n mapping(IERC4626 wrappedToken => mapping(address user => uint256 userShares)) internal _bufferLpShares;\n\n // Total LP shares.\n mapping(IERC4626 wrappedToken => uint256 totalShares) internal _bufferTotalShares;\n\n // Prevents a malicious ERC4626 from changing the asset after the buffer was initialized.\n mapping(IERC4626 wrappedToken => address underlyingToken) internal _bufferAssets;\n\n /***************************************************************************\n Transient Storage Access\n ***************************************************************************/\n\n function _isUnlocked() internal view returns (StorageSlotExtension.BooleanSlotType slot) {\n return _IS_UNLOCKED_SLOT.asBoolean();\n }\n\n function _nonZeroDeltaCount() internal view returns (StorageSlotExtension.Uint256SlotType slot) {\n return _NON_ZERO_DELTA_COUNT_SLOT.asUint256();\n }\n\n function _tokenDeltas() internal view returns (TokenDeltaMappingSlotType slot) {\n return TokenDeltaMappingSlotType.wrap(_TOKEN_DELTAS_SLOT);\n }\n\n function _addLiquidityCalled() internal view returns (UintToAddressToBooleanMappingSlot slot) {\n return UintToAddressToBooleanMappingSlot.wrap(_ADD_LIQUIDITY_CALLED_SLOT);\n }\n\n function _sessionIdSlot() internal view returns (StorageSlotExtension.Uint256SlotType slot) {\n return _SESSION_ID_SLOT.asUint256();\n }\n\n function _calculateVaultStorageSlot(string memory key) private pure returns (bytes32) {\n return TransientStorageHelpers.calculateSlot(type(VaultStorage).name, key);\n }\n}\n"}},"settings":{"viaIR":true,"evmVersion":"cancun","optimizer":{"enabled":true,"runs":500,"details":{"yulDetails":{"optimizerSteps":"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu"}}},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}}}},"output":{"errors":[{"component":"general","errorCode":"2394","formattedMessage":"Warning: Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.\n --> @balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol:74:13:\n |\n74 | tstore(slot, value)\n | ^^^^^^\n\n","message":"Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.","severity":"warning","sourceLocation":{"end":2572,"file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","start":2566},"type":"Warning"}],"sources":{"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","exportedSymbols":{"IAuthentication":[14]},"id":15,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthentication","contractDependencies":[],"contractKind":"interface","documentation":{"id":2,"nodeType":"StructuredDocumentation","src":"72:77:0","text":"@notice Simple interface for permissioned calling of external functions."},"fullyImplemented":false,"id":14,"linearizedBaseContracts":[14],"name":"IAuthentication","nameLocation":"159:15:0","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3,"nodeType":"StructuredDocumentation","src":"181:67:0","text":"@notice The sender does not have permission to call a function."},"errorSelector":"23dada53","id":5,"name":"SenderNotAllowed","nameLocation":"259:16:0","nodeType":"ErrorDefinition","parameters":{"id":4,"nodeType":"ParameterList","parameters":[],"src":"275:2:0"},"src":"253:25:0"},{"documentation":{"id":6,"nodeType":"StructuredDocumentation","src":"284:237:0","text":" @notice Returns the action identifier associated with the external function described by `selector`.\n @param selector The 4-byte selector of the permissioned function\n @return actionId The computed actionId"},"functionSelector":"851c1bb3","id":13,"implemented":false,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"535:11:0","nodeType":"FunctionDefinition","parameters":{"id":9,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8,"mutability":"mutable","name":"selector","nameLocation":"554:8:0","nodeType":"VariableDeclaration","scope":13,"src":"547:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":7,"name":"bytes4","nodeType":"ElementaryTypeName","src":"547:6:0","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"546:17:0"},"returnParameters":{"id":12,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11,"mutability":"mutable","name":"actionId","nameLocation":"595:8:0","nodeType":"VariableDeclaration","scope":13,"src":"587:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10,"name":"bytes32","nodeType":"ElementaryTypeName","src":"587:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"586:18:0"},"scope":14,"src":"526:79:0","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":15,"src":"149:458:0","usedErrors":[5],"usedEvents":[]}],"src":"46:562:0"},"id":0},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","exportedSymbols":{"IRateProvider":[24]},"id":25,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":16,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:1"},{"abstract":false,"baseContracts":[],"canonicalName":"IRateProvider","contractDependencies":[],"contractKind":"interface","documentation":{"id":17,"nodeType":"StructuredDocumentation","src":"72:56:1","text":"@notice General interface for token exchange rates."},"fullyImplemented":false,"id":24,"linearizedBaseContracts":[24],"name":"IRateProvider","nameLocation":"138:13:1","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":18,"nodeType":"StructuredDocumentation","src":"158:573:1","text":" @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n rates in downstream computations.\n @return rate The current token rate"},"functionSelector":"679aefce","id":23,"implemented":false,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"745:7:1","nodeType":"FunctionDefinition","parameters":{"id":19,"nodeType":"ParameterList","parameters":[],"src":"752:2:1"},"returnParameters":{"id":22,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21,"mutability":"mutable","name":"rate","nameLocation":"786:4:1","nodeType":"VariableDeclaration","scope":23,"src":"778:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20,"name":"uint256","nodeType":"ElementaryTypeName","src":"778:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"777:14:1"},"scope":24,"src":"736:56:1","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":25,"src":"128:666:1","usedErrors":[],"usedEvents":[]}],"src":"46:749:1"},"id":1},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","exportedSymbols":{"IAuthorizer":[40]},"id":41,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":26,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:2"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthorizer","contractDependencies":[],"contractKind":"interface","documentation":{"id":27,"nodeType":"StructuredDocumentation","src":"72:56:2","text":"@notice Interface to the Vault's permission system."},"fullyImplemented":false,"id":40,"linearizedBaseContracts":[40],"name":"IAuthorizer","nameLocation":"138:11:2","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":28,"nodeType":"StructuredDocumentation","src":"156:354:2","text":" @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n @param actionId Identifier for the action to be performed\n @param account Account trying to perform the action\n @param where Target contract for the action\n @return success True if the action is permitted"},"functionSelector":"9be2a884","id":39,"implemented":false,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"524:10:2","nodeType":"FunctionDefinition","parameters":{"id":35,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30,"mutability":"mutable","name":"actionId","nameLocation":"543:8:2","nodeType":"VariableDeclaration","scope":39,"src":"535:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":29,"name":"bytes32","nodeType":"ElementaryTypeName","src":"535:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":32,"mutability":"mutable","name":"account","nameLocation":"561:7:2","nodeType":"VariableDeclaration","scope":39,"src":"553:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31,"name":"address","nodeType":"ElementaryTypeName","src":"553:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34,"mutability":"mutable","name":"where","nameLocation":"578:5:2","nodeType":"VariableDeclaration","scope":39,"src":"570:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33,"name":"address","nodeType":"ElementaryTypeName","src":"570:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"534:50:2"},"returnParameters":{"id":38,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37,"mutability":"mutable","name":"success","nameLocation":"613:7:2","nodeType":"VariableDeclaration","scope":39,"src":"608:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":36,"name":"bool","nodeType":"ElementaryTypeName","src":"608:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"607:14:2"},"scope":40,"src":"515:107:2","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":41,"src":"128:496:2","usedErrors":[],"usedEvents":[]}],"src":"46:579:2"},"id":2},"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","exportedSymbols":{"IBasePool":[90],"ISwapFeePercentageBounds":[659],"IUnbalancedLiquidityInvariantRatioBounds":[675],"PoolSwapParams":[2374],"Rounding":[2334],"SwapKind":[2337]},"id":91,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":42,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:3"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol","file":"./IUnbalancedLiquidityInvariantRatioBounds.sol","id":44,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":91,"sourceUnit":676,"src":"72:106:3","symbolAliases":[{"foreign":{"id":43,"name":"IUnbalancedLiquidityInvariantRatioBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":675,"src":"81:40:3","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol","file":"./ISwapFeePercentageBounds.sol","id":46,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":91,"sourceUnit":660,"src":"179:74:3","symbolAliases":[{"foreign":{"id":45,"name":"ISwapFeePercentageBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":659,"src":"188:24:3","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":50,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":91,"sourceUnit":2474,"src":"254:70:3","symbolAliases":[{"foreign":{"id":47,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2374,"src":"263:14:3","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":48,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"279:8:3","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":49,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2337,"src":"289:8:3","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":52,"name":"ISwapFeePercentageBounds","nameLocations":["733:24:3"],"nodeType":"IdentifierPath","referencedDeclaration":659,"src":"733:24:3"},"id":53,"nodeType":"InheritanceSpecifier","src":"733:24:3"},{"baseName":{"id":54,"name":"IUnbalancedLiquidityInvariantRatioBounds","nameLocations":["759:40:3"],"nodeType":"IdentifierPath","referencedDeclaration":675,"src":"759:40:3"},"id":55,"nodeType":"InheritanceSpecifier","src":"759:40:3"}],"canonicalName":"IBasePool","contractDependencies":[],"contractKind":"interface","documentation":{"id":51,"nodeType":"StructuredDocumentation","src":"326:383:3","text":" @notice Base interface for a Balancer Pool.\n @dev All pool types should implement this interface. Note that it also requires implementation of:\n - `ISwapFeePercentageBounds` to specify the minimum and maximum swap fee percentages.\n - `IUnbalancedLiquidityInvariantRatioBounds` to specify how much the invariant can change during an unbalanced\n liquidity operation."},"fullyImplemented":false,"id":90,"linearizedBaseContracts":[90,675,659],"name":"IBasePool","nameLocation":"720:9:3","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":56,"nodeType":"StructuredDocumentation","src":"1014:1934:3","text":" @notice Computes the pool's invariant.\n @dev This function computes the invariant based on current balances (and potentially other pool state).\n The rounding direction must be respected for the Vault to round in the pool's favor when calling this function.\n If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be\n returned for both rounding directions.\n You can think of the invariant as a measure of the \"value\" of the pool, which is related to the total liquidity\n (i.e., the \"BPT rate\" is `invariant` / `totalSupply`). Two critical properties must hold:\n 1) The invariant should not change due to a swap. In practice, it can *increase* due to swap fees, which\n effectively add liquidity after the swap - but it should never decrease.\n 2) The invariant must be \"linear\"; i.e., increasing the balances proportionally must increase the invariant in\n the same proportion: inv(a * n, b * n, c * n) = inv(a, b, c) * n\n Property #1 is required to prevent \"round trip\" paths that drain value from the pool (and all LP shareholders).\n Intuitively, an accurate pricing algorithm ensures the user gets an equal value of token out given token in, so\n the total value should not change.\n Property #2 is essential for the \"fungibility\" of LP shares. If it did not hold, then different users depositing\n the same total value would get a different number of LP shares. In that case, LP shares would not be\n interchangeable, as they must be in a fair DEX.\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param rounding Rounding direction to consider when computing the invariant\n @return invariant The calculated invariant of the pool, represented as a uint256"},"functionSelector":"984de9e8","id":67,"implemented":false,"kind":"function","modifiers":[],"name":"computeInvariant","nameLocation":"2962:16:3","nodeType":"FunctionDefinition","parameters":{"id":63,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"3005:20:3","nodeType":"VariableDeclaration","scope":67,"src":"2988:37:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":57,"name":"uint256","nodeType":"ElementaryTypeName","src":"2988:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":58,"nodeType":"ArrayTypeName","src":"2988:9:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":62,"mutability":"mutable","name":"rounding","nameLocation":"3044:8:3","nodeType":"VariableDeclaration","scope":67,"src":"3035:17:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"},"typeName":{"id":61,"nodeType":"UserDefinedTypeName","pathNode":{"id":60,"name":"Rounding","nameLocations":["3035:8:3"],"nodeType":"IdentifierPath","referencedDeclaration":2334,"src":"3035:8:3"},"referencedDeclaration":2334,"src":"3035:8:3","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"2978:80:3"},"returnParameters":{"id":66,"nodeType":"ParameterList","parameters":[{"constant":false,"id":65,"mutability":"mutable","name":"invariant","nameLocation":"3090:9:3","nodeType":"VariableDeclaration","scope":67,"src":"3082:17:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":64,"name":"uint256","nodeType":"ElementaryTypeName","src":"3082:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3081:19:3"},"scope":90,"src":"2953:148:3","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":68,"nodeType":"StructuredDocumentation","src":"3107:725:3","text":" @notice Computes a new token balance, given the invariant growth ratio and all other balances.\n @dev Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath.\n The pool must round up for the Vault to round in the protocol's favor when calling this function.\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenInIndex The index of the token we're computing the balance for, sorted in token registration order\n @param invariantRatio The ratio of the new invariant (after an operation) to the old\n @return newBalance The new balance of the selected token, after the operation"},"functionSelector":"16a0b3e0","id":80,"implemented":false,"kind":"function","modifiers":[],"name":"computeBalance","nameLocation":"3846:14:3","nodeType":"FunctionDefinition","parameters":{"id":76,"nodeType":"ParameterList","parameters":[{"constant":false,"id":71,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"3887:20:3","nodeType":"VariableDeclaration","scope":80,"src":"3870:37:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":69,"name":"uint256","nodeType":"ElementaryTypeName","src":"3870:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":70,"nodeType":"ArrayTypeName","src":"3870:9:3","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":73,"mutability":"mutable","name":"tokenInIndex","nameLocation":"3925:12:3","nodeType":"VariableDeclaration","scope":80,"src":"3917:20:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":72,"name":"uint256","nodeType":"ElementaryTypeName","src":"3917:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":75,"mutability":"mutable","name":"invariantRatio","nameLocation":"3955:14:3","nodeType":"VariableDeclaration","scope":80,"src":"3947:22:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74,"name":"uint256","nodeType":"ElementaryTypeName","src":"3947:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3860:115:3"},"returnParameters":{"id":79,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78,"mutability":"mutable","name":"newBalance","nameLocation":"4007:10:3","nodeType":"VariableDeclaration","scope":80,"src":"3999:18:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":77,"name":"uint256","nodeType":"ElementaryTypeName","src":"3999:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3998:20:3"},"scope":90,"src":"3837:182:3","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":81,"nodeType":"StructuredDocumentation","src":"4233:206:3","text":" @notice Execute a swap in the pool.\n @param params Swap parameters (see above for struct definition)\n @return amountCalculatedScaled18 Calculated amount for the swap operation"},"functionSelector":"72c98186","id":89,"implemented":false,"kind":"function","modifiers":[],"name":"onSwap","nameLocation":"4453:6:3","nodeType":"FunctionDefinition","parameters":{"id":85,"nodeType":"ParameterList","parameters":[{"constant":false,"id":84,"mutability":"mutable","name":"params","nameLocation":"4484:6:3","nodeType":"VariableDeclaration","scope":89,"src":"4460:30:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":83,"nodeType":"UserDefinedTypeName","pathNode":{"id":82,"name":"PoolSwapParams","nameLocations":["4460:14:3"],"nodeType":"IdentifierPath","referencedDeclaration":2374,"src":"4460:14:3"},"referencedDeclaration":2374,"src":"4460:14:3","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"4459:32:3"},"returnParameters":{"id":88,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"4518:24:3","nodeType":"VariableDeclaration","scope":89,"src":"4510:32:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86,"name":"uint256","nodeType":"ElementaryTypeName","src":"4510:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4509:34:3"},"scope":90,"src":"4444:100:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":91,"src":"710:3836:3","usedErrors":[],"usedEvents":[]}],"src":"46:4501:3"},"id":3},"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol","exportedSymbols":{"IERC20MultiTokenErrors":[98]},"id":99,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":92,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:4"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20MultiTokenErrors","contractDependencies":[],"contractKind":"interface","fullyImplemented":true,"id":98,"linearizedBaseContracts":[98],"name":"IERC20MultiTokenErrors","nameLocation":"82:22:4","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":93,"nodeType":"StructuredDocumentation","src":"111:177:4","text":" @notice The total supply of a pool token can't be lower than the absolute minimum.\n @param totalSupply The total supply value that was below the minimum"},"errorSelector":"d38d20fc","id":97,"name":"PoolTotalSupplyTooLow","nameLocation":"299:21:4","nodeType":"ErrorDefinition","parameters":{"id":96,"nodeType":"ParameterList","parameters":[{"constant":false,"id":95,"mutability":"mutable","name":"totalSupply","nameLocation":"329:11:4","nodeType":"VariableDeclaration","scope":97,"src":"321:19:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":94,"name":"uint256","nodeType":"ElementaryTypeName","src":"321:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"320:21:4"},"src":"293:49:4"}],"scope":99,"src":"72:272:4","usedErrors":[97],"usedEvents":[]}],"src":"46:299:4"},"id":4},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","exportedSymbols":{"AddLiquidityKind":[2409],"AfterSwapParams":[2403],"HookFlags":[2229],"IHooks":[300],"LiquidityManagement":[2182],"PoolSwapParams":[2374],"RemoveLiquidityKind":[2430],"SwapKind":[2337],"TokenConfig":[2296]},"id":301,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":100,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:5"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":109,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":301,"sourceUnit":2474,"src":"289:193:5","symbolAliases":[{"foreign":{"id":101,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2296,"src":"302:11:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":102,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2182,"src":"319:19:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":103,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2374,"src":"344:14:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":104,"name":"AfterSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2403,"src":"364:15:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":105,"name":"HookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2229,"src":"385:9:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":106,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2409,"src":"400:16:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":107,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2430,"src":"422:19:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":108,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2337,"src":"447:8:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IHooks","contractDependencies":[],"contractKind":"interface","documentation":{"id":110,"nodeType":"StructuredDocumentation","src":"484:490:5","text":" @notice Interface for pool hooks.\n @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)"},"fullyImplemented":false,"id":300,"linearizedBaseContracts":[300],"name":"IHooks","nameLocation":"985:6:5","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":111,"nodeType":"StructuredDocumentation","src":"1205:769:5","text":" @notice Hook executed when a pool is registered with a non-zero hooks contract.\n @dev Returns true if registration was successful, and false to revert the pool registration.\n Make sure this function is properly implemented (e.g. check the factory, and check that the\n given pool is from the factory). The Vault address will be msg.sender.\n @param factory Address of the pool factory (contract deploying the pool)\n @param pool Address of the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param liquidityManagement Liquidity management flags indicating which functions are enabled\n @return success True if the hook allowed the registration, false otherwise"},"functionSelector":"0b89f182","id":127,"implemented":false,"kind":"function","modifiers":[],"name":"onRegister","nameLocation":"1988:10:5","nodeType":"FunctionDefinition","parameters":{"id":123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":113,"mutability":"mutable","name":"factory","nameLocation":"2016:7:5","nodeType":"VariableDeclaration","scope":127,"src":"2008:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":112,"name":"address","nodeType":"ElementaryTypeName","src":"2008:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":115,"mutability":"mutable","name":"pool","nameLocation":"2041:4:5","nodeType":"VariableDeclaration","scope":127,"src":"2033:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":114,"name":"address","nodeType":"ElementaryTypeName","src":"2033:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":119,"mutability":"mutable","name":"tokenConfig","nameLocation":"2076:11:5","nodeType":"VariableDeclaration","scope":127,"src":"2055:32:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2296_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":117,"nodeType":"UserDefinedTypeName","pathNode":{"id":116,"name":"TokenConfig","nameLocations":["2055:11:5"],"nodeType":"IdentifierPath","referencedDeclaration":2296,"src":"2055:11:5"},"referencedDeclaration":2296,"src":"2055:11:5","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2296_storage_ptr","typeString":"struct TokenConfig"}},"id":118,"nodeType":"ArrayTypeName","src":"2055:13:5","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2296_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":122,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2126:19:5","nodeType":"VariableDeclaration","scope":127,"src":"2097:48:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2182_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":121,"nodeType":"UserDefinedTypeName","pathNode":{"id":120,"name":"LiquidityManagement","nameLocations":["2097:19:5"],"nodeType":"IdentifierPath","referencedDeclaration":2182,"src":"2097:19:5"},"referencedDeclaration":2182,"src":"2097:19:5","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2182_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1998:153:5"},"returnParameters":{"id":126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":125,"mutability":"mutable","name":"success","nameLocation":"2175:7:5","nodeType":"VariableDeclaration","scope":127,"src":"2170:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":124,"name":"bool","nodeType":"ElementaryTypeName","src":"2170:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2169:14:5"},"scope":300,"src":"1979:205:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":128,"nodeType":"StructuredDocumentation","src":"2190:412:5","text":" @notice Return the set of hooks implemented by the contract.\n @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n `onRegister` is the only \"mandatory\" hook.\n @return hookFlags Flags indicating which hooks the contract supports"},"functionSelector":"d77153a7","id":134,"implemented":false,"kind":"function","modifiers":[],"name":"getHookFlags","nameLocation":"2616:12:5","nodeType":"FunctionDefinition","parameters":{"id":129,"nodeType":"ParameterList","parameters":[],"src":"2628:2:5"},"returnParameters":{"id":133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":132,"mutability":"mutable","name":"hookFlags","nameLocation":"2671:9:5","nodeType":"VariableDeclaration","scope":134,"src":"2654:26:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2229_memory_ptr","typeString":"struct HookFlags"},"typeName":{"id":131,"nodeType":"UserDefinedTypeName","pathNode":{"id":130,"name":"HookFlags","nameLocations":["2654:9:5"],"nodeType":"IdentifierPath","referencedDeclaration":2229,"src":"2654:9:5"},"referencedDeclaration":2229,"src":"2654:9:5","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2229_storage_ptr","typeString":"struct HookFlags"}},"visibility":"internal"}],"src":"2653:28:5"},"scope":300,"src":"2607:75:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":135,"nodeType":"StructuredDocumentation","src":"2897:484:5","text":" @notice Hook executed before pool initialization.\n @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with initialization"},"functionSelector":"1c149e28","id":145,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeInitialize","nameLocation":"3395:18:5","nodeType":"FunctionDefinition","parameters":{"id":141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":138,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"3431:14:5","nodeType":"VariableDeclaration","scope":145,"src":"3414:31:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":136,"name":"uint256","nodeType":"ElementaryTypeName","src":"3414:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":137,"nodeType":"ArrayTypeName","src":"3414:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":140,"mutability":"mutable","name":"userData","nameLocation":"3460:8:5","nodeType":"VariableDeclaration","scope":145,"src":"3447:21:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":139,"name":"bytes","nodeType":"ElementaryTypeName","src":"3447:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3413:56:5"},"returnParameters":{"id":144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":143,"mutability":"mutable","name":"success","nameLocation":"3493:7:5","nodeType":"VariableDeclaration","scope":145,"src":"3488:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":142,"name":"bool","nodeType":"ElementaryTypeName","src":"3488:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3487:14:5"},"scope":300,"src":"3386:116:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":146,"nodeType":"StructuredDocumentation","src":"3508:563:5","text":" @notice Hook to be executed after pool initialization.\n @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param bptAmountOut Amount of pool tokens minted during initialization\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool accepts the initialization results"},"functionSelector":"38be241d","id":158,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterInitialize","nameLocation":"4085:17:5","nodeType":"FunctionDefinition","parameters":{"id":154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":149,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"4129:14:5","nodeType":"VariableDeclaration","scope":158,"src":"4112:31:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":147,"name":"uint256","nodeType":"ElementaryTypeName","src":"4112:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":148,"nodeType":"ArrayTypeName","src":"4112:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":151,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4161:12:5","nodeType":"VariableDeclaration","scope":158,"src":"4153:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":150,"name":"uint256","nodeType":"ElementaryTypeName","src":"4153:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":153,"mutability":"mutable","name":"userData","nameLocation":"4196:8:5","nodeType":"VariableDeclaration","scope":158,"src":"4183:21:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":152,"name":"bytes","nodeType":"ElementaryTypeName","src":"4183:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4102:108:5"},"returnParameters":{"id":157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":156,"mutability":"mutable","name":"success","nameLocation":"4234:7:5","nodeType":"VariableDeclaration","scope":158,"src":"4229:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":155,"name":"bool","nodeType":"ElementaryTypeName","src":"4229:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4228:14:5"},"scope":300,"src":"4076:167:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":159,"nodeType":"StructuredDocumentation","src":"4461:953:5","text":" @notice Hook to be executed before adding liquidity.\n @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param maxAmountsInScaled18 Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"45421ec7","id":181,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeAddLiquidity","nameLocation":"5428:20:5","nodeType":"FunctionDefinition","parameters":{"id":177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":161,"mutability":"mutable","name":"router","nameLocation":"5466:6:5","nodeType":"VariableDeclaration","scope":181,"src":"5458:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":160,"name":"address","nodeType":"ElementaryTypeName","src":"5458:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":163,"mutability":"mutable","name":"pool","nameLocation":"5490:4:5","nodeType":"VariableDeclaration","scope":181,"src":"5482:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":162,"name":"address","nodeType":"ElementaryTypeName","src":"5482:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":166,"mutability":"mutable","name":"kind","nameLocation":"5521:4:5","nodeType":"VariableDeclaration","scope":181,"src":"5504:21:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"},"typeName":{"id":165,"nodeType":"UserDefinedTypeName","pathNode":{"id":164,"name":"AddLiquidityKind","nameLocations":["5504:16:5"],"nodeType":"IdentifierPath","referencedDeclaration":2409,"src":"5504:16:5"},"referencedDeclaration":2409,"src":"5504:16:5","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":169,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"5552:20:5","nodeType":"VariableDeclaration","scope":181,"src":"5535:37:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":167,"name":"uint256","nodeType":"ElementaryTypeName","src":"5535:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":168,"nodeType":"ArrayTypeName","src":"5535:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":171,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"5590:15:5","nodeType":"VariableDeclaration","scope":181,"src":"5582:23:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":170,"name":"uint256","nodeType":"ElementaryTypeName","src":"5582:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":174,"mutability":"mutable","name":"balancesScaled18","nameLocation":"5632:16:5","nodeType":"VariableDeclaration","scope":181,"src":"5615:33:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":172,"name":"uint256","nodeType":"ElementaryTypeName","src":"5615:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":173,"nodeType":"ArrayTypeName","src":"5615:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":176,"mutability":"mutable","name":"userData","nameLocation":"5671:8:5","nodeType":"VariableDeclaration","scope":181,"src":"5658:21:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":175,"name":"bytes","nodeType":"ElementaryTypeName","src":"5658:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5448:237:5"},"returnParameters":{"id":180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":179,"mutability":"mutable","name":"success","nameLocation":"5709:7:5","nodeType":"VariableDeclaration","scope":181,"src":"5704:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":178,"name":"bool","nodeType":"ElementaryTypeName","src":"5704:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5703:14:5"},"scope":300,"src":"5419:299:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":182,"nodeType":"StructuredDocumentation","src":"5724:1250:5","text":" @notice Hook to be executed after adding liquidity.\n @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n @param bptAmountOut Amount of pool tokens minted\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook"},"functionSelector":"976907cc","id":210,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterAddLiquidity","nameLocation":"6988:19:5","nodeType":"FunctionDefinition","parameters":{"id":203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":184,"mutability":"mutable","name":"router","nameLocation":"7025:6:5","nodeType":"VariableDeclaration","scope":210,"src":"7017:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":183,"name":"address","nodeType":"ElementaryTypeName","src":"7017:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":186,"mutability":"mutable","name":"pool","nameLocation":"7049:4:5","nodeType":"VariableDeclaration","scope":210,"src":"7041:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":185,"name":"address","nodeType":"ElementaryTypeName","src":"7041:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":189,"mutability":"mutable","name":"kind","nameLocation":"7080:4:5","nodeType":"VariableDeclaration","scope":210,"src":"7063:21:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"},"typeName":{"id":188,"nodeType":"UserDefinedTypeName","pathNode":{"id":187,"name":"AddLiquidityKind","nameLocations":["7063:16:5"],"nodeType":"IdentifierPath","referencedDeclaration":2409,"src":"7063:16:5"},"referencedDeclaration":2409,"src":"7063:16:5","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":192,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"7111:17:5","nodeType":"VariableDeclaration","scope":210,"src":"7094:34:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":190,"name":"uint256","nodeType":"ElementaryTypeName","src":"7094:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":191,"nodeType":"ArrayTypeName","src":"7094:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":195,"mutability":"mutable","name":"amountsInRaw","nameLocation":"7155:12:5","nodeType":"VariableDeclaration","scope":210,"src":"7138:29:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":193,"name":"uint256","nodeType":"ElementaryTypeName","src":"7138:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":194,"nodeType":"ArrayTypeName","src":"7138:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":197,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7185:12:5","nodeType":"VariableDeclaration","scope":210,"src":"7177:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":196,"name":"uint256","nodeType":"ElementaryTypeName","src":"7177:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":200,"mutability":"mutable","name":"balancesScaled18","nameLocation":"7224:16:5","nodeType":"VariableDeclaration","scope":210,"src":"7207:33:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":198,"name":"uint256","nodeType":"ElementaryTypeName","src":"7207:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":199,"nodeType":"ArrayTypeName","src":"7207:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":202,"mutability":"mutable","name":"userData","nameLocation":"7263:8:5","nodeType":"VariableDeclaration","scope":210,"src":"7250:21:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":201,"name":"bytes","nodeType":"ElementaryTypeName","src":"7250:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7007:270:5"},"returnParameters":{"id":209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":205,"mutability":"mutable","name":"success","nameLocation":"7301:7:5","nodeType":"VariableDeclaration","scope":210,"src":"7296:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":204,"name":"bool","nodeType":"ElementaryTypeName","src":"7296:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":208,"mutability":"mutable","name":"hookAdjustedAmountsInRaw","nameLocation":"7327:24:5","nodeType":"VariableDeclaration","scope":210,"src":"7310:41:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":206,"name":"uint256","nodeType":"ElementaryTypeName","src":"7310:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":207,"nodeType":"ArrayTypeName","src":"7310:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7295:57:5"},"scope":300,"src":"6979:374:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":211,"nodeType":"StructuredDocumentation","src":"7572:992:5","text":" @notice Hook to be executed before removing liquidity.\n @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"ba5f9f40","id":233,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeRemoveLiquidity","nameLocation":"8578:23:5","nodeType":"FunctionDefinition","parameters":{"id":229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":213,"mutability":"mutable","name":"router","nameLocation":"8619:6:5","nodeType":"VariableDeclaration","scope":233,"src":"8611:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":212,"name":"address","nodeType":"ElementaryTypeName","src":"8611:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":215,"mutability":"mutable","name":"pool","nameLocation":"8643:4:5","nodeType":"VariableDeclaration","scope":233,"src":"8635:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":214,"name":"address","nodeType":"ElementaryTypeName","src":"8635:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":218,"mutability":"mutable","name":"kind","nameLocation":"8677:4:5","nodeType":"VariableDeclaration","scope":233,"src":"8657:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":217,"nodeType":"UserDefinedTypeName","pathNode":{"id":216,"name":"RemoveLiquidityKind","nameLocations":["8657:19:5"],"nodeType":"IdentifierPath","referencedDeclaration":2430,"src":"8657:19:5"},"referencedDeclaration":2430,"src":"8657:19:5","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":220,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"8699:14:5","nodeType":"VariableDeclaration","scope":233,"src":"8691:22:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":219,"name":"uint256","nodeType":"ElementaryTypeName","src":"8691:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":223,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"8740:21:5","nodeType":"VariableDeclaration","scope":233,"src":"8723:38:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":221,"name":"uint256","nodeType":"ElementaryTypeName","src":"8723:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":222,"nodeType":"ArrayTypeName","src":"8723:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":226,"mutability":"mutable","name":"balancesScaled18","nameLocation":"8788:16:5","nodeType":"VariableDeclaration","scope":233,"src":"8771:33:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":224,"name":"uint256","nodeType":"ElementaryTypeName","src":"8771:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":225,"nodeType":"ArrayTypeName","src":"8771:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":228,"mutability":"mutable","name":"userData","nameLocation":"8827:8:5","nodeType":"VariableDeclaration","scope":233,"src":"8814:21:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":227,"name":"bytes","nodeType":"ElementaryTypeName","src":"8814:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8601:240:5"},"returnParameters":{"id":232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":231,"mutability":"mutable","name":"success","nameLocation":"8865:7:5","nodeType":"VariableDeclaration","scope":233,"src":"8860:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":230,"name":"bool","nodeType":"ElementaryTypeName","src":"8860:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8859:14:5"},"scope":300,"src":"8569:305:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":234,"nodeType":"StructuredDocumentation","src":"8880:1276:5","text":" @notice Hook to be executed after removing liquidity.\n @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param bptAmountIn Amount of pool tokens to burn\n @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook"},"functionSelector":"2754888d","id":262,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterRemoveLiquidity","nameLocation":"10170:22:5","nodeType":"FunctionDefinition","parameters":{"id":255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":236,"mutability":"mutable","name":"router","nameLocation":"10210:6:5","nodeType":"VariableDeclaration","scope":262,"src":"10202:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":235,"name":"address","nodeType":"ElementaryTypeName","src":"10202:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":238,"mutability":"mutable","name":"pool","nameLocation":"10234:4:5","nodeType":"VariableDeclaration","scope":262,"src":"10226:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":237,"name":"address","nodeType":"ElementaryTypeName","src":"10226:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":241,"mutability":"mutable","name":"kind","nameLocation":"10268:4:5","nodeType":"VariableDeclaration","scope":262,"src":"10248:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":240,"nodeType":"UserDefinedTypeName","pathNode":{"id":239,"name":"RemoveLiquidityKind","nameLocations":["10248:19:5"],"nodeType":"IdentifierPath","referencedDeclaration":2430,"src":"10248:19:5"},"referencedDeclaration":2430,"src":"10248:19:5","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":243,"mutability":"mutable","name":"bptAmountIn","nameLocation":"10290:11:5","nodeType":"VariableDeclaration","scope":262,"src":"10282:19:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":242,"name":"uint256","nodeType":"ElementaryTypeName","src":"10282:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":246,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"10328:18:5","nodeType":"VariableDeclaration","scope":262,"src":"10311:35:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":244,"name":"uint256","nodeType":"ElementaryTypeName","src":"10311:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":245,"nodeType":"ArrayTypeName","src":"10311:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":249,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"10373:13:5","nodeType":"VariableDeclaration","scope":262,"src":"10356:30:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":247,"name":"uint256","nodeType":"ElementaryTypeName","src":"10356:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":248,"nodeType":"ArrayTypeName","src":"10356:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":252,"mutability":"mutable","name":"balancesScaled18","nameLocation":"10413:16:5","nodeType":"VariableDeclaration","scope":262,"src":"10396:33:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":250,"name":"uint256","nodeType":"ElementaryTypeName","src":"10396:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":251,"nodeType":"ArrayTypeName","src":"10396:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":254,"mutability":"mutable","name":"userData","nameLocation":"10452:8:5","nodeType":"VariableDeclaration","scope":262,"src":"10439:21:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":253,"name":"bytes","nodeType":"ElementaryTypeName","src":"10439:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10192:274:5"},"returnParameters":{"id":261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":257,"mutability":"mutable","name":"success","nameLocation":"10490:7:5","nodeType":"VariableDeclaration","scope":262,"src":"10485:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":256,"name":"bool","nodeType":"ElementaryTypeName","src":"10485:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":260,"mutability":"mutable","name":"hookAdjustedAmountsOutRaw","nameLocation":"10516:25:5","nodeType":"VariableDeclaration","scope":262,"src":"10499:42:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":258,"name":"uint256","nodeType":"ElementaryTypeName","src":"10499:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":259,"nodeType":"ArrayTypeName","src":"10499:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10484:58:5"},"scope":300,"src":"10161:382:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":263,"nodeType":"StructuredDocumentation","src":"10753:556:5","text":" @notice Called before a swap to give the Pool an opportunity to perform actions.\n @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"5211fa77","id":273,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeSwap","nameLocation":"11323:12:5","nodeType":"FunctionDefinition","parameters":{"id":269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":266,"mutability":"mutable","name":"params","nameLocation":"11360:6:5","nodeType":"VariableDeclaration","scope":273,"src":"11336:30:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":265,"nodeType":"UserDefinedTypeName","pathNode":{"id":264,"name":"PoolSwapParams","nameLocations":["11336:14:5"],"nodeType":"IdentifierPath","referencedDeclaration":2374,"src":"11336:14:5"},"referencedDeclaration":2374,"src":"11336:14:5","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":268,"mutability":"mutable","name":"pool","nameLocation":"11376:4:5","nodeType":"VariableDeclaration","scope":273,"src":"11368:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":267,"name":"address","nodeType":"ElementaryTypeName","src":"11368:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11335:46:5"},"returnParameters":{"id":272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":271,"mutability":"mutable","name":"success","nameLocation":"11405:7:5","nodeType":"VariableDeclaration","scope":273,"src":"11400:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":270,"name":"bool","nodeType":"ElementaryTypeName","src":"11400:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11399:14:5"},"scope":300,"src":"11314:100:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":274,"nodeType":"StructuredDocumentation","src":"11420:671:5","text":" @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n use the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see above for struct definition)\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook"},"functionSelector":"18b6eb55","id":284,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterSwap","nameLocation":"12105:11:5","nodeType":"FunctionDefinition","parameters":{"id":278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":277,"mutability":"mutable","name":"params","nameLocation":"12151:6:5","nodeType":"VariableDeclaration","scope":284,"src":"12126:31:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$2403_calldata_ptr","typeString":"struct AfterSwapParams"},"typeName":{"id":276,"nodeType":"UserDefinedTypeName","pathNode":{"id":275,"name":"AfterSwapParams","nameLocations":["12126:15:5"],"nodeType":"IdentifierPath","referencedDeclaration":2403,"src":"12126:15:5"},"referencedDeclaration":2403,"src":"12126:15:5","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$2403_storage_ptr","typeString":"struct AfterSwapParams"}},"visibility":"internal"}],"src":"12116:47:5"},"returnParameters":{"id":283,"nodeType":"ParameterList","parameters":[{"constant":false,"id":280,"mutability":"mutable","name":"success","nameLocation":"12187:7:5","nodeType":"VariableDeclaration","scope":284,"src":"12182:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":279,"name":"bool","nodeType":"ElementaryTypeName","src":"12182:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":282,"mutability":"mutable","name":"hookAdjustedAmountCalculatedRaw","nameLocation":"12204:31:5","nodeType":"VariableDeclaration","scope":284,"src":"12196:39:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":281,"name":"uint256","nodeType":"ElementaryTypeName","src":"12196:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12181:55:5"},"scope":300,"src":"12096:141:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":285,"nodeType":"StructuredDocumentation","src":"12243:795:5","text":" @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n @return success True if the pool wishes to proceed with settlement\n @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value"},"functionSelector":"a0e8f5ac","id":299,"implemented":false,"kind":"function","modifiers":[],"name":"onComputeDynamicSwapFeePercentage","nameLocation":"13052:33:5","nodeType":"FunctionDefinition","parameters":{"id":293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":288,"mutability":"mutable","name":"params","nameLocation":"13119:6:5","nodeType":"VariableDeclaration","scope":299,"src":"13095:30:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":287,"nodeType":"UserDefinedTypeName","pathNode":{"id":286,"name":"PoolSwapParams","nameLocations":["13095:14:5"],"nodeType":"IdentifierPath","referencedDeclaration":2374,"src":"13095:14:5"},"referencedDeclaration":2374,"src":"13095:14:5","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":290,"mutability":"mutable","name":"pool","nameLocation":"13143:4:5","nodeType":"VariableDeclaration","scope":299,"src":"13135:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":289,"name":"address","nodeType":"ElementaryTypeName","src":"13135:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":292,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"13165:23:5","nodeType":"VariableDeclaration","scope":299,"src":"13157:31:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":291,"name":"uint256","nodeType":"ElementaryTypeName","src":"13157:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13085:109:5"},"returnParameters":{"id":298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":295,"mutability":"mutable","name":"success","nameLocation":"13223:7:5","nodeType":"VariableDeclaration","scope":299,"src":"13218:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":294,"name":"bool","nodeType":"ElementaryTypeName","src":"13218:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":297,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"13240:24:5","nodeType":"VariableDeclaration","scope":299,"src":"13232:32:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":296,"name":"uint256","nodeType":"ElementaryTypeName","src":"13232:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13217:48:5"},"scope":300,"src":"13043:223:5","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":301,"src":"975:12293:5","usedErrors":[],"usedEvents":[]}],"src":"46:13223:5"},"id":5},"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol","exportedSymbols":{"IPoolLiquidity":[356]},"id":357,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":302,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:6"},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolLiquidity","contractDependencies":[],"contractKind":"interface","documentation":{"id":303,"nodeType":"StructuredDocumentation","src":"72:55:6","text":"@notice Interface for custom liquidity operations."},"fullyImplemented":false,"id":356,"linearizedBaseContracts":[356],"name":"IPoolLiquidity","nameLocation":"137:14:6","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":304,"nodeType":"StructuredDocumentation","src":"158:817:6","text":" @notice Add liquidity to the pool with a custom hook.\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param maxAmountsInScaled18 Maximum input amounts, sorted in token registration order\n @param minBptAmountOut Minimum amount of output pool tokens\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Arbitrary data sent with the encoded request\n @return amountsInScaled18 Input token amounts, sorted in token registration order\n @return bptAmountOut Calculated pool token amount to receive\n @return swapFeeAmountsScaled18 The amount of swap fees charged for each token\n @return returnData Arbitrary data with an encoded response from the pool"},"functionSelector":"e4c43663","id":329,"implemented":false,"kind":"function","modifiers":[],"name":"onAddLiquidityCustom","nameLocation":"989:20:6","nodeType":"FunctionDefinition","parameters":{"id":317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":306,"mutability":"mutable","name":"router","nameLocation":"1027:6:6","nodeType":"VariableDeclaration","scope":329,"src":"1019:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":305,"name":"address","nodeType":"ElementaryTypeName","src":"1019:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":309,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"1060:20:6","nodeType":"VariableDeclaration","scope":329,"src":"1043:37:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":307,"name":"uint256","nodeType":"ElementaryTypeName","src":"1043:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":308,"nodeType":"ArrayTypeName","src":"1043:9:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":311,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"1098:15:6","nodeType":"VariableDeclaration","scope":329,"src":"1090:23:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":310,"name":"uint256","nodeType":"ElementaryTypeName","src":"1090:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":314,"mutability":"mutable","name":"balancesScaled18","nameLocation":"1140:16:6","nodeType":"VariableDeclaration","scope":329,"src":"1123:33:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":312,"name":"uint256","nodeType":"ElementaryTypeName","src":"1123:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":313,"nodeType":"ArrayTypeName","src":"1123:9:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":316,"mutability":"mutable","name":"userData","nameLocation":"1179:8:6","nodeType":"VariableDeclaration","scope":329,"src":"1166:21:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":315,"name":"bytes","nodeType":"ElementaryTypeName","src":"1166:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1009:184:6"},"returnParameters":{"id":328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":320,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"1258:17:6","nodeType":"VariableDeclaration","scope":329,"src":"1241:34:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":318,"name":"uint256","nodeType":"ElementaryTypeName","src":"1241:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":319,"nodeType":"ArrayTypeName","src":"1241:9:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":322,"mutability":"mutable","name":"bptAmountOut","nameLocation":"1297:12:6","nodeType":"VariableDeclaration","scope":329,"src":"1289:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":321,"name":"uint256","nodeType":"ElementaryTypeName","src":"1289:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":325,"mutability":"mutable","name":"swapFeeAmountsScaled18","nameLocation":"1340:22:6","nodeType":"VariableDeclaration","scope":329,"src":"1323:39:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":323,"name":"uint256","nodeType":"ElementaryTypeName","src":"1323:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":324,"nodeType":"ArrayTypeName","src":"1323:9:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":327,"mutability":"mutable","name":"returnData","nameLocation":"1389:10:6","nodeType":"VariableDeclaration","scope":329,"src":"1376:23:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":326,"name":"bytes","nodeType":"ElementaryTypeName","src":"1376:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1227:182:6"},"scope":356,"src":"980:430:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":330,"nodeType":"StructuredDocumentation","src":"1416:827:6","text":" @notice Remove liquidity from the pool with a custom hook.\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Arbitrary data sent with the encoded request\n @return bptAmountIn Calculated pool token amount to burn\n @return amountsOutScaled18 Amount of tokens to receive, sorted in token registration order\n @return swapFeeAmountsScaled18 The amount of swap fees charged for each token\n @return returnData Arbitrary data with an encoded response from the pool"},"functionSelector":"ab68e28c","id":355,"implemented":false,"kind":"function","modifiers":[],"name":"onRemoveLiquidityCustom","nameLocation":"2257:23:6","nodeType":"FunctionDefinition","parameters":{"id":343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":332,"mutability":"mutable","name":"router","nameLocation":"2298:6:6","nodeType":"VariableDeclaration","scope":355,"src":"2290:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":331,"name":"address","nodeType":"ElementaryTypeName","src":"2290:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":334,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"2322:14:6","nodeType":"VariableDeclaration","scope":355,"src":"2314:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":333,"name":"uint256","nodeType":"ElementaryTypeName","src":"2314:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":337,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"2363:21:6","nodeType":"VariableDeclaration","scope":355,"src":"2346:38:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":335,"name":"uint256","nodeType":"ElementaryTypeName","src":"2346:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":336,"nodeType":"ArrayTypeName","src":"2346:9:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":340,"mutability":"mutable","name":"balancesScaled18","nameLocation":"2411:16:6","nodeType":"VariableDeclaration","scope":355,"src":"2394:33:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":338,"name":"uint256","nodeType":"ElementaryTypeName","src":"2394:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":339,"nodeType":"ArrayTypeName","src":"2394:9:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":342,"mutability":"mutable","name":"userData","nameLocation":"2450:8:6","nodeType":"VariableDeclaration","scope":355,"src":"2437:21:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":341,"name":"bytes","nodeType":"ElementaryTypeName","src":"2437:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2280:184:6"},"returnParameters":{"id":354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":345,"mutability":"mutable","name":"bptAmountIn","nameLocation":"2520:11:6","nodeType":"VariableDeclaration","scope":355,"src":"2512:19:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":344,"name":"uint256","nodeType":"ElementaryTypeName","src":"2512:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":348,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"2562:18:6","nodeType":"VariableDeclaration","scope":355,"src":"2545:35:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":346,"name":"uint256","nodeType":"ElementaryTypeName","src":"2545:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":347,"nodeType":"ArrayTypeName","src":"2545:9:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":351,"mutability":"mutable","name":"swapFeeAmountsScaled18","nameLocation":"2611:22:6","nodeType":"VariableDeclaration","scope":355,"src":"2594:39:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":349,"name":"uint256","nodeType":"ElementaryTypeName","src":"2594:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":350,"nodeType":"ArrayTypeName","src":"2594:9:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":353,"mutability":"mutable","name":"returnData","nameLocation":"2660:10:6","nodeType":"VariableDeclaration","scope":355,"src":"2647:23:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":352,"name":"bytes","nodeType":"ElementaryTypeName","src":"2647:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2498:182:6"},"scope":356,"src":"2248:433:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":357,"src":"127:2556:6","usedErrors":[],"usedEvents":[]}],"src":"46:2638:6"},"id":6},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","exportedSymbols":{"IERC20":[6980],"IProtocolFeeController":[643],"IVault":[713]},"id":644,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":358,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:7"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":360,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":644,"sourceUnit":6981,"src":"72:72:7","symbolAliases":[{"foreign":{"id":359,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"81:6:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":362,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":644,"sourceUnit":714,"src":"146:38:7","symbolAliases":[{"foreign":{"id":361,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":713,"src":"155:6:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeController","contractDependencies":[],"contractKind":"interface","documentation":{"id":363,"nodeType":"StructuredDocumentation","src":"186:80:7","text":"@notice Contract that handles protocol and pool creator fees for the Vault."},"fullyImplemented":false,"id":643,"linearizedBaseContracts":[643],"name":"IProtocolFeeController","nameLocation":"276:22:7","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":364,"nodeType":"StructuredDocumentation","src":"305:157:7","text":" @notice Emitted when the protocol swap fee percentage is updated.\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"bf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d","id":368,"name":"GlobalProtocolSwapFeePercentageChanged","nameLocation":"473:38:7","nodeType":"EventDefinition","parameters":{"id":367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":366,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"520:17:7","nodeType":"VariableDeclaration","scope":368,"src":"512:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":365,"name":"uint256","nodeType":"ElementaryTypeName","src":"512:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"511:27:7"},"src":"467:72:7"},{"anonymous":false,"documentation":{"id":369,"nodeType":"StructuredDocumentation","src":"545:160:7","text":" @notice Emitted when the protocol yield fee percentage is updated.\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6","id":373,"name":"GlobalProtocolYieldFeePercentageChanged","nameLocation":"716:39:7","nodeType":"EventDefinition","parameters":{"id":372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":371,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"764:18:7","nodeType":"VariableDeclaration","scope":373,"src":"756:26:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":370,"name":"uint256","nodeType":"ElementaryTypeName","src":"756:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"755:28:7"},"src":"710:74:7"},{"anonymous":false,"documentation":{"id":374,"nodeType":"StructuredDocumentation","src":"790:245:7","text":" @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n @param pool The pool whose protocol swap fee will be changed\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e","id":380,"name":"ProtocolSwapFeePercentageChanged","nameLocation":"1046:32:7","nodeType":"EventDefinition","parameters":{"id":379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":376,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1095:4:7","nodeType":"VariableDeclaration","scope":380,"src":"1079:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":375,"name":"address","nodeType":"ElementaryTypeName","src":"1079:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":378,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1109:17:7","nodeType":"VariableDeclaration","scope":380,"src":"1101:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":377,"name":"uint256","nodeType":"ElementaryTypeName","src":"1101:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1078:49:7"},"src":"1040:88:7"},{"anonymous":false,"documentation":{"id":381,"nodeType":"StructuredDocumentation","src":"1134:249:7","text":" @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n @param pool The pool whose protocol yield fee will be changed\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"af47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd","id":387,"name":"ProtocolYieldFeePercentageChanged","nameLocation":"1394:33:7","nodeType":"EventDefinition","parameters":{"id":386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":383,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1444:4:7","nodeType":"VariableDeclaration","scope":387,"src":"1428:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":382,"name":"address","nodeType":"ElementaryTypeName","src":"1428:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":385,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"1458:18:7","nodeType":"VariableDeclaration","scope":387,"src":"1450:26:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":384,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1427:50:7"},"src":"1388:90:7"},{"anonymous":false,"documentation":{"id":388,"nodeType":"StructuredDocumentation","src":"1484:267:7","text":" @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n @param pool The pool whose pool creator swap fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool"},"eventSelector":"b7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c","id":394,"name":"PoolCreatorSwapFeePercentageChanged","nameLocation":"1762:35:7","nodeType":"EventDefinition","parameters":{"id":393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":390,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1814:4:7","nodeType":"VariableDeclaration","scope":394,"src":"1798:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":389,"name":"address","nodeType":"ElementaryTypeName","src":"1798:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":392,"indexed":false,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"1828:28:7","nodeType":"VariableDeclaration","scope":394,"src":"1820:36:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":391,"name":"uint256","nodeType":"ElementaryTypeName","src":"1820:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1797:60:7"},"src":"1756:102:7"},{"anonymous":false,"documentation":{"id":395,"nodeType":"StructuredDocumentation","src":"1864:271:7","text":" @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n @param pool The pool whose pool creator yield fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool"},"eventSelector":"47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34","id":401,"name":"PoolCreatorYieldFeePercentageChanged","nameLocation":"2146:36:7","nodeType":"EventDefinition","parameters":{"id":400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":397,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2199:4:7","nodeType":"VariableDeclaration","scope":401,"src":"2183:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":396,"name":"address","nodeType":"ElementaryTypeName","src":"2183:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":399,"indexed":false,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"2213:29:7","nodeType":"VariableDeclaration","scope":401,"src":"2205:37:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":398,"name":"uint256","nodeType":"ElementaryTypeName","src":"2205:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2182:61:7"},"src":"2140:104:7"},{"anonymous":false,"documentation":{"id":402,"nodeType":"StructuredDocumentation","src":"2250:560:7","text":" @notice Logs the collection of protocol swap fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n multiple operations.\n @param pool The pool on which the swap fee was charged\n @param token The token in which the swap fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"ae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f","id":411,"name":"ProtocolSwapFeeCollected","nameLocation":"2821:24:7","nodeType":"EventDefinition","parameters":{"id":410,"nodeType":"ParameterList","parameters":[{"constant":false,"id":404,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2862:4:7","nodeType":"VariableDeclaration","scope":411,"src":"2846:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":403,"name":"address","nodeType":"ElementaryTypeName","src":"2846:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":407,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"2883:5:7","nodeType":"VariableDeclaration","scope":411,"src":"2868:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":406,"nodeType":"UserDefinedTypeName","pathNode":{"id":405,"name":"IERC20","nameLocations":["2868:6:7"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"2868:6:7"},"referencedDeclaration":6980,"src":"2868:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":409,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2898:6:7","nodeType":"VariableDeclaration","scope":411,"src":"2890:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":408,"name":"uint256","nodeType":"ElementaryTypeName","src":"2890:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2845:60:7"},"src":"2815:91:7"},{"anonymous":false,"documentation":{"id":412,"nodeType":"StructuredDocumentation","src":"2912:564:7","text":" @notice Logs the collection of protocol yield fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n multiple operations.\n @param pool The pool on which the yield fee was charged\n @param token The token in which the yield fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"e505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e2","id":421,"name":"ProtocolYieldFeeCollected","nameLocation":"3487:25:7","nodeType":"EventDefinition","parameters":{"id":420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":414,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3529:4:7","nodeType":"VariableDeclaration","scope":421,"src":"3513:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":413,"name":"address","nodeType":"ElementaryTypeName","src":"3513:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":417,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3550:5:7","nodeType":"VariableDeclaration","scope":421,"src":"3535:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":416,"nodeType":"UserDefinedTypeName","pathNode":{"id":415,"name":"IERC20","nameLocations":["3535:6:7"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"3535:6:7"},"referencedDeclaration":6980,"src":"3535:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":419,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"3565:6:7","nodeType":"VariableDeclaration","scope":421,"src":"3557:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":418,"name":"uint256","nodeType":"ElementaryTypeName","src":"3557:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3512:60:7"},"src":"3481:92:7"},{"anonymous":false,"documentation":{"id":422,"nodeType":"StructuredDocumentation","src":"3579:333:7","text":" @notice Logs the withdrawal of protocol fees in a specific token and amount.\n @param pool The pool from which protocol fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b5","id":433,"name":"ProtocolFeesWithdrawn","nameLocation":"3923:21:7","nodeType":"EventDefinition","parameters":{"id":432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":424,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3961:4:7","nodeType":"VariableDeclaration","scope":433,"src":"3945:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":423,"name":"address","nodeType":"ElementaryTypeName","src":"3945:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":427,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3982:5:7","nodeType":"VariableDeclaration","scope":433,"src":"3967:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":426,"nodeType":"UserDefinedTypeName","pathNode":{"id":425,"name":"IERC20","nameLocations":["3967:6:7"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"3967:6:7"},"referencedDeclaration":6980,"src":"3967:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":429,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4005:9:7","nodeType":"VariableDeclaration","scope":433,"src":"3989:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":428,"name":"address","nodeType":"ElementaryTypeName","src":"3989:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":431,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4024:6:7","nodeType":"VariableDeclaration","scope":433,"src":"4016:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":430,"name":"uint256","nodeType":"ElementaryTypeName","src":"4016:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3944:87:7"},"src":"3917:115:7"},{"anonymous":false,"documentation":{"id":434,"nodeType":"StructuredDocumentation","src":"4038:398:7","text":" @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n @param pool The pool from which pool creator fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f9","id":445,"name":"PoolCreatorFeesWithdrawn","nameLocation":"4447:24:7","nodeType":"EventDefinition","parameters":{"id":444,"nodeType":"ParameterList","parameters":[{"constant":false,"id":436,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4497:4:7","nodeType":"VariableDeclaration","scope":445,"src":"4481:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":435,"name":"address","nodeType":"ElementaryTypeName","src":"4481:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":439,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"4526:5:7","nodeType":"VariableDeclaration","scope":445,"src":"4511:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":438,"nodeType":"UserDefinedTypeName","pathNode":{"id":437,"name":"IERC20","nameLocations":["4511:6:7"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"4511:6:7"},"referencedDeclaration":6980,"src":"4511:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":441,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4557:9:7","nodeType":"VariableDeclaration","scope":445,"src":"4541:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":440,"name":"address","nodeType":"ElementaryTypeName","src":"4541:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":443,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4584:6:7","nodeType":"VariableDeclaration","scope":445,"src":"4576:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":442,"name":"uint256","nodeType":"ElementaryTypeName","src":"4576:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4471:125:7"},"src":"4441:156:7"},{"documentation":{"id":446,"nodeType":"StructuredDocumentation","src":"4603:219:7","text":" @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages."},"errorSelector":"7e6eb7fb","id":448,"name":"ProtocolSwapFeePercentageTooHigh","nameLocation":"4833:32:7","nodeType":"ErrorDefinition","parameters":{"id":447,"nodeType":"ParameterList","parameters":[],"src":"4865:2:7"},"src":"4827:41:7"},{"documentation":{"id":449,"nodeType":"StructuredDocumentation","src":"4874:221:7","text":" @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages."},"errorSelector":"a7849e8e","id":451,"name":"ProtocolYieldFeePercentageTooHigh","nameLocation":"5106:33:7","nodeType":"ErrorDefinition","parameters":{"id":450,"nodeType":"ParameterList","parameters":[],"src":"5139:2:7"},"src":"5100:42:7"},{"documentation":{"id":452,"nodeType":"StructuredDocumentation","src":"5148:156:7","text":" @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n @param pool The pool with no creator"},"errorSelector":"8bcbf353","id":456,"name":"PoolCreatorNotRegistered","nameLocation":"5315:24:7","nodeType":"ErrorDefinition","parameters":{"id":455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":454,"mutability":"mutable","name":"pool","nameLocation":"5348:4:7","nodeType":"VariableDeclaration","scope":456,"src":"5340:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":453,"name":"address","nodeType":"ElementaryTypeName","src":"5340:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5339:14:7"},"src":"5309:45:7"},{"documentation":{"id":457,"nodeType":"StructuredDocumentation","src":"5360:236:7","text":" @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n @param caller The account attempting to withdraw pool creator fees\n @param pool The pool the caller tried to withdraw from"},"errorSelector":"fbecdbf4","id":463,"name":"CallerIsNotPoolCreator","nameLocation":"5607:22:7","nodeType":"ErrorDefinition","parameters":{"id":462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":459,"mutability":"mutable","name":"caller","nameLocation":"5638:6:7","nodeType":"VariableDeclaration","scope":463,"src":"5630:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":458,"name":"address","nodeType":"ElementaryTypeName","src":"5630:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":461,"mutability":"mutable","name":"pool","nameLocation":"5654:4:7","nodeType":"VariableDeclaration","scope":463,"src":"5646:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":460,"name":"address","nodeType":"ElementaryTypeName","src":"5646:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5629:30:7"},"src":"5601:59:7"},{"documentation":{"id":464,"nodeType":"StructuredDocumentation","src":"5666:110:7","text":"@notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value."},"errorSelector":"0370da74","id":466,"name":"PoolCreatorFeePercentageTooHigh","nameLocation":"5787:31:7","nodeType":"ErrorDefinition","parameters":{"id":465,"nodeType":"ParameterList","parameters":[],"src":"5818:2:7"},"src":"5781:40:7"},{"documentation":{"id":467,"nodeType":"StructuredDocumentation","src":"5827:109:7","text":" @notice Get the address of the main Vault contract.\n @return vault The Vault address"},"functionSelector":"fbfa77cf","id":473,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"5950:5:7","nodeType":"FunctionDefinition","parameters":{"id":468,"nodeType":"ParameterList","parameters":[],"src":"5955:2:7"},"returnParameters":{"id":472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":471,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":473,"src":"5981:6:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"},"typeName":{"id":470,"nodeType":"UserDefinedTypeName","pathNode":{"id":469,"name":"IVault","nameLocations":["5981:6:7"],"nodeType":"IdentifierPath","referencedDeclaration":713,"src":"5981:6:7"},"referencedDeclaration":713,"src":"5981:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}},"visibility":"internal"}],"src":"5980:8:7"},"scope":643,"src":"5941:48:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":474,"nodeType":"StructuredDocumentation","src":"5995:131:7","text":" @notice Collects aggregate fees from the Vault for a given pool.\n @param pool The pool with aggregate fees"},"functionSelector":"8f4ab9ca","id":479,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"6140:20:7","nodeType":"FunctionDefinition","parameters":{"id":477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":476,"mutability":"mutable","name":"pool","nameLocation":"6169:4:7","nodeType":"VariableDeclaration","scope":479,"src":"6161:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":475,"name":"address","nodeType":"ElementaryTypeName","src":"6161:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6160:14:7"},"returnParameters":{"id":478,"nodeType":"ParameterList","parameters":[],"src":"6183:0:7"},"scope":643,"src":"6131:53:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":480,"nodeType":"StructuredDocumentation","src":"6190:156:7","text":" @notice Getter for the current global protocol swap fee.\n @return protocolSwapFeePercentage The global protocol swap fee percentage"},"functionSelector":"7869ee18","id":485,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"6360:34:7","nodeType":"FunctionDefinition","parameters":{"id":481,"nodeType":"ParameterList","parameters":[],"src":"6394:2:7"},"returnParameters":{"id":484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":483,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"6428:25:7","nodeType":"VariableDeclaration","scope":485,"src":"6420:33:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":482,"name":"uint256","nodeType":"ElementaryTypeName","src":"6420:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6419:35:7"},"scope":643,"src":"6351:104:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":486,"nodeType":"StructuredDocumentation","src":"6461:159:7","text":" @notice Getter for the current global protocol yield fee.\n @return protocolYieldFeePercentage The global protocol yield fee percentage"},"functionSelector":"55fb76af","id":491,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"6634:35:7","nodeType":"FunctionDefinition","parameters":{"id":487,"nodeType":"ParameterList","parameters":[],"src":"6669:2:7"},"returnParameters":{"id":490,"nodeType":"ParameterList","parameters":[{"constant":false,"id":489,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"6703:26:7","nodeType":"VariableDeclaration","scope":491,"src":"6695:34:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":488,"name":"uint256","nodeType":"ElementaryTypeName","src":"6695:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6694:36:7"},"scope":643,"src":"6625:106:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":492,"nodeType":"StructuredDocumentation","src":"6737:280:7","text":" @notice Getter for the current protocol swap fee for a given pool.\n @param pool The address of the pool\n @return protocolSwapFeePercentage The global protocol swap fee percentage\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"5c15a0b4","id":501,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"7031:26:7","nodeType":"FunctionDefinition","parameters":{"id":495,"nodeType":"ParameterList","parameters":[{"constant":false,"id":494,"mutability":"mutable","name":"pool","nameLocation":"7075:4:7","nodeType":"VariableDeclaration","scope":501,"src":"7067:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":493,"name":"address","nodeType":"ElementaryTypeName","src":"7067:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7057:28:7"},"returnParameters":{"id":500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":497,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"7117:25:7","nodeType":"VariableDeclaration","scope":501,"src":"7109:33:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":496,"name":"uint256","nodeType":"ElementaryTypeName","src":"7109:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":499,"mutability":"mutable","name":"isOverride","nameLocation":"7149:10:7","nodeType":"VariableDeclaration","scope":501,"src":"7144:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":498,"name":"bool","nodeType":"ElementaryTypeName","src":"7144:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7108:52:7"},"scope":643,"src":"7022:139:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":502,"nodeType":"StructuredDocumentation","src":"7167:283:7","text":" @notice Getter for the current protocol yield fee for a given pool.\n @param pool The address of the pool\n @return protocolYieldFeePercentage The global protocol yield fee percentage\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"7a2b97dc","id":511,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"7464:27:7","nodeType":"FunctionDefinition","parameters":{"id":505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":504,"mutability":"mutable","name":"pool","nameLocation":"7509:4:7","nodeType":"VariableDeclaration","scope":511,"src":"7501:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":503,"name":"address","nodeType":"ElementaryTypeName","src":"7501:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7491:28:7"},"returnParameters":{"id":510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":507,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"7551:26:7","nodeType":"VariableDeclaration","scope":511,"src":"7543:34:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":506,"name":"uint256","nodeType":"ElementaryTypeName","src":"7543:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":509,"mutability":"mutable","name":"isOverride","nameLocation":"7584:10:7","nodeType":"VariableDeclaration","scope":511,"src":"7579:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":508,"name":"bool","nodeType":"ElementaryTypeName","src":"7579:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7542:53:7"},"scope":643,"src":"7455:141:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":512,"nodeType":"StructuredDocumentation","src":"7602:344:7","text":" @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"8df44c54","id":520,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"7960:21:7","nodeType":"FunctionDefinition","parameters":{"id":515,"nodeType":"ParameterList","parameters":[{"constant":false,"id":514,"mutability":"mutable","name":"pool","nameLocation":"7990:4:7","nodeType":"VariableDeclaration","scope":520,"src":"7982:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":513,"name":"address","nodeType":"ElementaryTypeName","src":"7982:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7981:14:7"},"returnParameters":{"id":519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":518,"mutability":"mutable","name":"feeAmounts","nameLocation":"8036:10:7","nodeType":"VariableDeclaration","scope":520,"src":"8019:27:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":516,"name":"uint256","nodeType":"ElementaryTypeName","src":"8019:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":517,"nodeType":"ArrayTypeName","src":"8019:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8018:29:7"},"scope":643,"src":"7951:97:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":521,"nodeType":"StructuredDocumentation","src":"8054:348:7","text":" @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"9e95f3fd","id":529,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"8416:24:7","nodeType":"FunctionDefinition","parameters":{"id":524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":523,"mutability":"mutable","name":"pool","nameLocation":"8449:4:7","nodeType":"VariableDeclaration","scope":529,"src":"8441:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":522,"name":"address","nodeType":"ElementaryTypeName","src":"8441:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8440:14:7"},"returnParameters":{"id":528,"nodeType":"ParameterList","parameters":[{"constant":false,"id":527,"mutability":"mutable","name":"feeAmounts","nameLocation":"8495:10:7","nodeType":"VariableDeclaration","scope":529,"src":"8478:27:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":525,"name":"uint256","nodeType":"ElementaryTypeName","src":"8478:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":526,"nodeType":"ArrayTypeName","src":"8478:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8477:29:7"},"scope":643,"src":"8407:100:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":530,"nodeType":"StructuredDocumentation","src":"8513:1445:7","text":" @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n components, but the truncation ensures it will not revert for any valid set of fee percentages.\n See example below:\n tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n @return aggregateFeePercentage The computed aggregate percentage"},"functionSelector":"0ddd60c6","id":539,"implemented":false,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"9972:29:7","nodeType":"FunctionDefinition","parameters":{"id":535,"nodeType":"ParameterList","parameters":[{"constant":false,"id":532,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"10019:21:7","nodeType":"VariableDeclaration","scope":539,"src":"10011:29:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":531,"name":"uint256","nodeType":"ElementaryTypeName","src":"10011:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":534,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"10058:24:7","nodeType":"VariableDeclaration","scope":539,"src":"10050:32:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":533,"name":"uint256","nodeType":"ElementaryTypeName","src":"10050:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10001:87:7"},"returnParameters":{"id":538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":537,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"10120:22:7","nodeType":"VariableDeclaration","scope":539,"src":"10112:30:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":536,"name":"uint256","nodeType":"ElementaryTypeName","src":"10112:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10111:32:7"},"scope":643,"src":"9963:181:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":540,"nodeType":"StructuredDocumentation","src":"10150:398:7","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol swap fee"},"functionSelector":"71ecc8fb","id":545,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolSwapFeePercentage","nameLocation":"10562:31:7","nodeType":"FunctionDefinition","parameters":{"id":543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":542,"mutability":"mutable","name":"pool","nameLocation":"10602:4:7","nodeType":"VariableDeclaration","scope":545,"src":"10594:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":541,"name":"address","nodeType":"ElementaryTypeName","src":"10594:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10593:14:7"},"returnParameters":{"id":544,"nodeType":"ParameterList","parameters":[],"src":"10616:0:7"},"scope":643,"src":"10553:64:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":546,"nodeType":"StructuredDocumentation","src":"10623:400:7","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol yield fee"},"functionSelector":"71447ea8","id":551,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolYieldFeePercentage","nameLocation":"11037:32:7","nodeType":"FunctionDefinition","parameters":{"id":549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":548,"mutability":"mutable","name":"pool","nameLocation":"11078:4:7","nodeType":"VariableDeclaration","scope":551,"src":"11070:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":547,"name":"address","nodeType":"ElementaryTypeName","src":"11070:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11069:14:7"},"returnParameters":{"id":550,"nodeType":"ParameterList","parameters":[],"src":"11092:0:7"},"scope":643,"src":"11028:65:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":552,"nodeType":"StructuredDocumentation","src":"11317:826:7","text":" @notice Add pool-specific entries to the protocol swap and yield percentages.\n @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n fee percentages, based on an initial pool creator fee of 0.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @return aggregateYieldFeePercentage The initial aggregate yield fee percentage"},"functionSelector":"77ff76e7","id":565,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"12157:12:7","nodeType":"FunctionDefinition","parameters":{"id":559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":554,"mutability":"mutable","name":"pool","nameLocation":"12187:4:7","nodeType":"VariableDeclaration","scope":565,"src":"12179:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":553,"name":"address","nodeType":"ElementaryTypeName","src":"12179:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":556,"mutability":"mutable","name":"poolCreator","nameLocation":"12209:11:7","nodeType":"VariableDeclaration","scope":565,"src":"12201:19:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":555,"name":"address","nodeType":"ElementaryTypeName","src":"12201:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":558,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"12235:17:7","nodeType":"VariableDeclaration","scope":565,"src":"12230:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":557,"name":"bool","nodeType":"ElementaryTypeName","src":"12230:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12169:89:7"},"returnParameters":{"id":564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":561,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"12285:26:7","nodeType":"VariableDeclaration","scope":565,"src":"12277:34:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":560,"name":"uint256","nodeType":"ElementaryTypeName","src":"12277:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":563,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"12321:27:7","nodeType":"VariableDeclaration","scope":565,"src":"12313:35:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":562,"name":"uint256","nodeType":"ElementaryTypeName","src":"12313:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12276:73:7"},"scope":643,"src":"12148:202:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":566,"nodeType":"StructuredDocumentation","src":"12356:175:7","text":" @notice Set the global protocol swap fee percentage, used by standard pools.\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage"},"functionSelector":"8a3c5c69","id":571,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"12545:34:7","nodeType":"FunctionDefinition","parameters":{"id":569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":568,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"12588:28:7","nodeType":"VariableDeclaration","scope":571,"src":"12580:36:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":567,"name":"uint256","nodeType":"ElementaryTypeName","src":"12580:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12579:38:7"},"returnParameters":{"id":570,"nodeType":"ParameterList","parameters":[],"src":"12626:0:7"},"scope":643,"src":"12536:91:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":572,"nodeType":"StructuredDocumentation","src":"12633:178:7","text":" @notice Set the global protocol yield fee percentage, used by standard pools.\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"a93df2a4","id":577,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"12825:35:7","nodeType":"FunctionDefinition","parameters":{"id":575,"nodeType":"ParameterList","parameters":[{"constant":false,"id":574,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"12869:29:7","nodeType":"VariableDeclaration","scope":577,"src":"12861:37:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":573,"name":"uint256","nodeType":"ElementaryTypeName","src":"12861:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12860:39:7"},"returnParameters":{"id":576,"nodeType":"ParameterList","parameters":[],"src":"12908:0:7"},"scope":643,"src":"12816:93:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":578,"nodeType":"StructuredDocumentation","src":"12915:272:7","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol swap fee\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool"},"functionSelector":"fd267f39","id":585,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolSwapFeePercentage","nameLocation":"13201:28:7","nodeType":"FunctionDefinition","parameters":{"id":583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":580,"mutability":"mutable","name":"pool","nameLocation":"13238:4:7","nodeType":"VariableDeclaration","scope":585,"src":"13230:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":579,"name":"address","nodeType":"ElementaryTypeName","src":"13230:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":582,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"13252:28:7","nodeType":"VariableDeclaration","scope":585,"src":"13244:36:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":581,"name":"uint256","nodeType":"ElementaryTypeName","src":"13244:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13229:52:7"},"returnParameters":{"id":584,"nodeType":"ParameterList","parameters":[],"src":"13290:0:7"},"scope":643,"src":"13192:99:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":586,"nodeType":"StructuredDocumentation","src":"13297:276:7","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol yield fee\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool"},"functionSelector":"abaa3356","id":593,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolYieldFeePercentage","nameLocation":"13587:29:7","nodeType":"FunctionDefinition","parameters":{"id":591,"nodeType":"ParameterList","parameters":[{"constant":false,"id":588,"mutability":"mutable","name":"pool","nameLocation":"13625:4:7","nodeType":"VariableDeclaration","scope":593,"src":"13617:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":587,"name":"address","nodeType":"ElementaryTypeName","src":"13617:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":590,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"13639:29:7","nodeType":"VariableDeclaration","scope":593,"src":"13631:37:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":589,"name":"uint256","nodeType":"ElementaryTypeName","src":"13631:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13616:53:7"},"returnParameters":{"id":592,"nodeType":"ParameterList","parameters":[],"src":"13678:0:7"},"scope":643,"src":"13578:101:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":594,"nodeType":"StructuredDocumentation","src":"13685:623:7","text":" @notice Assigns a new pool creator swap fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool"},"functionSelector":"1377c16c","id":601,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"14322:31:7","nodeType":"FunctionDefinition","parameters":{"id":599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":596,"mutability":"mutable","name":"pool","nameLocation":"14362:4:7","nodeType":"VariableDeclaration","scope":601,"src":"14354:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":595,"name":"address","nodeType":"ElementaryTypeName","src":"14354:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":598,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"14376:28:7","nodeType":"VariableDeclaration","scope":601,"src":"14368:36:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":597,"name":"uint256","nodeType":"ElementaryTypeName","src":"14368:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14353:52:7"},"returnParameters":{"id":600,"nodeType":"ParameterList","parameters":[],"src":"14414:0:7"},"scope":643,"src":"14313:102:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":602,"nodeType":"StructuredDocumentation","src":"14421:626:7","text":" @notice Assigns a new pool creator yield fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool"},"functionSelector":"3af52712","id":609,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"15061:32:7","nodeType":"FunctionDefinition","parameters":{"id":607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":604,"mutability":"mutable","name":"pool","nameLocation":"15102:4:7","nodeType":"VariableDeclaration","scope":609,"src":"15094:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":603,"name":"address","nodeType":"ElementaryTypeName","src":"15094:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":606,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"15116:29:7","nodeType":"VariableDeclaration","scope":609,"src":"15108:37:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":605,"name":"uint256","nodeType":"ElementaryTypeName","src":"15108:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15093:53:7"},"returnParameters":{"id":608,"nodeType":"ParameterList","parameters":[],"src":"15155:0:7"},"scope":643,"src":"15052:104:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":610,"nodeType":"StructuredDocumentation","src":"15162:296:7","text":" @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"cf7b287f","id":617,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFees","nameLocation":"15472:20:7","nodeType":"FunctionDefinition","parameters":{"id":615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":612,"mutability":"mutable","name":"pool","nameLocation":"15501:4:7","nodeType":"VariableDeclaration","scope":617,"src":"15493:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":611,"name":"address","nodeType":"ElementaryTypeName","src":"15493:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":614,"mutability":"mutable","name":"recipient","nameLocation":"15515:9:7","nodeType":"VariableDeclaration","scope":617,"src":"15507:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":613,"name":"address","nodeType":"ElementaryTypeName","src":"15507:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15492:33:7"},"returnParameters":{"id":616,"nodeType":"ParameterList","parameters":[],"src":"15534:0:7"},"scope":643,"src":"15463:72:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":618,"nodeType":"StructuredDocumentation","src":"15541:339:7","text":" @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens\n @param token Token to withdraw"},"functionSelector":"b53a70b2","id":628,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFeesForToken","nameLocation":"15894:28:7","nodeType":"FunctionDefinition","parameters":{"id":626,"nodeType":"ParameterList","parameters":[{"constant":false,"id":620,"mutability":"mutable","name":"pool","nameLocation":"15931:4:7","nodeType":"VariableDeclaration","scope":628,"src":"15923:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":619,"name":"address","nodeType":"ElementaryTypeName","src":"15923:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":622,"mutability":"mutable","name":"recipient","nameLocation":"15945:9:7","nodeType":"VariableDeclaration","scope":628,"src":"15937:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":621,"name":"address","nodeType":"ElementaryTypeName","src":"15937:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":625,"mutability":"mutable","name":"token","nameLocation":"15963:5:7","nodeType":"VariableDeclaration","scope":628,"src":"15956:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":624,"nodeType":"UserDefinedTypeName","pathNode":{"id":623,"name":"IERC20","nameLocations":["15956:6:7"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"15956:6:7"},"referencedDeclaration":6980,"src":"15956:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"15922:47:7"},"returnParameters":{"id":627,"nodeType":"ParameterList","parameters":[],"src":"15978:0:7"},"scope":643,"src":"15885:94:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":629,"nodeType":"StructuredDocumentation","src":"15985:291:7","text":" @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n @dev Sends swap and yield pool creator fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"f7061445","id":636,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"16290:23:7","nodeType":"FunctionDefinition","parameters":{"id":634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":631,"mutability":"mutable","name":"pool","nameLocation":"16322:4:7","nodeType":"VariableDeclaration","scope":636,"src":"16314:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":630,"name":"address","nodeType":"ElementaryTypeName","src":"16314:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":633,"mutability":"mutable","name":"recipient","nameLocation":"16336:9:7","nodeType":"VariableDeclaration","scope":636,"src":"16328:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":632,"name":"address","nodeType":"ElementaryTypeName","src":"16328:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16313:33:7"},"returnParameters":{"id":635,"nodeType":"ParameterList","parameters":[],"src":"16355:0:7"},"scope":643,"src":"16281:75:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":637,"nodeType":"StructuredDocumentation","src":"16362:310:7","text":" @notice Withdraw collected pool creator fees for a given pool.\n @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n value, this function is permissionless.\n @param pool The pool on which fees were collected"},"functionSelector":"52f125f0","id":642,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"16686:23:7","nodeType":"FunctionDefinition","parameters":{"id":640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":639,"mutability":"mutable","name":"pool","nameLocation":"16718:4:7","nodeType":"VariableDeclaration","scope":642,"src":"16710:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":638,"name":"address","nodeType":"ElementaryTypeName","src":"16710:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16709:14:7"},"returnParameters":{"id":641,"nodeType":"ParameterList","parameters":[],"src":"16732:0:7"},"scope":643,"src":"16677:56:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":644,"src":"266:16469:7","usedErrors":[448,451,456,463,466],"usedEvents":[368,373,380,387,394,401,411,421,433,445]}],"src":"46:16690:7"},"id":7},"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol","exportedSymbols":{"ISwapFeePercentageBounds":[659]},"id":660,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":645,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:8"},{"abstract":false,"baseContracts":[],"canonicalName":"ISwapFeePercentageBounds","contractDependencies":[],"contractKind":"interface","documentation":{"id":646,"nodeType":"StructuredDocumentation","src":"72:1023:8","text":" @notice Return the minimum/maximum swap fee percentages for a pool.\n @dev The Vault does not enforce bounds on swap fee percentages; `IBasePool` implements this interface to ensure\n that new pool developers think about and set these bounds according to their specific pool type.\n A minimum swap fee might be necessary to ensure mathematical soundness (e.g., Weighted Pools, which use the power\n function in the invariant). A maximum swap fee is general protection for users. With no limits at the Vault level,\n a pool could specify a near 100% swap fee, effectively disabling trading. Though there are some use cases, such as\n LVR/MEV strategies, where a very high fee makes sense.\n Note that the Vault does ensure that dynamic and aggregate fees are less than 100% to prevent attempting to allocate\n more fees than were collected by the operation. The true `MAX_FEE_PERCENTAGE` is defined in VaultTypes.sol, and is\n the highest value below 100% that satisfies the precision requirements."},"fullyImplemented":false,"id":659,"linearizedBaseContracts":[659],"name":"ISwapFeePercentageBounds","nameLocation":"1106:24:8","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":647,"nodeType":"StructuredDocumentation","src":"1137:79:8","text":"@return minimumSwapFeePercentage The minimum swap fee percentage for a pool"},"functionSelector":"ce20ece7","id":652,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumSwapFeePercentage","nameLocation":"1230:27:8","nodeType":"FunctionDefinition","parameters":{"id":648,"nodeType":"ParameterList","parameters":[],"src":"1257:2:8"},"returnParameters":{"id":651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":650,"mutability":"mutable","name":"minimumSwapFeePercentage","nameLocation":"1291:24:8","nodeType":"VariableDeclaration","scope":652,"src":"1283:32:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":649,"name":"uint256","nodeType":"ElementaryTypeName","src":"1283:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1282:34:8"},"scope":659,"src":"1221:96:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":653,"nodeType":"StructuredDocumentation","src":"1323:79:8","text":"@return maximumSwapFeePercentage The maximum swap fee percentage for a pool"},"functionSelector":"654cf15d","id":658,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumSwapFeePercentage","nameLocation":"1416:27:8","nodeType":"FunctionDefinition","parameters":{"id":654,"nodeType":"ParameterList","parameters":[],"src":"1443:2:8"},"returnParameters":{"id":657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":656,"mutability":"mutable","name":"maximumSwapFeePercentage","nameLocation":"1477:24:8","nodeType":"VariableDeclaration","scope":658,"src":"1469:32:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":655,"name":"uint256","nodeType":"ElementaryTypeName","src":"1469:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1468:34:8"},"scope":659,"src":"1407:96:8","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":660,"src":"1096:409:8","usedErrors":[],"usedEvents":[]}],"src":"46:1460:8"},"id":8},"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol","exportedSymbols":{"IUnbalancedLiquidityInvariantRatioBounds":[675]},"id":676,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":661,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:9"},{"abstract":false,"baseContracts":[],"canonicalName":"IUnbalancedLiquidityInvariantRatioBounds","contractDependencies":[],"contractKind":"interface","documentation":{"id":662,"nodeType":"StructuredDocumentation","src":"72:838:9","text":" @notice Return the minimum/maximum invariant ratios allowed during an unbalanced liquidity operation.\n @dev The Vault does not enforce any \"baseline\" bounds on invariant ratios, since such bounds are highly specific\n and dependent on the math of each pool type. Instead, the Vault reads invariant ratio bounds from the pools.\n `IBasePool` implements this interface to ensure that new pool developers think about and set these bounds according\n to their pool type's math.\n For instance, Balancer Weighted Pool math involves exponentiation (the `pow` function), which uses natural\n logarithms and a discrete Taylor series expansion to compute x^y values for the 18-decimal floating point numbers\n used in all Vault computations. See `LogExpMath` and `WeightedMath` for a derivation of the bounds for these pools."},"fullyImplemented":false,"id":675,"linearizedBaseContracts":[675],"name":"IUnbalancedLiquidityInvariantRatioBounds","nameLocation":"921:40:9","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":663,"nodeType":"StructuredDocumentation","src":"968:107:9","text":"@return minimumInvariantRatio The minimum invariant ratio for a pool during unbalanced remove liquidity"},"functionSelector":"b677fa56","id":668,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumInvariantRatio","nameLocation":"1089:24:9","nodeType":"FunctionDefinition","parameters":{"id":664,"nodeType":"ParameterList","parameters":[],"src":"1113:2:9"},"returnParameters":{"id":667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":666,"mutability":"mutable","name":"minimumInvariantRatio","nameLocation":"1147:21:9","nodeType":"VariableDeclaration","scope":668,"src":"1139:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":665,"name":"uint256","nodeType":"ElementaryTypeName","src":"1139:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1138:31:9"},"scope":675,"src":"1080:90:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":669,"nodeType":"StructuredDocumentation","src":"1176:104:9","text":"@return maximumInvariantRatio The maximum invariant ratio for a pool during unbalanced add liquidity"},"functionSelector":"273c1adf","id":674,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumInvariantRatio","nameLocation":"1294:24:9","nodeType":"FunctionDefinition","parameters":{"id":670,"nodeType":"ParameterList","parameters":[],"src":"1318:2:9"},"returnParameters":{"id":673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":672,"mutability":"mutable","name":"maximumInvariantRatio","nameLocation":"1352:21:9","nodeType":"VariableDeclaration","scope":674,"src":"1344:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":671,"name":"uint256","nodeType":"ElementaryTypeName","src":"1344:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1343:31:9"},"scope":675,"src":"1285:90:9","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":676,"src":"911:466:9","usedErrors":[],"usedEvents":[]}],"src":"46:1332:9"},"id":9},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","exportedSymbols":{"IAuthentication":[14],"IVault":[713],"IVaultAdmin":[1003],"IVaultErrors":[1370],"IVaultEvents":[1609],"IVaultExtension":[2028],"IVaultMain":[2164]},"id":714,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":677,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:10"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"../solidity-utils/helpers/IAuthentication.sol","id":679,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":714,"sourceUnit":15,"src":"72:80:10","symbolAliases":[{"foreign":{"id":678,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14,"src":"81:15:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","file":"./IVaultExtension.sol","id":681,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":714,"sourceUnit":2029,"src":"153:56:10","symbolAliases":[{"foreign":{"id":680,"name":"IVaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2028,"src":"162:15:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"./IVaultErrors.sol","id":683,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":714,"sourceUnit":1371,"src":"210:50:10","symbolAliases":[{"foreign":{"id":682,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"219:12:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","file":"./IVaultEvents.sol","id":685,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":714,"sourceUnit":1610,"src":"261:50:10","symbolAliases":[{"foreign":{"id":684,"name":"IVaultEvents","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1609,"src":"270:12:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"./IVaultAdmin.sol","id":687,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":714,"sourceUnit":1004,"src":"312:48:10","symbolAliases":[{"foreign":{"id":686,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1003,"src":"321:11:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","file":"./IVaultMain.sol","id":689,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":714,"sourceUnit":2165,"src":"361:46:10","symbolAliases":[{"foreign":{"id":688,"name":"IVaultMain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2164,"src":"370:10:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":691,"name":"IVaultMain","nameLocations":["539:10:10"],"nodeType":"IdentifierPath","referencedDeclaration":2164,"src":"539:10:10"},"id":692,"nodeType":"InheritanceSpecifier","src":"539:10:10"},{"baseName":{"id":693,"name":"IVaultExtension","nameLocations":["551:15:10"],"nodeType":"IdentifierPath","referencedDeclaration":2028,"src":"551:15:10"},"id":694,"nodeType":"InheritanceSpecifier","src":"551:15:10"},{"baseName":{"id":695,"name":"IVaultAdmin","nameLocations":["568:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":1003,"src":"568:11:10"},"id":696,"nodeType":"InheritanceSpecifier","src":"568:11:10"},{"baseName":{"id":697,"name":"IVaultErrors","nameLocations":["581:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":1370,"src":"581:12:10"},"id":698,"nodeType":"InheritanceSpecifier","src":"581:12:10"},{"baseName":{"id":699,"name":"IVaultEvents","nameLocations":["595:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":1609,"src":"595:12:10"},"id":700,"nodeType":"InheritanceSpecifier","src":"595:12:10"},{"baseName":{"id":701,"name":"IAuthentication","nameLocations":["609:15:10"],"nodeType":"IdentifierPath","referencedDeclaration":14,"src":"609:15:10"},"id":702,"nodeType":"InheritanceSpecifier","src":"609:15:10"}],"canonicalName":"IVault","contractDependencies":[],"contractKind":"interface","documentation":{"id":690,"nodeType":"StructuredDocumentation","src":"409:110:10","text":"@notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries."},"fullyImplemented":false,"id":713,"linearizedBaseContracts":[713,14,1609,1370,1003,2028,2164],"name":"IVault","nameLocation":"529:6:10","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[731,1632],"documentation":{"id":703,"nodeType":"StructuredDocumentation","src":"631:41:10","text":"@return vault The main Vault address."},"functionSelector":"fbfa77cf","id":712,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"686:5:10","nodeType":"FunctionDefinition","overrides":{"id":707,"nodeType":"OverrideSpecifier","overrides":[{"id":705,"name":"IVaultAdmin","nameLocations":["717:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":1003,"src":"717:11:10"},{"id":706,"name":"IVaultExtension","nameLocations":["730:15:10"],"nodeType":"IdentifierPath","referencedDeclaration":2028,"src":"730:15:10"}],"src":"708:38:10"},"parameters":{"id":704,"nodeType":"ParameterList","parameters":[],"src":"691:2:10"},"returnParameters":{"id":711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":710,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":712,"src":"756:6:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"},"typeName":{"id":709,"nodeType":"UserDefinedTypeName","pathNode":{"id":708,"name":"IVault","nameLocations":["756:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":713,"src":"756:6:10"},"referencedDeclaration":713,"src":"756:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}},"visibility":"internal"}],"src":"755:8:10"},"scope":713,"src":"677:87:10","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":714,"src":"519:247:10","usedErrors":[5,1015,1020,1025,1030,1039,1045,1048,1051,1054,1057,1060,1063,1072,1075,1078,1081,1084,1087,1090,1093,1096,1099,1102,1105,1108,1111,1114,1120,1127,1134,1137,1140,1150,1160,1167,1170,1173,1176,1186,1196,1203,1206,1209,1212,1215,1218,1221,1224,1227,1232,1237,1242,1245,1248,1251,1254,1257,1262,1267,1272,1278,1284,1287,1295,1301,1307,1310,1313,1316,1321,1331,1341,1348,1351,1354,1357,1360,1363,1366,1369],"usedEvents":[1408,1413,1432,1444,1456,1474,1492,1497,1500,1503,1510,1517,1524,1531,1538,1544,1550,1562,1572,1582,1594,1599,1608]}],"src":"46:721:10"},"id":10},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","exportedSymbols":{"IAuthorizer":[40],"IERC4626":[6704],"IProtocolFeeController":[643],"IVault":[713],"IVaultAdmin":[1003]},"id":1004,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":715,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:11"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":717,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1004,"sourceUnit":6705,"src":"72:75:11","symbolAliases":[{"foreign":{"id":716,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6704,"src":"81:8:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":719,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1004,"sourceUnit":644,"src":"149:70:11","symbolAliases":[{"foreign":{"id":718,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":643,"src":"158:22:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":721,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1004,"sourceUnit":41,"src":"220:48:11","symbolAliases":[{"foreign":{"id":720,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40,"src":"229:11:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":723,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1004,"sourceUnit":714,"src":"269:38:11","symbolAliases":[{"foreign":{"id":722,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":713,"src":"278:6:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultAdmin","contractDependencies":[],"contractKind":"interface","documentation":{"id":724,"nodeType":"StructuredDocumentation","src":"309:276:11","text":" @notice Interface for functions defined on the `VaultAdmin` contract.\n @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n as two delegate calls add gas to each call. Most of the permissioned calls are here."},"fullyImplemented":false,"id":1003,"linearizedBaseContracts":[1003],"name":"IVaultAdmin","nameLocation":"596:11:11","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":725,"nodeType":"StructuredDocumentation","src":"841:206:11","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":731,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1061:5:11","nodeType":"FunctionDefinition","parameters":{"id":726,"nodeType":"ParameterList","parameters":[],"src":"1066:2:11"},"returnParameters":{"id":730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":729,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":731,"src":"1092:6:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"},"typeName":{"id":728,"nodeType":"UserDefinedTypeName","pathNode":{"id":727,"name":"IVault","nameLocations":["1092:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":713,"src":"1092:6:11"},"referencedDeclaration":713,"src":"1092:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1091:8:11"},"scope":1003,"src":"1052:48:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":732,"nodeType":"StructuredDocumentation","src":"1106:326:11","text":" @notice Returns the Vault's pause window end time.\n @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n by governance. Balancer timestamps are 32 bits.\n @return pauseWindowEndTime The timestamp when the Vault's pause window ends"},"functionSelector":"8a8d123a","id":737,"implemented":false,"kind":"function","modifiers":[],"name":"getPauseWindowEndTime","nameLocation":"1446:21:11","nodeType":"FunctionDefinition","parameters":{"id":733,"nodeType":"ParameterList","parameters":[],"src":"1467:2:11"},"returnParameters":{"id":736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":735,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1500:18:11","nodeType":"VariableDeclaration","scope":737,"src":"1493:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":734,"name":"uint32","nodeType":"ElementaryTypeName","src":"1493:6:11","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1492:27:11"},"scope":1003,"src":"1437:83:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":738,"nodeType":"StructuredDocumentation","src":"1526:414:11","text":" @notice Returns the Vault's buffer period duration.\n @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n timestamps are 32 bits.\n @return bufferPeriodDuration The length of the buffer period in seconds"},"functionSelector":"20c1fb7a","id":743,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodDuration","nameLocation":"1954:23:11","nodeType":"FunctionDefinition","parameters":{"id":739,"nodeType":"ParameterList","parameters":[],"src":"1977:2:11"},"returnParameters":{"id":742,"nodeType":"ParameterList","parameters":[{"constant":false,"id":741,"mutability":"mutable","name":"bufferPeriodDuration","nameLocation":"2010:20:11","nodeType":"VariableDeclaration","scope":743,"src":"2003:27:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":740,"name":"uint32","nodeType":"ElementaryTypeName","src":"2003:6:11","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2002:29:11"},"scope":1003,"src":"1945:87:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":744,"nodeType":"StructuredDocumentation","src":"2038:321:11","text":" @notice Returns the Vault's buffer period end time.\n @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n timestamps are 32 bits.\n @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused"},"functionSelector":"cd51c12f","id":749,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodEndTime","nameLocation":"2373:22:11","nodeType":"FunctionDefinition","parameters":{"id":745,"nodeType":"ParameterList","parameters":[],"src":"2395:2:11"},"returnParameters":{"id":748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":747,"mutability":"mutable","name":"bufferPeriodEndTime","nameLocation":"2428:19:11","nodeType":"VariableDeclaration","scope":749,"src":"2421:26:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":746,"name":"uint32","nodeType":"ElementaryTypeName","src":"2421:6:11","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2420:28:11"},"scope":1003,"src":"2364:85:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":750,"nodeType":"StructuredDocumentation","src":"2455:193:11","text":" @notice Get the minimum number of tokens in a pool.\n @dev We expect the vast majority of pools to be 2-token.\n @return minTokens The minimum token count of a pool"},"functionSelector":"a8175b27","id":755,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumPoolTokens","nameLocation":"2662:20:11","nodeType":"FunctionDefinition","parameters":{"id":751,"nodeType":"ParameterList","parameters":[],"src":"2682:2:11"},"returnParameters":{"id":754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":753,"mutability":"mutable","name":"minTokens","nameLocation":"2716:9:11","nodeType":"VariableDeclaration","scope":755,"src":"2708:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":752,"name":"uint256","nodeType":"ElementaryTypeName","src":"2708:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2707:19:11"},"scope":1003,"src":"2653:74:11","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":756,"nodeType":"StructuredDocumentation","src":"2733:129:11","text":" @notice Get the maximum number of tokens in a pool.\n @return maxTokens The maximum token count of a pool"},"functionSelector":"2e42f4d5","id":761,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumPoolTokens","nameLocation":"2876:20:11","nodeType":"FunctionDefinition","parameters":{"id":757,"nodeType":"ParameterList","parameters":[],"src":"2896:2:11"},"returnParameters":{"id":760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":759,"mutability":"mutable","name":"maxTokens","nameLocation":"2930:9:11","nodeType":"VariableDeclaration","scope":761,"src":"2922:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":758,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2921:19:11"},"scope":1003,"src":"2867:74:11","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":762,"nodeType":"StructuredDocumentation","src":"2947:439:11","text":" @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization"},"functionSelector":"d0965a6b","id":767,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolMinimumTotalSupply","nameLocation":"3400:25:11","nodeType":"FunctionDefinition","parameters":{"id":763,"nodeType":"ParameterList","parameters":[],"src":"3425:2:11"},"returnParameters":{"id":766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":765,"mutability":"mutable","name":"poolMinimumTotalSupply","nameLocation":"3459:22:11","nodeType":"VariableDeclaration","scope":767,"src":"3451:30:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":764,"name":"uint256","nodeType":"ElementaryTypeName","src":"3451:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3450:32:11"},"scope":1003,"src":"3391:92:11","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":768,"nodeType":"StructuredDocumentation","src":"3489:502:11","text":" @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n to the Vault, as buffers are not tokenized.\n @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization"},"functionSelector":"26a8a991","id":773,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferMinimumTotalSupply","nameLocation":"4005:27:11","nodeType":"FunctionDefinition","parameters":{"id":769,"nodeType":"ParameterList","parameters":[],"src":"4032:2:11"},"returnParameters":{"id":772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":771,"mutability":"mutable","name":"bufferMinimumTotalSupply","nameLocation":"4066:24:11","nodeType":"VariableDeclaration","scope":773,"src":"4058:32:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":770,"name":"uint256","nodeType":"ElementaryTypeName","src":"4058:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4057:34:11"},"scope":1003,"src":"3996:96:11","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":774,"nodeType":"StructuredDocumentation","src":"4098:291:11","text":" @notice Get the minimum trade amount in a pool operation.\n @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number"},"functionSelector":"e2cb0ba0","id":779,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumTradeAmount","nameLocation":"4403:21:11","nodeType":"FunctionDefinition","parameters":{"id":775,"nodeType":"ParameterList","parameters":[],"src":"4424:2:11"},"returnParameters":{"id":778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":777,"mutability":"mutable","name":"minimumTradeAmount","nameLocation":"4458:18:11","nodeType":"VariableDeclaration","scope":779,"src":"4450:26:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":776,"name":"uint256","nodeType":"ElementaryTypeName","src":"4450:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4449:28:11"},"scope":1003,"src":"4394:84:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":780,"nodeType":"StructuredDocumentation","src":"4484:271:11","text":" @notice Get the minimum wrap amount in a buffer operation.\n @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n @return minimumWrapAmount The minimum wrap amount in native underlying token decimals"},"functionSelector":"53956aa2","id":785,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumWrapAmount","nameLocation":"4769:20:11","nodeType":"FunctionDefinition","parameters":{"id":781,"nodeType":"ParameterList","parameters":[],"src":"4789:2:11"},"returnParameters":{"id":784,"nodeType":"ParameterList","parameters":[{"constant":false,"id":783,"mutability":"mutable","name":"minimumWrapAmount","nameLocation":"4823:17:11","nodeType":"VariableDeclaration","scope":785,"src":"4815:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":782,"name":"uint256","nodeType":"ElementaryTypeName","src":"4815:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4814:27:11"},"scope":1003,"src":"4760:82:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":786,"nodeType":"StructuredDocumentation","src":"5069:529:11","text":" @notice Indicates whether the Vault is paused.\n @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n `areBuffersPaused` to check the pause state of the buffers.\n @return vaultPaused True if the Vault is paused"},"functionSelector":"098401f5","id":791,"implemented":false,"kind":"function","modifiers":[],"name":"isVaultPaused","nameLocation":"5612:13:11","nodeType":"FunctionDefinition","parameters":{"id":787,"nodeType":"ParameterList","parameters":[],"src":"5625:2:11"},"returnParameters":{"id":790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":789,"mutability":"mutable","name":"vaultPaused","nameLocation":"5656:11:11","nodeType":"VariableDeclaration","scope":791,"src":"5651:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":788,"name":"bool","nodeType":"ElementaryTypeName","src":"5651:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5650:18:11"},"scope":1003,"src":"5603:66:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":792,"nodeType":"StructuredDocumentation","src":"5675:400:11","text":" @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n @dev Balancer timestamps are 32 bits.\n @return vaultPaused True if the Vault is paused\n @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period"},"functionSelector":"85c8c015","id":801,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultPausedState","nameLocation":"6089:19:11","nodeType":"FunctionDefinition","parameters":{"id":793,"nodeType":"ParameterList","parameters":[],"src":"6108:2:11"},"returnParameters":{"id":800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":795,"mutability":"mutable","name":"vaultPaused","nameLocation":"6163:11:11","nodeType":"VariableDeclaration","scope":801,"src":"6158:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":794,"name":"bool","nodeType":"ElementaryTypeName","src":"6158:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":797,"mutability":"mutable","name":"vaultPauseWindowEndTime","nameLocation":"6183:23:11","nodeType":"VariableDeclaration","scope":801,"src":"6176:30:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":796,"name":"uint32","nodeType":"ElementaryTypeName","src":"6176:6:11","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":799,"mutability":"mutable","name":"vaultBufferPeriodEndTime","nameLocation":"6215:24:11","nodeType":"VariableDeclaration","scope":801,"src":"6208:31:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":798,"name":"uint32","nodeType":"ElementaryTypeName","src":"6208:6:11","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"6157:83:11"},"scope":1003,"src":"6080:161:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":802,"nodeType":"StructuredDocumentation","src":"6247:517:11","text":" @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n are also paused (with `pauseVaultBuffers`)."},"functionSelector":"9e0879c2","id":805,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVault","nameLocation":"6778:10:11","nodeType":"FunctionDefinition","parameters":{"id":803,"nodeType":"ParameterList","parameters":[],"src":"6788:2:11"},"returnParameters":{"id":804,"nodeType":"ParameterList","parameters":[],"src":"6799:0:11"},"scope":1003,"src":"6769:31:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":806,"nodeType":"StructuredDocumentation","src":"6806:569:11","text":" @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused."},"functionSelector":"0b7562be","id":809,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVault","nameLocation":"7389:12:11","nodeType":"FunctionDefinition","parameters":{"id":807,"nodeType":"ParameterList","parameters":[],"src":"7401:2:11"},"returnParameters":{"id":808,"nodeType":"ParameterList","parameters":[],"src":"7412:0:11"},"scope":1003,"src":"7380:33:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":810,"nodeType":"StructuredDocumentation","src":"7639:276:11","text":" @notice Pause the Pool: an emergency action which disables all pool functions.\n @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n deployment.\n @param pool The pool being paused"},"functionSelector":"55aca1ec","id":815,"implemented":false,"kind":"function","modifiers":[],"name":"pausePool","nameLocation":"7929:9:11","nodeType":"FunctionDefinition","parameters":{"id":813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":812,"mutability":"mutable","name":"pool","nameLocation":"7947:4:11","nodeType":"VariableDeclaration","scope":815,"src":"7939:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":811,"name":"address","nodeType":"ElementaryTypeName","src":"7939:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7938:14:11"},"returnParameters":{"id":814,"nodeType":"ParameterList","parameters":[],"src":"7961:0:11"},"scope":1003,"src":"7920:42:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":816,"nodeType":"StructuredDocumentation","src":"7968:366:11","text":" @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n @param pool The pool being unpaused"},"functionSelector":"f21c38cd","id":821,"implemented":false,"kind":"function","modifiers":[],"name":"unpausePool","nameLocation":"8348:11:11","nodeType":"FunctionDefinition","parameters":{"id":819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":818,"mutability":"mutable","name":"pool","nameLocation":"8368:4:11","nodeType":"VariableDeclaration","scope":821,"src":"8360:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":817,"name":"address","nodeType":"ElementaryTypeName","src":"8360:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8359:14:11"},"returnParameters":{"id":820,"nodeType":"ParameterList","parameters":[],"src":"8382:0:11"},"scope":1003,"src":"8339:44:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":822,"nodeType":"StructuredDocumentation","src":"8606:520:11","text":" @notice Assigns a new static swap fee percentage to the specified pool.\n @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n Emits the SwapFeePercentageChanged event.\n @param pool The address of the pool for which the static swap fee will be changed\n @param swapFeePercentage The new swap fee percentage to apply to the pool"},"functionSelector":"d15126ba","id":829,"implemented":false,"kind":"function","modifiers":[],"name":"setStaticSwapFeePercentage","nameLocation":"9140:26:11","nodeType":"FunctionDefinition","parameters":{"id":827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":824,"mutability":"mutable","name":"pool","nameLocation":"9175:4:11","nodeType":"VariableDeclaration","scope":829,"src":"9167:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":823,"name":"address","nodeType":"ElementaryTypeName","src":"9167:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":826,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"9189:17:11","nodeType":"VariableDeclaration","scope":829,"src":"9181:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":825,"name":"uint256","nodeType":"ElementaryTypeName","src":"9181:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9166:41:11"},"returnParameters":{"id":828,"nodeType":"ParameterList","parameters":[],"src":"9216:0:11"},"scope":1003,"src":"9131:86:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":830,"nodeType":"StructuredDocumentation","src":"9223:463:11","text":" @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n @dev Fees are sent to the ProtocolFeeController address.\n @param pool The pool on which all aggregate fees should be collected\n @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"functionSelector":"8f4ab9ca","id":841,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"9700:20:11","nodeType":"FunctionDefinition","parameters":{"id":833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":832,"mutability":"mutable","name":"pool","nameLocation":"9738:4:11","nodeType":"VariableDeclaration","scope":841,"src":"9730:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":831,"name":"address","nodeType":"ElementaryTypeName","src":"9730:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9720:28:11"},"returnParameters":{"id":840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":836,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"9784:14:11","nodeType":"VariableDeclaration","scope":841,"src":"9767:31:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":834,"name":"uint256","nodeType":"ElementaryTypeName","src":"9767:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":835,"nodeType":"ArrayTypeName","src":"9767:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":839,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"9817:15:11","nodeType":"VariableDeclaration","scope":841,"src":"9800:32:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":837,"name":"uint256","nodeType":"ElementaryTypeName","src":"9800:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":838,"nodeType":"ArrayTypeName","src":"9800:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9766:67:11"},"scope":1003,"src":"9691:143:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":842,"nodeType":"StructuredDocumentation","src":"9840:755:11","text":" @notice Update an aggregate swap fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateSwapFeePercentageChanged` event.\n @param pool The pool whose swap fee percentage will be updated\n @param newAggregateSwapFeePercentage The new aggregate swap fee percentage"},"functionSelector":"5e0b06f4","id":849,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateSwapFeePercentage","nameLocation":"10609:32:11","nodeType":"FunctionDefinition","parameters":{"id":847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":844,"mutability":"mutable","name":"pool","nameLocation":"10650:4:11","nodeType":"VariableDeclaration","scope":849,"src":"10642:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":843,"name":"address","nodeType":"ElementaryTypeName","src":"10642:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":846,"mutability":"mutable","name":"newAggregateSwapFeePercentage","nameLocation":"10664:29:11","nodeType":"VariableDeclaration","scope":849,"src":"10656:37:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":845,"name":"uint256","nodeType":"ElementaryTypeName","src":"10656:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10641:53:11"},"returnParameters":{"id":848,"nodeType":"ParameterList","parameters":[],"src":"10703:0:11"},"scope":1003,"src":"10600:104:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":850,"nodeType":"StructuredDocumentation","src":"10710:760:11","text":" @notice Update an aggregate yield fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateYieldFeePercentageChanged` event.\n @param pool The pool whose yield fee percentage will be updated\n @param newAggregateYieldFeePercentage The new aggregate yield fee percentage"},"functionSelector":"e253670a","id":857,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateYieldFeePercentage","nameLocation":"11484:33:11","nodeType":"FunctionDefinition","parameters":{"id":855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":852,"mutability":"mutable","name":"pool","nameLocation":"11526:4:11","nodeType":"VariableDeclaration","scope":857,"src":"11518:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":851,"name":"address","nodeType":"ElementaryTypeName","src":"11518:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":854,"mutability":"mutable","name":"newAggregateYieldFeePercentage","nameLocation":"11540:30:11","nodeType":"VariableDeclaration","scope":857,"src":"11532:38:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":853,"name":"uint256","nodeType":"ElementaryTypeName","src":"11532:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11517:54:11"},"returnParameters":{"id":856,"nodeType":"ParameterList","parameters":[],"src":"11580:0:11"},"scope":1003,"src":"11475:106:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":858,"nodeType":"StructuredDocumentation","src":"11587:249:11","text":" @notice Sets a new Protocol Fee Controller for the Vault.\n @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n @param newProtocolFeeController The address of the new Protocol Fee Controller"},"functionSelector":"2d771389","id":864,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolFeeController","nameLocation":"11850:24:11","nodeType":"FunctionDefinition","parameters":{"id":862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":861,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"11898:24:11","nodeType":"VariableDeclaration","scope":864,"src":"11875:47:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$643","typeString":"contract IProtocolFeeController"},"typeName":{"id":860,"nodeType":"UserDefinedTypeName","pathNode":{"id":859,"name":"IProtocolFeeController","nameLocations":["11875:22:11"],"nodeType":"IdentifierPath","referencedDeclaration":643,"src":"11875:22:11"},"referencedDeclaration":643,"src":"11875:22:11","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$643","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"11874:49:11"},"returnParameters":{"id":863,"nodeType":"ParameterList","parameters":[],"src":"11932:0:11"},"scope":1003,"src":"11841:92:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":865,"nodeType":"StructuredDocumentation","src":"12160:557:11","text":" @notice Enable recovery mode for a pool.\n @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n @param pool The address of the pool"},"functionSelector":"dc3f574e","id":870,"implemented":false,"kind":"function","modifiers":[],"name":"enableRecoveryMode","nameLocation":"12731:18:11","nodeType":"FunctionDefinition","parameters":{"id":868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":867,"mutability":"mutable","name":"pool","nameLocation":"12758:4:11","nodeType":"VariableDeclaration","scope":870,"src":"12750:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":866,"name":"address","nodeType":"ElementaryTypeName","src":"12750:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12749:14:11"},"returnParameters":{"id":869,"nodeType":"ParameterList","parameters":[],"src":"12772:0:11"},"scope":1003,"src":"12722:51:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":871,"nodeType":"StructuredDocumentation","src":"12779:409:11","text":" @notice Disable recovery mode for a pool.\n @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n potentially fail if there is an issue with any associated Rate Providers.\n @param pool The address of the pool"},"functionSelector":"bffb78b2","id":876,"implemented":false,"kind":"function","modifiers":[],"name":"disableRecoveryMode","nameLocation":"13202:19:11","nodeType":"FunctionDefinition","parameters":{"id":874,"nodeType":"ParameterList","parameters":[{"constant":false,"id":873,"mutability":"mutable","name":"pool","nameLocation":"13230:4:11","nodeType":"VariableDeclaration","scope":876,"src":"13222:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":872,"name":"address","nodeType":"ElementaryTypeName","src":"13222:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13221:14:11"},"returnParameters":{"id":875,"nodeType":"ParameterList","parameters":[],"src":"13244:0:11"},"scope":1003,"src":"13193:52:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":877,"nodeType":"StructuredDocumentation","src":"13476:653:11","text":" @notice Disables query functionality on the Vault. Can only be called by governance.\n @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n disabling queries is completely necessary; queries can still be re-enabled after this call."},"functionSelector":"de1a36a6","id":880,"implemented":false,"kind":"function","modifiers":[],"name":"disableQuery","nameLocation":"14143:12:11","nodeType":"FunctionDefinition","parameters":{"id":878,"nodeType":"ParameterList","parameters":[],"src":"14155:2:11"},"returnParameters":{"id":879,"nodeType":"ParameterList","parameters":[],"src":"14166:0:11"},"scope":1003,"src":"14134:33:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":881,"nodeType":"StructuredDocumentation","src":"14173:223:11","text":" @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system."},"functionSelector":"821440f2","id":884,"implemented":false,"kind":"function","modifiers":[],"name":"disableQueryPermanently","nameLocation":"14410:23:11","nodeType":"FunctionDefinition","parameters":{"id":882,"nodeType":"ParameterList","parameters":[],"src":"14433:2:11"},"returnParameters":{"id":883,"nodeType":"ParameterList","parameters":[],"src":"14444:0:11"},"scope":1003,"src":"14401:44:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":885,"nodeType":"StructuredDocumentation","src":"14451:166:11","text":" @notice Enables query functionality on the Vault. Can only be called by governance.\n @dev Only works if queries are not permanently disabled."},"functionSelector":"e0d55605","id":888,"implemented":false,"kind":"function","modifiers":[],"name":"enableQuery","nameLocation":"14631:11:11","nodeType":"FunctionDefinition","parameters":{"id":886,"nodeType":"ParameterList","parameters":[],"src":"14642:2:11"},"returnParameters":{"id":887,"nodeType":"ParameterList","parameters":[],"src":"14653:0:11"},"scope":1003,"src":"14622:32:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":889,"nodeType":"StructuredDocumentation","src":"14881:590:11","text":" @notice Indicates whether the Vault buffers are paused.\n @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n @return buffersPaused True if the Vault buffers are paused"},"functionSelector":"55cba7fe","id":894,"implemented":false,"kind":"function","modifiers":[],"name":"areBuffersPaused","nameLocation":"15485:16:11","nodeType":"FunctionDefinition","parameters":{"id":890,"nodeType":"ParameterList","parameters":[],"src":"15501:2:11"},"returnParameters":{"id":893,"nodeType":"ParameterList","parameters":[{"constant":false,"id":892,"mutability":"mutable","name":"buffersPaused","nameLocation":"15532:13:11","nodeType":"VariableDeclaration","scope":894,"src":"15527:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":891,"name":"bool","nodeType":"ElementaryTypeName","src":"15527:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15526:20:11"},"scope":1003,"src":"15476:71:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":895,"nodeType":"StructuredDocumentation","src":"15553:619:11","text":" @notice Pauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n possible to pause vault buffers individually.\n This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n buffers, and vice versa."},"functionSelector":"e085c5a8","id":898,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVaultBuffers","nameLocation":"16186:17:11","nodeType":"FunctionDefinition","parameters":{"id":896,"nodeType":"ParameterList","parameters":[],"src":"16203:2:11"},"returnParameters":{"id":897,"nodeType":"ParameterList","parameters":[],"src":"16214:0:11"},"scope":1003,"src":"16177:38:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":899,"nodeType":"StructuredDocumentation","src":"16221:545:11","text":" @notice Unpauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n If the Vault was also paused, it will remain in that state until explicitly unpaused.\n This is a permissioned call."},"functionSelector":"b9212b49","id":902,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVaultBuffers","nameLocation":"16780:19:11","nodeType":"FunctionDefinition","parameters":{"id":900,"nodeType":"ParameterList","parameters":[],"src":"16799:2:11"},"returnParameters":{"id":901,"nodeType":"ParameterList","parameters":[],"src":"16810:0:11"},"scope":1003,"src":"16771:40:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":903,"nodeType":"StructuredDocumentation","src":"16817:860:11","text":" @notice Initializes buffer for the given wrapped token.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n native decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals."},"functionSelector":"653eb3b0","id":919,"implemented":false,"kind":"function","modifiers":[],"name":"initializeBuffer","nameLocation":"17691:16:11","nodeType":"FunctionDefinition","parameters":{"id":915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":906,"mutability":"mutable","name":"wrappedToken","nameLocation":"17726:12:11","nodeType":"VariableDeclaration","scope":919,"src":"17717:21:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":905,"nodeType":"UserDefinedTypeName","pathNode":{"id":904,"name":"IERC4626","nameLocations":["17717:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"17717:8:11"},"referencedDeclaration":6704,"src":"17717:8:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":908,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"17756:19:11","nodeType":"VariableDeclaration","scope":919,"src":"17748:27:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":907,"name":"uint256","nodeType":"ElementaryTypeName","src":"17748:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":910,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"17793:16:11","nodeType":"VariableDeclaration","scope":919,"src":"17785:24:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":909,"name":"uint256","nodeType":"ElementaryTypeName","src":"17785:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":912,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17827:15:11","nodeType":"VariableDeclaration","scope":919,"src":"17819:23:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":911,"name":"uint256","nodeType":"ElementaryTypeName","src":"17819:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":914,"mutability":"mutable","name":"sharesOwner","nameLocation":"17860:11:11","nodeType":"VariableDeclaration","scope":919,"src":"17852:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":913,"name":"address","nodeType":"ElementaryTypeName","src":"17852:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17707:170:11"},"returnParameters":{"id":918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":917,"mutability":"mutable","name":"issuedShares","nameLocation":"17904:12:11","nodeType":"VariableDeclaration","scope":919,"src":"17896:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":916,"name":"uint256","nodeType":"ElementaryTypeName","src":"17896:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17895:22:11"},"scope":1003,"src":"17682:236:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":920,"nodeType":"StructuredDocumentation","src":"17924:1010:11","text":" @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n @dev The buffer needs to be initialized beforehand.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n underlying token native decimals\n @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n token native decimals\n @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n in underlying token decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer"},"functionSelector":"e2a92b1a","id":938,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityToBuffer","nameLocation":"18948:20:11","nodeType":"FunctionDefinition","parameters":{"id":932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":923,"mutability":"mutable","name":"wrappedToken","nameLocation":"18987:12:11","nodeType":"VariableDeclaration","scope":938,"src":"18978:21:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":922,"nodeType":"UserDefinedTypeName","pathNode":{"id":921,"name":"IERC4626","nameLocations":["18978:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"18978:8:11"},"referencedDeclaration":6704,"src":"18978:8:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":925,"mutability":"mutable","name":"maxAmountUnderlyingInRaw","nameLocation":"19017:24:11","nodeType":"VariableDeclaration","scope":938,"src":"19009:32:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":924,"name":"uint256","nodeType":"ElementaryTypeName","src":"19009:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":927,"mutability":"mutable","name":"maxAmountWrappedInRaw","nameLocation":"19059:21:11","nodeType":"VariableDeclaration","scope":938,"src":"19051:29:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":926,"name":"uint256","nodeType":"ElementaryTypeName","src":"19051:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":929,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"19098:18:11","nodeType":"VariableDeclaration","scope":938,"src":"19090:26:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":928,"name":"uint256","nodeType":"ElementaryTypeName","src":"19090:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":931,"mutability":"mutable","name":"sharesOwner","nameLocation":"19134:11:11","nodeType":"VariableDeclaration","scope":938,"src":"19126:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":930,"name":"address","nodeType":"ElementaryTypeName","src":"19126:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18968:183:11"},"returnParameters":{"id":937,"nodeType":"ParameterList","parameters":[{"constant":false,"id":934,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"19178:19:11","nodeType":"VariableDeclaration","scope":938,"src":"19170:27:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":933,"name":"uint256","nodeType":"ElementaryTypeName","src":"19170:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":936,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"19207:16:11","nodeType":"VariableDeclaration","scope":938,"src":"19199:24:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":935,"name":"uint256","nodeType":"ElementaryTypeName","src":"19199:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19169:55:11"},"scope":1003,"src":"18939:286:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":939,"nodeType":"StructuredDocumentation","src":"19231:1458:11","text":" @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n Pre-conditions:\n - The buffer needs to be initialized.\n - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n total shares. It is expressed in underlying token native decimals\n @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n in underlying token native decimals\n @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n wrapped token native decimals\n @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user"},"functionSelector":"ebc7955c","id":955,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityFromBuffer","nameLocation":"20703:25:11","nodeType":"FunctionDefinition","parameters":{"id":949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":942,"mutability":"mutable","name":"wrappedToken","nameLocation":"20747:12:11","nodeType":"VariableDeclaration","scope":955,"src":"20738:21:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":941,"nodeType":"UserDefinedTypeName","pathNode":{"id":940,"name":"IERC4626","nameLocations":["20738:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"20738:8:11"},"referencedDeclaration":6704,"src":"20738:8:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":944,"mutability":"mutable","name":"sharesToRemove","nameLocation":"20777:14:11","nodeType":"VariableDeclaration","scope":955,"src":"20769:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":943,"name":"uint256","nodeType":"ElementaryTypeName","src":"20769:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":946,"mutability":"mutable","name":"minAmountUnderlyingOutRaw","nameLocation":"20809:25:11","nodeType":"VariableDeclaration","scope":955,"src":"20801:33:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":945,"name":"uint256","nodeType":"ElementaryTypeName","src":"20801:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":948,"mutability":"mutable","name":"minAmountWrappedOutRaw","nameLocation":"20852:22:11","nodeType":"VariableDeclaration","scope":955,"src":"20844:30:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":947,"name":"uint256","nodeType":"ElementaryTypeName","src":"20844:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20728:152:11"},"returnParameters":{"id":954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":951,"mutability":"mutable","name":"removedUnderlyingBalanceRaw","nameLocation":"20907:27:11","nodeType":"VariableDeclaration","scope":955,"src":"20899:35:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":950,"name":"uint256","nodeType":"ElementaryTypeName","src":"20899:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":953,"mutability":"mutable","name":"removedWrappedBalanceRaw","nameLocation":"20944:24:11","nodeType":"VariableDeclaration","scope":955,"src":"20936:32:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":952,"name":"uint256","nodeType":"ElementaryTypeName","src":"20936:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20898:71:11"},"scope":1003,"src":"20694:276:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":956,"nodeType":"StructuredDocumentation","src":"20976:382:11","text":" @notice Returns the asset registered for a given wrapped token.\n @dev The asset can never change after buffer initialization.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n has not been initialized."},"functionSelector":"0387587d","id":964,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferAsset","nameLocation":"21372:14:11","nodeType":"FunctionDefinition","parameters":{"id":960,"nodeType":"ParameterList","parameters":[{"constant":false,"id":959,"mutability":"mutable","name":"wrappedToken","nameLocation":"21396:12:11","nodeType":"VariableDeclaration","scope":964,"src":"21387:21:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":958,"nodeType":"UserDefinedTypeName","pathNode":{"id":957,"name":"IERC4626","nameLocations":["21387:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"21387:8:11"},"referencedDeclaration":6704,"src":"21387:8:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"21386:23:11"},"returnParameters":{"id":963,"nodeType":"ParameterList","parameters":[{"constant":false,"id":962,"mutability":"mutable","name":"underlyingToken","nameLocation":"21441:15:11","nodeType":"VariableDeclaration","scope":964,"src":"21433:23:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":961,"name":"address","nodeType":"ElementaryTypeName","src":"21433:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21432:25:11"},"scope":1003,"src":"21363:95:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":965,"nodeType":"StructuredDocumentation","src":"21464:441:11","text":" @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n in the buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals"},"functionSelector":"9385e39a","id":975,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferOwnerShares","nameLocation":"21919:20:11","nodeType":"FunctionDefinition","parameters":{"id":971,"nodeType":"ParameterList","parameters":[{"constant":false,"id":968,"mutability":"mutable","name":"wrappedToken","nameLocation":"21958:12:11","nodeType":"VariableDeclaration","scope":975,"src":"21949:21:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":967,"nodeType":"UserDefinedTypeName","pathNode":{"id":966,"name":"IERC4626","nameLocations":["21949:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"21949:8:11"},"referencedDeclaration":6704,"src":"21949:8:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":970,"mutability":"mutable","name":"liquidityOwner","nameLocation":"21988:14:11","nodeType":"VariableDeclaration","scope":975,"src":"21980:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":969,"name":"address","nodeType":"ElementaryTypeName","src":"21980:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21939:69:11"},"returnParameters":{"id":974,"nodeType":"ParameterList","parameters":[{"constant":false,"id":973,"mutability":"mutable","name":"ownerShares","nameLocation":"22040:11:11","nodeType":"VariableDeclaration","scope":975,"src":"22032:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":972,"name":"uint256","nodeType":"ElementaryTypeName","src":"22032:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22031:21:11"},"scope":1003,"src":"21910:143:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":976,"nodeType":"StructuredDocumentation","src":"22059:281:11","text":" @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals"},"functionSelector":"f2784e07","id":984,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferTotalShares","nameLocation":"22354:20:11","nodeType":"FunctionDefinition","parameters":{"id":980,"nodeType":"ParameterList","parameters":[{"constant":false,"id":979,"mutability":"mutable","name":"wrappedToken","nameLocation":"22384:12:11","nodeType":"VariableDeclaration","scope":984,"src":"22375:21:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":978,"nodeType":"UserDefinedTypeName","pathNode":{"id":977,"name":"IERC4626","nameLocations":["22375:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"22375:8:11"},"referencedDeclaration":6704,"src":"22375:8:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"22374:23:11"},"returnParameters":{"id":983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":982,"mutability":"mutable","name":"bufferShares","nameLocation":"22429:12:11","nodeType":"VariableDeclaration","scope":984,"src":"22421:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":981,"name":"uint256","nodeType":"ElementaryTypeName","src":"22421:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22420:22:11"},"scope":1003,"src":"22345:98:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":985,"nodeType":"StructuredDocumentation","src":"22449:521:11","text":" @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n @dev All values are in native token decimals of the wrapped or underlying tokens.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals"},"functionSelector":"4021fe0f","id":995,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferBalance","nameLocation":"22984:16:11","nodeType":"FunctionDefinition","parameters":{"id":989,"nodeType":"ParameterList","parameters":[{"constant":false,"id":988,"mutability":"mutable","name":"wrappedToken","nameLocation":"23019:12:11","nodeType":"VariableDeclaration","scope":995,"src":"23010:21:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":987,"nodeType":"UserDefinedTypeName","pathNode":{"id":986,"name":"IERC4626","nameLocations":["23010:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"23010:8:11"},"referencedDeclaration":6704,"src":"23010:8:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"23000:37:11"},"returnParameters":{"id":994,"nodeType":"ParameterList","parameters":[{"constant":false,"id":991,"mutability":"mutable","name":"underlyingBalanceRaw","nameLocation":"23069:20:11","nodeType":"VariableDeclaration","scope":995,"src":"23061:28:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":990,"name":"uint256","nodeType":"ElementaryTypeName","src":"23061:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":993,"mutability":"mutable","name":"wrappedBalanceRaw","nameLocation":"23099:17:11","nodeType":"VariableDeclaration","scope":995,"src":"23091:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":992,"name":"uint256","nodeType":"ElementaryTypeName","src":"23091:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23060:57:11"},"scope":1003,"src":"22975:143:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":996,"nodeType":"StructuredDocumentation","src":"23342:202:11","text":" @notice Sets a new Authorizer for the Vault.\n @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n @param newAuthorizer The address of the new authorizer"},"functionSelector":"058a628f","id":1002,"implemented":false,"kind":"function","modifiers":[],"name":"setAuthorizer","nameLocation":"23558:13:11","nodeType":"FunctionDefinition","parameters":{"id":1000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":999,"mutability":"mutable","name":"newAuthorizer","nameLocation":"23584:13:11","nodeType":"VariableDeclaration","scope":1002,"src":"23572:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$40","typeString":"contract IAuthorizer"},"typeName":{"id":998,"nodeType":"UserDefinedTypeName","pathNode":{"id":997,"name":"IAuthorizer","nameLocations":["23572:11:11"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"23572:11:11"},"referencedDeclaration":40,"src":"23572:11:11","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$40","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23571:27:11"},"returnParameters":{"id":1001,"nodeType":"ParameterList","parameters":[],"src":"23607:0:11"},"scope":1003,"src":"23549:59:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1004,"src":"586:23024:11","usedErrors":[],"usedEvents":[]}],"src":"46:23565:11"},"id":11},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","exportedSymbols":{"IERC20":[6980],"IERC4626":[6704],"IVaultErrors":[1370]},"id":1371,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1005,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:12"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1007,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1371,"sourceUnit":6705,"src":"72:75:12","symbolAliases":[{"foreign":{"id":1006,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6704,"src":"81:8:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1009,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1371,"sourceUnit":6981,"src":"148:72:12","symbolAliases":[{"foreign":{"id":1008,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"157:6:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultErrors","contractDependencies":[],"contractKind":"interface","documentation":{"id":1010,"nodeType":"StructuredDocumentation","src":"222:94:12","text":"@notice Errors are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":1370,"linearizedBaseContracts":[1370],"name":"IVaultErrors","nameLocation":"326:12:12","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1011,"nodeType":"StructuredDocumentation","src":"576:149:12","text":" @notice A pool has already been registered. `registerPool` may only be called once.\n @param pool The already registered pool"},"errorSelector":"db771c80","id":1015,"name":"PoolAlreadyRegistered","nameLocation":"736:21:12","nodeType":"ErrorDefinition","parameters":{"id":1014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1013,"mutability":"mutable","name":"pool","nameLocation":"766:4:12","nodeType":"VariableDeclaration","scope":1015,"src":"758:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1012,"name":"address","nodeType":"ElementaryTypeName","src":"758:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"757:14:12"},"src":"730:42:12"},{"documentation":{"id":1016,"nodeType":"StructuredDocumentation","src":"778:149:12","text":" @notice A pool has already been initialized. `initialize` may only be called once.\n @param pool The already initialized pool"},"errorSelector":"218e3747","id":1020,"name":"PoolAlreadyInitialized","nameLocation":"938:22:12","nodeType":"ErrorDefinition","parameters":{"id":1019,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1018,"mutability":"mutable","name":"pool","nameLocation":"969:4:12","nodeType":"VariableDeclaration","scope":1020,"src":"961:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1017,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"960:14:12"},"src":"932:43:12"},{"documentation":{"id":1021,"nodeType":"StructuredDocumentation","src":"981:99:12","text":" @notice A pool has not been registered.\n @param pool The unregistered pool"},"errorSelector":"9e51bd5c","id":1025,"name":"PoolNotRegistered","nameLocation":"1091:17:12","nodeType":"ErrorDefinition","parameters":{"id":1024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1023,"mutability":"mutable","name":"pool","nameLocation":"1117:4:12","nodeType":"VariableDeclaration","scope":1025,"src":"1109:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1022,"name":"address","nodeType":"ElementaryTypeName","src":"1109:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1108:14:12"},"src":"1085:38:12"},{"documentation":{"id":1026,"nodeType":"StructuredDocumentation","src":"1129:112:12","text":" @notice A referenced pool has not been initialized.\n @param pool The uninitialized pool"},"errorSelector":"4bdace13","id":1030,"name":"PoolNotInitialized","nameLocation":"1252:18:12","nodeType":"ErrorDefinition","parameters":{"id":1029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1028,"mutability":"mutable","name":"pool","nameLocation":"1279:4:12","nodeType":"VariableDeclaration","scope":1030,"src":"1271:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1027,"name":"address","nodeType":"ElementaryTypeName","src":"1271:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1270:14:12"},"src":"1246:39:12"},{"documentation":{"id":1031,"nodeType":"StructuredDocumentation","src":"1291:274:12","text":" @notice A hook contract rejected a pool on registration.\n @param poolHooksContract Address of the hook contract that rejected the pool registration\n @param pool Address of the rejected pool\n @param poolFactory Address of the pool factory"},"errorSelector":"fa93d814","id":1039,"name":"HookRegistrationFailed","nameLocation":"1576:22:12","nodeType":"ErrorDefinition","parameters":{"id":1038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1033,"mutability":"mutable","name":"poolHooksContract","nameLocation":"1607:17:12","nodeType":"VariableDeclaration","scope":1039,"src":"1599:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1032,"name":"address","nodeType":"ElementaryTypeName","src":"1599:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1035,"mutability":"mutable","name":"pool","nameLocation":"1634:4:12","nodeType":"VariableDeclaration","scope":1039,"src":"1626:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1034,"name":"address","nodeType":"ElementaryTypeName","src":"1626:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1037,"mutability":"mutable","name":"poolFactory","nameLocation":"1648:11:12","nodeType":"VariableDeclaration","scope":1039,"src":"1640:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1036,"name":"address","nodeType":"ElementaryTypeName","src":"1640:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1598:62:12"},"src":"1570:91:12"},{"documentation":{"id":1040,"nodeType":"StructuredDocumentation","src":"1667:136:12","text":" @notice A token was already registered (i.e., it is a duplicate in the pool).\n @param token The duplicate token"},"errorSelector":"4f4b634e","id":1045,"name":"TokenAlreadyRegistered","nameLocation":"1814:22:12","nodeType":"ErrorDefinition","parameters":{"id":1044,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1043,"mutability":"mutable","name":"token","nameLocation":"1844:5:12","nodeType":"VariableDeclaration","scope":1045,"src":"1837:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":1042,"nodeType":"UserDefinedTypeName","pathNode":{"id":1041,"name":"IERC20","nameLocations":["1837:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"1837:6:12"},"referencedDeclaration":6980,"src":"1837:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1836:14:12"},"src":"1808:43:12"},{"documentation":{"id":1046,"nodeType":"StructuredDocumentation","src":"1857:57:12","text":"@notice The token count is below the minimum allowed."},"errorSelector":"5ed4ba8f","id":1048,"name":"MinTokens","nameLocation":"1925:9:12","nodeType":"ErrorDefinition","parameters":{"id":1047,"nodeType":"ParameterList","parameters":[],"src":"1934:2:12"},"src":"1919:18:12"},{"documentation":{"id":1049,"nodeType":"StructuredDocumentation","src":"1943:57:12","text":"@notice The token count is above the maximum allowed."},"errorSelector":"707bdf58","id":1051,"name":"MaxTokens","nameLocation":"2011:9:12","nodeType":"ErrorDefinition","parameters":{"id":1050,"nodeType":"ParameterList","parameters":[],"src":"2020:2:12"},"src":"2005:18:12"},{"documentation":{"id":1052,"nodeType":"StructuredDocumentation","src":"2029:61:12","text":"@notice Invalid tokens (e.g., zero) cannot be registered."},"errorSelector":"c1ab6dc1","id":1054,"name":"InvalidToken","nameLocation":"2101:12:12","nodeType":"ErrorDefinition","parameters":{"id":1053,"nodeType":"ParameterList","parameters":[],"src":"2113:2:12"},"src":"2095:21:12"},{"documentation":{"id":1055,"nodeType":"StructuredDocumentation","src":"2122:86:12","text":"@notice The token type given in a TokenConfig during pool registration is invalid."},"errorSelector":"a1e9dd9d","id":1057,"name":"InvalidTokenType","nameLocation":"2219:16:12","nodeType":"ErrorDefinition","parameters":{"id":1056,"nodeType":"ParameterList","parameters":[],"src":"2235:2:12"},"src":"2213:25:12"},{"documentation":{"id":1058,"nodeType":"StructuredDocumentation","src":"2244:76:12","text":"@notice The data in a TokenConfig struct is inconsistent or unsupported."},"errorSelector":"df450632","id":1060,"name":"InvalidTokenConfiguration","nameLocation":"2331:25:12","nodeType":"ErrorDefinition","parameters":{"id":1059,"nodeType":"ParameterList","parameters":[],"src":"2356:2:12"},"src":"2325:34:12"},{"documentation":{"id":1061,"nodeType":"StructuredDocumentation","src":"2365:64:12","text":"@notice Tokens with more than 18 decimals are not supported."},"errorSelector":"686d3607","id":1063,"name":"InvalidTokenDecimals","nameLocation":"2440:20:12","nodeType":"ErrorDefinition","parameters":{"id":1062,"nodeType":"ParameterList","parameters":[],"src":"2460:2:12"},"src":"2434:29:12"},{"documentation":{"id":1064,"nodeType":"StructuredDocumentation","src":"2469:287:12","text":" @notice The token list passed into an operation does not match the pool tokens in the pool.\n @param pool Address of the pool\n @param expectedToken The correct token at a given index in the pool\n @param actualToken The actual token found at that index"},"errorSelector":"ffe261a1","id":1072,"name":"TokensMismatch","nameLocation":"2767:14:12","nodeType":"ErrorDefinition","parameters":{"id":1071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1066,"mutability":"mutable","name":"pool","nameLocation":"2790:4:12","nodeType":"VariableDeclaration","scope":1072,"src":"2782:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1065,"name":"address","nodeType":"ElementaryTypeName","src":"2782:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1068,"mutability":"mutable","name":"expectedToken","nameLocation":"2804:13:12","nodeType":"VariableDeclaration","scope":1072,"src":"2796:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1067,"name":"address","nodeType":"ElementaryTypeName","src":"2796:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1070,"mutability":"mutable","name":"actualToken","nameLocation":"2827:11:12","nodeType":"VariableDeclaration","scope":1072,"src":"2819:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1069,"name":"address","nodeType":"ElementaryTypeName","src":"2819:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2781:58:12"},"src":"2761:79:12"},{"documentation":{"id":1073,"nodeType":"StructuredDocumentation","src":"3071:85:12","text":"@notice A transient accounting operation completed with outstanding token deltas."},"errorSelector":"20f1d86d","id":1075,"name":"BalanceNotSettled","nameLocation":"3167:17:12","nodeType":"ErrorDefinition","parameters":{"id":1074,"nodeType":"ParameterList","parameters":[],"src":"3184:2:12"},"src":"3161:26:12"},{"documentation":{"id":1076,"nodeType":"StructuredDocumentation","src":"3193:97:12","text":"@notice A user called a Vault function (swap, add/remove liquidity) outside the lock context."},"errorSelector":"c09ba736","id":1078,"name":"VaultIsNotUnlocked","nameLocation":"3301:18:12","nodeType":"ErrorDefinition","parameters":{"id":1077,"nodeType":"ParameterList","parameters":[],"src":"3319:2:12"},"src":"3295:27:12"},{"documentation":{"id":1079,"nodeType":"StructuredDocumentation","src":"3328:105:12","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"53f976d4","id":1081,"name":"DynamicSwapFeeHookFailed","nameLocation":"3444:24:12","nodeType":"ErrorDefinition","parameters":{"id":1080,"nodeType":"ParameterList","parameters":[],"src":"3468:2:12"},"src":"3438:33:12"},{"documentation":{"id":1082,"nodeType":"StructuredDocumentation","src":"3477:105:12","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"e91e17e7","id":1084,"name":"BeforeSwapHookFailed","nameLocation":"3593:20:12","nodeType":"ErrorDefinition","parameters":{"id":1083,"nodeType":"ParameterList","parameters":[],"src":"3613:2:12"},"src":"3587:29:12"},{"documentation":{"id":1085,"nodeType":"StructuredDocumentation","src":"3622:104:12","text":"@notice The pool has returned false to the afterSwap hook, indicating the transaction should revert."},"errorSelector":"15a29dec","id":1087,"name":"AfterSwapHookFailed","nameLocation":"3737:19:12","nodeType":"ErrorDefinition","parameters":{"id":1086,"nodeType":"ParameterList","parameters":[],"src":"3756:2:12"},"src":"3731:28:12"},{"documentation":{"id":1088,"nodeType":"StructuredDocumentation","src":"3765:111:12","text":"@notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert."},"errorSelector":"60612925","id":1090,"name":"BeforeInitializeHookFailed","nameLocation":"3887:26:12","nodeType":"ErrorDefinition","parameters":{"id":1089,"nodeType":"ParameterList","parameters":[],"src":"3913:2:12"},"src":"3881:35:12"},{"documentation":{"id":1091,"nodeType":"StructuredDocumentation","src":"3922:110:12","text":"@notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert."},"errorSelector":"0f23dbc6","id":1093,"name":"AfterInitializeHookFailed","nameLocation":"4043:25:12","nodeType":"ErrorDefinition","parameters":{"id":1092,"nodeType":"ParameterList","parameters":[],"src":"4068:2:12"},"src":"4037:34:12"},{"documentation":{"id":1094,"nodeType":"StructuredDocumentation","src":"4077:113:12","text":"@notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"0b2eb652","id":1096,"name":"BeforeAddLiquidityHookFailed","nameLocation":"4201:28:12","nodeType":"ErrorDefinition","parameters":{"id":1095,"nodeType":"ParameterList","parameters":[],"src":"4229:2:12"},"src":"4195:37:12"},{"documentation":{"id":1097,"nodeType":"StructuredDocumentation","src":"4238:112:12","text":"@notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"e1249165","id":1099,"name":"AfterAddLiquidityHookFailed","nameLocation":"4361:27:12","nodeType":"ErrorDefinition","parameters":{"id":1098,"nodeType":"ParameterList","parameters":[],"src":"4388:2:12"},"src":"4355:36:12"},{"documentation":{"id":1100,"nodeType":"StructuredDocumentation","src":"4397:116:12","text":"@notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"2aaf8866","id":1102,"name":"BeforeRemoveLiquidityHookFailed","nameLocation":"4524:31:12","nodeType":"ErrorDefinition","parameters":{"id":1101,"nodeType":"ParameterList","parameters":[],"src":"4555:2:12"},"src":"4518:40:12"},{"documentation":{"id":1103,"nodeType":"StructuredDocumentation","src":"4564:115:12","text":"@notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"1d3391d8","id":1105,"name":"AfterRemoveLiquidityHookFailed","nameLocation":"4690:30:12","nodeType":"ErrorDefinition","parameters":{"id":1104,"nodeType":"ParameterList","parameters":[],"src":"4720:2:12"},"src":"4684:39:12"},{"documentation":{"id":1106,"nodeType":"StructuredDocumentation","src":"4729:115:12","text":"@notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance)."},"errorSelector":"e5d185cf","id":1108,"name":"RouterNotTrusted","nameLocation":"4855:16:12","nodeType":"ErrorDefinition","parameters":{"id":1107,"nodeType":"ParameterList","parameters":[],"src":"4871:2:12"},"src":"4849:25:12"},{"documentation":{"id":1109,"nodeType":"StructuredDocumentation","src":"5097:47:12","text":"@notice The user tried to swap zero tokens."},"errorSelector":"57a456b7","id":1111,"name":"AmountGivenZero","nameLocation":"5155:15:12","nodeType":"ErrorDefinition","parameters":{"id":1110,"nodeType":"ParameterList","parameters":[],"src":"5170:2:12"},"src":"5149:24:12"},{"documentation":{"id":1112,"nodeType":"StructuredDocumentation","src":"5179:58:12","text":"@notice The user attempted to swap a token for itself."},"errorSelector":"a54b181d","id":1114,"name":"CannotSwapSameToken","nameLocation":"5248:19:12","nodeType":"ErrorDefinition","parameters":{"id":1113,"nodeType":"ParameterList","parameters":[],"src":"5267:2:12"},"src":"5242:28:12"},{"documentation":{"id":1115,"nodeType":"StructuredDocumentation","src":"5276:137:12","text":" @notice The user attempted to operate with a token that is not in the pool.\n @param token The unregistered token"},"errorSelector":"ddef98d7","id":1120,"name":"TokenNotRegistered","nameLocation":"5424:18:12","nodeType":"ErrorDefinition","parameters":{"id":1119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1118,"mutability":"mutable","name":"token","nameLocation":"5450:5:12","nodeType":"VariableDeclaration","scope":1120,"src":"5443:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":1117,"nodeType":"UserDefinedTypeName","pathNode":{"id":1116,"name":"IERC20","nameLocations":["5443:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"5443:6:12"},"referencedDeclaration":6980,"src":"5443:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"5442:14:12"},"src":"5418:39:12"},{"documentation":{"id":1121,"nodeType":"StructuredDocumentation","src":"5463:215:12","text":" @notice An amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"e2ea151b","id":1127,"name":"SwapLimit","nameLocation":"5689:9:12","nodeType":"ErrorDefinition","parameters":{"id":1126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1123,"mutability":"mutable","name":"amount","nameLocation":"5707:6:12","nodeType":"VariableDeclaration","scope":1127,"src":"5699:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1122,"name":"uint256","nodeType":"ElementaryTypeName","src":"5699:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1125,"mutability":"mutable","name":"limit","nameLocation":"5723:5:12","nodeType":"VariableDeclaration","scope":1127,"src":"5715:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1124,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5698:31:12"},"src":"5683:47:12"},{"documentation":{"id":1128,"nodeType":"StructuredDocumentation","src":"5736:228:12","text":" @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"cc0e4a99","id":1134,"name":"HookAdjustedSwapLimit","nameLocation":"5975:21:12","nodeType":"ErrorDefinition","parameters":{"id":1133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1130,"mutability":"mutable","name":"amount","nameLocation":"6005:6:12","nodeType":"VariableDeclaration","scope":1134,"src":"5997:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1129,"name":"uint256","nodeType":"ElementaryTypeName","src":"5997:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1132,"mutability":"mutable","name":"limit","nameLocation":"6021:5:12","nodeType":"VariableDeclaration","scope":1134,"src":"6013:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1131,"name":"uint256","nodeType":"ElementaryTypeName","src":"6013:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5996:31:12"},"src":"5969:59:12"},{"documentation":{"id":1135,"nodeType":"StructuredDocumentation","src":"6034:87:12","text":"@notice The amount given or calculated for an operation is below the minimum limit."},"errorSelector":"1ed4d118","id":1137,"name":"TradeAmountTooSmall","nameLocation":"6132:19:12","nodeType":"ErrorDefinition","parameters":{"id":1136,"nodeType":"ParameterList","parameters":[],"src":"6151:2:12"},"src":"6126:28:12"},{"documentation":{"id":1138,"nodeType":"StructuredDocumentation","src":"6381:45:12","text":"@notice Add liquidity kind not supported."},"errorSelector":"6c02b395","id":1140,"name":"InvalidAddLiquidityKind","nameLocation":"6437:23:12","nodeType":"ErrorDefinition","parameters":{"id":1139,"nodeType":"ParameterList","parameters":[],"src":"6460:2:12"},"src":"6431:32:12"},{"documentation":{"id":1141,"nodeType":"StructuredDocumentation","src":"6469:264:12","text":" @notice A required amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"8eda85e4","id":1150,"name":"AmountInAboveMax","nameLocation":"6744:16:12","nodeType":"ErrorDefinition","parameters":{"id":1149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1144,"mutability":"mutable","name":"tokenIn","nameLocation":"6768:7:12","nodeType":"VariableDeclaration","scope":1150,"src":"6761:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":1143,"nodeType":"UserDefinedTypeName","pathNode":{"id":1142,"name":"IERC20","nameLocations":["6761:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"6761:6:12"},"referencedDeclaration":6980,"src":"6761:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1146,"mutability":"mutable","name":"amountIn","nameLocation":"6785:8:12","nodeType":"VariableDeclaration","scope":1150,"src":"6777:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1145,"name":"uint256","nodeType":"ElementaryTypeName","src":"6777:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1148,"mutability":"mutable","name":"maxAmountIn","nameLocation":"6803:11:12","nodeType":"VariableDeclaration","scope":1150,"src":"6795:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1147,"name":"uint256","nodeType":"ElementaryTypeName","src":"6795:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6760:55:12"},"src":"6738:78:12"},{"documentation":{"id":1151,"nodeType":"StructuredDocumentation","src":"6822:269:12","text":" @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"cefa3afa","id":1160,"name":"HookAdjustedAmountInAboveMax","nameLocation":"7102:28:12","nodeType":"ErrorDefinition","parameters":{"id":1159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1154,"mutability":"mutable","name":"tokenIn","nameLocation":"7138:7:12","nodeType":"VariableDeclaration","scope":1160,"src":"7131:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":1153,"nodeType":"UserDefinedTypeName","pathNode":{"id":1152,"name":"IERC20","nameLocations":["7131:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"7131:6:12"},"referencedDeclaration":6980,"src":"7131:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1156,"mutability":"mutable","name":"amountIn","nameLocation":"7155:8:12","nodeType":"VariableDeclaration","scope":1160,"src":"7147:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1155,"name":"uint256","nodeType":"ElementaryTypeName","src":"7147:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1158,"mutability":"mutable","name":"maxAmountIn","nameLocation":"7173:11:12","nodeType":"VariableDeclaration","scope":1160,"src":"7165:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1157,"name":"uint256","nodeType":"ElementaryTypeName","src":"7165:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7130:55:12"},"src":"7096:90:12"},{"documentation":{"id":1161,"nodeType":"StructuredDocumentation","src":"7192:245:12","text":" @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"8d261d5d","id":1167,"name":"BptAmountOutBelowMin","nameLocation":"7448:20:12","nodeType":"ErrorDefinition","parameters":{"id":1166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1163,"mutability":"mutable","name":"amountOut","nameLocation":"7477:9:12","nodeType":"VariableDeclaration","scope":1167,"src":"7469:17:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1162,"name":"uint256","nodeType":"ElementaryTypeName","src":"7469:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1165,"mutability":"mutable","name":"minAmountOut","nameLocation":"7496:12:12","nodeType":"VariableDeclaration","scope":1167,"src":"7488:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1164,"name":"uint256","nodeType":"ElementaryTypeName","src":"7488:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7468:41:12"},"src":"7442:68:12"},{"documentation":{"id":1168,"nodeType":"StructuredDocumentation","src":"7516:75:12","text":"@notice Pool does not support adding liquidity with a customized input."},"errorSelector":"4876c0bc","id":1170,"name":"DoesNotSupportAddLiquidityCustom","nameLocation":"7602:32:12","nodeType":"ErrorDefinition","parameters":{"id":1169,"nodeType":"ParameterList","parameters":[],"src":"7634:2:12"},"src":"7596:41:12"},{"documentation":{"id":1171,"nodeType":"StructuredDocumentation","src":"7643:68:12","text":"@notice Pool does not support adding liquidity through donation."},"errorSelector":"efe0265d","id":1173,"name":"DoesNotSupportDonation","nameLocation":"7722:22:12","nodeType":"ErrorDefinition","parameters":{"id":1172,"nodeType":"ParameterList","parameters":[],"src":"7744:2:12"},"src":"7716:31:12"},{"documentation":{"id":1174,"nodeType":"StructuredDocumentation","src":"7977:48:12","text":"@notice Remove liquidity kind not supported."},"errorSelector":"137a9a39","id":1176,"name":"InvalidRemoveLiquidityKind","nameLocation":"8036:26:12","nodeType":"ErrorDefinition","parameters":{"id":1175,"nodeType":"ParameterList","parameters":[],"src":"8062:2:12"},"src":"8030:35:12"},{"documentation":{"id":1177,"nodeType":"StructuredDocumentation","src":"8071:269:12","text":" @notice The actual amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"2f785e46","id":1186,"name":"AmountOutBelowMin","nameLocation":"8351:17:12","nodeType":"ErrorDefinition","parameters":{"id":1185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1180,"mutability":"mutable","name":"tokenOut","nameLocation":"8376:8:12","nodeType":"VariableDeclaration","scope":1186,"src":"8369:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":1179,"nodeType":"UserDefinedTypeName","pathNode":{"id":1178,"name":"IERC20","nameLocations":["8369:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"8369:6:12"},"referencedDeclaration":6980,"src":"8369:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1182,"mutability":"mutable","name":"amountOut","nameLocation":"8394:9:12","nodeType":"VariableDeclaration","scope":1186,"src":"8386:17:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1181,"name":"uint256","nodeType":"ElementaryTypeName","src":"8386:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1184,"mutability":"mutable","name":"minAmountOut","nameLocation":"8413:12:12","nodeType":"VariableDeclaration","scope":1186,"src":"8405:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1183,"name":"uint256","nodeType":"ElementaryTypeName","src":"8405:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8368:58:12"},"src":"8345:82:12"},{"documentation":{"id":1187,"nodeType":"StructuredDocumentation","src":"8433:276:12","text":" @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"fbd8a724","id":1196,"name":"HookAdjustedAmountOutBelowMin","nameLocation":"8720:29:12","nodeType":"ErrorDefinition","parameters":{"id":1195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1190,"mutability":"mutable","name":"tokenOut","nameLocation":"8757:8:12","nodeType":"VariableDeclaration","scope":1196,"src":"8750:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":1189,"nodeType":"UserDefinedTypeName","pathNode":{"id":1188,"name":"IERC20","nameLocations":["8750:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"8750:6:12"},"referencedDeclaration":6980,"src":"8750:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1192,"mutability":"mutable","name":"amountOut","nameLocation":"8775:9:12","nodeType":"VariableDeclaration","scope":1196,"src":"8767:17:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1191,"name":"uint256","nodeType":"ElementaryTypeName","src":"8767:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1194,"mutability":"mutable","name":"minAmountOut","nameLocation":"8794:12:12","nodeType":"VariableDeclaration","scope":1196,"src":"8786:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1193,"name":"uint256","nodeType":"ElementaryTypeName","src":"8786:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8749:58:12"},"src":"8714:94:12"},{"documentation":{"id":1197,"nodeType":"StructuredDocumentation","src":"8814:228:12","text":" @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n @param amountIn The total BPT amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"31d38e0b","id":1203,"name":"BptAmountInAboveMax","nameLocation":"9053:19:12","nodeType":"ErrorDefinition","parameters":{"id":1202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1199,"mutability":"mutable","name":"amountIn","nameLocation":"9081:8:12","nodeType":"VariableDeclaration","scope":1203,"src":"9073:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1198,"name":"uint256","nodeType":"ElementaryTypeName","src":"9073:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1201,"mutability":"mutable","name":"maxAmountIn","nameLocation":"9099:11:12","nodeType":"VariableDeclaration","scope":1203,"src":"9091:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1200,"name":"uint256","nodeType":"ElementaryTypeName","src":"9091:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9072:39:12"},"src":"9047:65:12"},{"documentation":{"id":1204,"nodeType":"StructuredDocumentation","src":"9118:77:12","text":"@notice Pool does not support removing liquidity with a customized input."},"errorSelector":"cf0a95c0","id":1206,"name":"DoesNotSupportRemoveLiquidityCustom","nameLocation":"9206:35:12","nodeType":"ErrorDefinition","parameters":{"id":1205,"nodeType":"ParameterList","parameters":[],"src":"9241:2:12"},"src":"9200:44:12"},{"documentation":{"id":1207,"nodeType":"StructuredDocumentation","src":"9463:332:12","text":" @notice Error raised when there is an overflow in the fee calculation.\n @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n percentages in the Vault."},"errorSelector":"4c69ac5d","id":1209,"name":"ProtocolFeesExceedTotalCollected","nameLocation":"9806:32:12","nodeType":"ErrorDefinition","parameters":{"id":1208,"nodeType":"ParameterList","parameters":[],"src":"9838:2:12"},"src":"9800:41:12"},{"documentation":{"id":1210,"nodeType":"StructuredDocumentation","src":"9847:430:12","text":" @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is below the minimum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"bfb20688","id":1212,"name":"SwapFeePercentageTooLow","nameLocation":"10288:23:12","nodeType":"ErrorDefinition","parameters":{"id":1211,"nodeType":"ParameterList","parameters":[],"src":"10311:2:12"},"src":"10282:32:12"},{"documentation":{"id":1213,"nodeType":"StructuredDocumentation","src":"10320:433:12","text":" @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is above the maximum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"7f47834b","id":1215,"name":"SwapFeePercentageTooHigh","nameLocation":"10764:24:12","nodeType":"ErrorDefinition","parameters":{"id":1214,"nodeType":"ParameterList","parameters":[],"src":"10788:2:12"},"src":"10758:33:12"},{"documentation":{"id":1216,"nodeType":"StructuredDocumentation","src":"10797:646:12","text":" @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n the aggregate fee calculated here and that stored in the Vault."},"errorSelector":"833fb3ce","id":1218,"name":"FeePrecisionTooHigh","nameLocation":"11454:19:12","nodeType":"ErrorDefinition","parameters":{"id":1217,"nodeType":"ParameterList","parameters":[],"src":"11473:2:12"},"src":"11448:28:12"},{"documentation":{"id":1219,"nodeType":"StructuredDocumentation","src":"11482:107:12","text":"@notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei)."},"errorSelector":"746e5940","id":1221,"name":"PercentageAboveMax","nameLocation":"11600:18:12","nodeType":"ErrorDefinition","parameters":{"id":1220,"nodeType":"ParameterList","parameters":[],"src":"11618:2:12"},"src":"11594:27:12"},{"documentation":{"id":1222,"nodeType":"StructuredDocumentation","src":"11842:78:12","text":"@notice A user tried to execute a query operation when they were disabled."},"errorSelector":"7a198886","id":1224,"name":"QueriesDisabled","nameLocation":"11931:15:12","nodeType":"ErrorDefinition","parameters":{"id":1223,"nodeType":"ParameterList","parameters":[],"src":"11946:2:12"},"src":"11925:24:12"},{"documentation":{"id":1225,"nodeType":"StructuredDocumentation","src":"11955:84:12","text":"@notice An admin tried to re-enable queries, but they were disabled permanently."},"errorSelector":"069f8cbc","id":1227,"name":"QueriesDisabledPermanently","nameLocation":"12050:26:12","nodeType":"ErrorDefinition","parameters":{"id":1226,"nodeType":"ParameterList","parameters":[],"src":"12076:2:12"},"src":"12044:35:12"},{"documentation":{"id":1228,"nodeType":"StructuredDocumentation","src":"12302:104:12","text":" @notice Cannot enable recovery mode when already enabled.\n @param pool The pool"},"errorSelector":"346d7607","id":1232,"name":"PoolInRecoveryMode","nameLocation":"12417:18:12","nodeType":"ErrorDefinition","parameters":{"id":1231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1230,"mutability":"mutable","name":"pool","nameLocation":"12444:4:12","nodeType":"VariableDeclaration","scope":1232,"src":"12436:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1229,"name":"address","nodeType":"ElementaryTypeName","src":"12436:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12435:14:12"},"src":"12411:39:12"},{"documentation":{"id":1233,"nodeType":"StructuredDocumentation","src":"12456:101:12","text":" @notice Cannot disable recovery mode when not enabled.\n @param pool The pool"},"errorSelector":"ef029adf","id":1237,"name":"PoolNotInRecoveryMode","nameLocation":"12568:21:12","nodeType":"ErrorDefinition","parameters":{"id":1236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1235,"mutability":"mutable","name":"pool","nameLocation":"12598:4:12","nodeType":"VariableDeclaration","scope":1237,"src":"12590:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1234,"name":"address","nodeType":"ElementaryTypeName","src":"12590:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12589:14:12"},"src":"12562:42:12"},{"documentation":{"id":1238,"nodeType":"StructuredDocumentation","src":"12828:206:12","text":" @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n @param sender The account attempting to call a permissioned function"},"errorSelector":"089676d5","id":1242,"name":"SenderIsNotVault","nameLocation":"13045:16:12","nodeType":"ErrorDefinition","parameters":{"id":1241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1240,"mutability":"mutable","name":"sender","nameLocation":"13070:6:12","nodeType":"VariableDeclaration","scope":1242,"src":"13062:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1239,"name":"address","nodeType":"ElementaryTypeName","src":"13062:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13061:16:12"},"src":"13039:39:12"},{"documentation":{"id":1243,"nodeType":"StructuredDocumentation","src":"13303:79:12","text":"@notice The caller specified a pause window period longer than the maximum."},"errorSelector":"cc0e8fe5","id":1245,"name":"VaultPauseWindowDurationTooLarge","nameLocation":"13393:32:12","nodeType":"ErrorDefinition","parameters":{"id":1244,"nodeType":"ParameterList","parameters":[],"src":"13425:2:12"},"src":"13387:41:12"},{"documentation":{"id":1246,"nodeType":"StructuredDocumentation","src":"13434:73:12","text":"@notice The caller specified a buffer period longer than the maximum."},"errorSelector":"9ea4efee","id":1248,"name":"PauseBufferPeriodDurationTooLarge","nameLocation":"13518:33:12","nodeType":"ErrorDefinition","parameters":{"id":1247,"nodeType":"ParameterList","parameters":[],"src":"13551:2:12"},"src":"13512:42:12"},{"documentation":{"id":1249,"nodeType":"StructuredDocumentation","src":"13560:76:12","text":"@notice A user tried to perform an operation while the Vault was paused."},"errorSelector":"da9f8b34","id":1251,"name":"VaultPaused","nameLocation":"13647:11:12","nodeType":"ErrorDefinition","parameters":{"id":1250,"nodeType":"ParameterList","parameters":[],"src":"13658:2:12"},"src":"13641:20:12"},{"documentation":{"id":1252,"nodeType":"StructuredDocumentation","src":"13667:73:12","text":"@notice Governance tried to unpause the Vault when it was not paused."},"errorSelector":"f7ff4dca","id":1254,"name":"VaultNotPaused","nameLocation":"13751:14:12","nodeType":"ErrorDefinition","parameters":{"id":1253,"nodeType":"ParameterList","parameters":[],"src":"13765:2:12"},"src":"13745:23:12"},{"documentation":{"id":1255,"nodeType":"StructuredDocumentation","src":"13774:79:12","text":"@notice Governance tried to pause the Vault after the pause period expired."},"errorSelector":"0e4460b7","id":1257,"name":"VaultPauseWindowExpired","nameLocation":"13864:23:12","nodeType":"ErrorDefinition","parameters":{"id":1256,"nodeType":"ParameterList","parameters":[],"src":"13887:2:12"},"src":"13858:32:12"},{"documentation":{"id":1258,"nodeType":"StructuredDocumentation","src":"13896:123:12","text":" @notice A user tried to perform an operation involving a paused Pool.\n @param pool The paused pool"},"errorSelector":"d971f597","id":1262,"name":"PoolPaused","nameLocation":"14030:10:12","nodeType":"ErrorDefinition","parameters":{"id":1261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1260,"mutability":"mutable","name":"pool","nameLocation":"14049:4:12","nodeType":"VariableDeclaration","scope":1262,"src":"14041:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1259,"name":"address","nodeType":"ElementaryTypeName","src":"14041:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14040:14:12"},"src":"14024:31:12"},{"documentation":{"id":1263,"nodeType":"StructuredDocumentation","src":"14061:124:12","text":" @notice Governance tried to unpause the Pool when it was not paused.\n @param pool The unpaused pool"},"errorSelector":"fdcd6894","id":1267,"name":"PoolNotPaused","nameLocation":"14196:13:12","nodeType":"ErrorDefinition","parameters":{"id":1266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1265,"mutability":"mutable","name":"pool","nameLocation":"14218:4:12","nodeType":"VariableDeclaration","scope":1267,"src":"14210:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1264,"name":"address","nodeType":"ElementaryTypeName","src":"14210:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14209:14:12"},"src":"14190:34:12"},{"documentation":{"id":1268,"nodeType":"StructuredDocumentation","src":"14230:119:12","text":" @notice Governance tried to pause a Pool after the pause period expired.\n @param pool The pool"},"errorSelector":"eb5a1217","id":1272,"name":"PoolPauseWindowExpired","nameLocation":"14360:22:12","nodeType":"ErrorDefinition","parameters":{"id":1271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1270,"mutability":"mutable","name":"pool","nameLocation":"14391:4:12","nodeType":"VariableDeclaration","scope":1272,"src":"14383:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1269,"name":"address","nodeType":"ElementaryTypeName","src":"14383:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14382:14:12"},"src":"14354:43:12"},{"documentation":{"id":1273,"nodeType":"StructuredDocumentation","src":"14628:163:12","text":" @notice The buffer for the given wrapped token was already initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"1690fa40","id":1278,"name":"BufferAlreadyInitialized","nameLocation":"14802:24:12","nodeType":"ErrorDefinition","parameters":{"id":1277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1276,"mutability":"mutable","name":"wrappedToken","nameLocation":"14836:12:12","nodeType":"VariableDeclaration","scope":1278,"src":"14827:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":1275,"nodeType":"UserDefinedTypeName","pathNode":{"id":1274,"name":"IERC4626","nameLocations":["14827:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"14827:8:12"},"referencedDeclaration":6704,"src":"14827:8:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"14826:23:12"},"src":"14796:54:12"},{"documentation":{"id":1279,"nodeType":"StructuredDocumentation","src":"14856:159:12","text":" @notice The buffer for the given wrapped token was not initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"85f41299","id":1284,"name":"BufferNotInitialized","nameLocation":"15026:20:12","nodeType":"ErrorDefinition","parameters":{"id":1283,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1282,"mutability":"mutable","name":"wrappedToken","nameLocation":"15056:12:12","nodeType":"VariableDeclaration","scope":1284,"src":"15047:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":1281,"nodeType":"UserDefinedTypeName","pathNode":{"id":1280,"name":"IERC4626","nameLocations":["15047:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"15047:8:12"},"referencedDeclaration":6704,"src":"15047:8:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15046:23:12"},"src":"15020:50:12"},{"documentation":{"id":1285,"nodeType":"StructuredDocumentation","src":"15076:90:12","text":"@notice The user is trying to remove more than their allocated shares from the buffer."},"errorSelector":"98c5dbd6","id":1287,"name":"NotEnoughBufferShares","nameLocation":"15177:21:12","nodeType":"ErrorDefinition","parameters":{"id":1286,"nodeType":"ParameterList","parameters":[],"src":"15198:2:12"},"src":"15171:30:12"},{"documentation":{"id":1288,"nodeType":"StructuredDocumentation","src":"15207:436:12","text":" @notice The wrapped token asset does not match the underlying token.\n @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n Legitimate wrapper contracts should make the asset a constant or immutable value.\n @param wrappedToken The wrapped token corresponding to the buffer\n @param underlyingToken The underlying token returned by `asset`"},"errorSelector":"36b18d09","id":1295,"name":"WrongUnderlyingToken","nameLocation":"15654:20:12","nodeType":"ErrorDefinition","parameters":{"id":1294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1291,"mutability":"mutable","name":"wrappedToken","nameLocation":"15684:12:12","nodeType":"VariableDeclaration","scope":1295,"src":"15675:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":1290,"nodeType":"UserDefinedTypeName","pathNode":{"id":1289,"name":"IERC4626","nameLocations":["15675:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"15675:8:12"},"referencedDeclaration":6704,"src":"15675:8:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1293,"mutability":"mutable","name":"underlyingToken","nameLocation":"15706:15:12","nodeType":"VariableDeclaration","scope":1295,"src":"15698:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1292,"name":"address","nodeType":"ElementaryTypeName","src":"15698:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15674:48:12"},"src":"15648:75:12"},{"documentation":{"id":1296,"nodeType":"StructuredDocumentation","src":"15729:322:12","text":" @notice A wrapped token reported the zero address as its underlying token asset.\n @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n re-initialize the buffer).\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"d407f9c5","id":1301,"name":"InvalidUnderlyingToken","nameLocation":"16062:22:12","nodeType":"ErrorDefinition","parameters":{"id":1300,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1299,"mutability":"mutable","name":"wrappedToken","nameLocation":"16094:12:12","nodeType":"VariableDeclaration","scope":1301,"src":"16085:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":1298,"nodeType":"UserDefinedTypeName","pathNode":{"id":1297,"name":"IERC4626","nameLocations":["16085:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"16085:8:12"},"referencedDeclaration":6704,"src":"16085:8:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16084:23:12"},"src":"16056:52:12"},{"documentation":{"id":1302,"nodeType":"StructuredDocumentation","src":"16114:183:12","text":" @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"18fe7385","id":1307,"name":"WrapAmountTooSmall","nameLocation":"16308:18:12","nodeType":"ErrorDefinition","parameters":{"id":1306,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1305,"mutability":"mutable","name":"wrappedToken","nameLocation":"16336:12:12","nodeType":"VariableDeclaration","scope":1307,"src":"16327:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":1304,"nodeType":"UserDefinedTypeName","pathNode":{"id":1303,"name":"IERC4626","nameLocations":["16327:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"16327:8:12"},"referencedDeclaration":6704,"src":"16327:8:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16326:23:12"},"src":"16302:48:12"},{"documentation":{"id":1308,"nodeType":"StructuredDocumentation","src":"16356:70:12","text":"@notice Buffer operation attempted while vault buffers are paused."},"errorSelector":"0f27df09","id":1310,"name":"VaultBuffersArePaused","nameLocation":"16437:21:12","nodeType":"ErrorDefinition","parameters":{"id":1309,"nodeType":"ParameterList","parameters":[],"src":"16458:2:12"},"src":"16431:30:12"},{"documentation":{"id":1311,"nodeType":"StructuredDocumentation","src":"16467:58:12","text":"@notice Buffer shares were minted to the zero address."},"errorSelector":"dbe6b10e","id":1313,"name":"BufferSharesInvalidReceiver","nameLocation":"16536:27:12","nodeType":"ErrorDefinition","parameters":{"id":1312,"nodeType":"ParameterList","parameters":[],"src":"16563:2:12"},"src":"16530:36:12"},{"documentation":{"id":1314,"nodeType":"StructuredDocumentation","src":"16572:60:12","text":"@notice Buffer shares were burned from the zero address."},"errorSelector":"586d06df","id":1316,"name":"BufferSharesInvalidOwner","nameLocation":"16643:24:12","nodeType":"ErrorDefinition","parameters":{"id":1315,"nodeType":"ParameterList","parameters":[],"src":"16667:2:12"},"src":"16637:33:12"},{"documentation":{"id":1317,"nodeType":"StructuredDocumentation","src":"16676:173:12","text":" @notice The total supply of a buffer can't be lower than the absolute minimum.\n @param totalSupply The total supply value that was below the minimum"},"errorSelector":"34bdbfaa","id":1321,"name":"BufferTotalSupplyTooLow","nameLocation":"16860:23:12","nodeType":"ErrorDefinition","parameters":{"id":1320,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1319,"mutability":"mutable","name":"totalSupply","nameLocation":"16892:11:12","nodeType":"VariableDeclaration","scope":1321,"src":"16884:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1318,"name":"uint256","nodeType":"ElementaryTypeName","src":"16884:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16883:21:12"},"src":"16854:51:12"},{"documentation":{"id":1322,"nodeType":"StructuredDocumentation","src":"16911:97:12","text":"@dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should."},"errorSelector":"1c6a5375","id":1331,"name":"NotEnoughUnderlying","nameLocation":"17019:19:12","nodeType":"ErrorDefinition","parameters":{"id":1330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1325,"mutability":"mutable","name":"wrappedToken","nameLocation":"17048:12:12","nodeType":"VariableDeclaration","scope":1331,"src":"17039:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":1324,"nodeType":"UserDefinedTypeName","pathNode":{"id":1323,"name":"IERC4626","nameLocations":["17039:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"17039:8:12"},"referencedDeclaration":6704,"src":"17039:8:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1327,"mutability":"mutable","name":"expectedUnderlyingAmount","nameLocation":"17070:24:12","nodeType":"VariableDeclaration","scope":1331,"src":"17062:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1326,"name":"uint256","nodeType":"ElementaryTypeName","src":"17062:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1329,"mutability":"mutable","name":"actualUnderlyingAmount","nameLocation":"17104:22:12","nodeType":"VariableDeclaration","scope":1331,"src":"17096:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1328,"name":"uint256","nodeType":"ElementaryTypeName","src":"17096:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17038:89:12"},"src":"17013:115:12"},{"documentation":{"id":1332,"nodeType":"StructuredDocumentation","src":"17134:94:12","text":"@dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should."},"errorSelector":"1149424d","id":1341,"name":"NotEnoughWrapped","nameLocation":"17239:16:12","nodeType":"ErrorDefinition","parameters":{"id":1340,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1335,"mutability":"mutable","name":"wrappedToken","nameLocation":"17265:12:12","nodeType":"VariableDeclaration","scope":1341,"src":"17256:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":1334,"nodeType":"UserDefinedTypeName","pathNode":{"id":1333,"name":"IERC4626","nameLocations":["17256:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"17256:8:12"},"referencedDeclaration":6704,"src":"17256:8:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1337,"mutability":"mutable","name":"expectedWrappedAmount","nameLocation":"17287:21:12","nodeType":"VariableDeclaration","scope":1341,"src":"17279:29:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1336,"name":"uint256","nodeType":"ElementaryTypeName","src":"17279:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1339,"mutability":"mutable","name":"actualWrappedAmount","nameLocation":"17318:19:12","nodeType":"VariableDeclaration","scope":1341,"src":"17310:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1338,"name":"uint256","nodeType":"ElementaryTypeName","src":"17310:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17255:83:12"},"src":"17233:106:12"},{"documentation":{"id":1342,"nodeType":"StructuredDocumentation","src":"17345:76:12","text":"@dev Shares issued during initialization are below the requested amount."},"errorSelector":"da0cb07e","id":1348,"name":"IssuedSharesBelowMin","nameLocation":"17432:20:12","nodeType":"ErrorDefinition","parameters":{"id":1347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1344,"mutability":"mutable","name":"issuedShares","nameLocation":"17461:12:12","nodeType":"VariableDeclaration","scope":1348,"src":"17453:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1343,"name":"uint256","nodeType":"ElementaryTypeName","src":"17453:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1346,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17483:15:12","nodeType":"VariableDeclaration","scope":1348,"src":"17475:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1345,"name":"uint256","nodeType":"ElementaryTypeName","src":"17475:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17452:47:12"},"src":"17426:74:12"},{"documentation":{"id":1349,"nodeType":"StructuredDocumentation","src":"17727:87:12","text":"@notice Pool does not support adding / removing liquidity with an unbalanced input."},"errorSelector":"d4f5779c","id":1351,"name":"DoesNotSupportUnbalancedLiquidity","nameLocation":"17825:33:12","nodeType":"ErrorDefinition","parameters":{"id":1350,"nodeType":"ParameterList","parameters":[],"src":"17858:2:12"},"src":"17819:42:12"},{"documentation":{"id":1352,"nodeType":"StructuredDocumentation","src":"17867:48:12","text":"@notice The contract should not receive ETH."},"errorSelector":"f2238896","id":1354,"name":"CannotReceiveEth","nameLocation":"17926:16:12","nodeType":"ErrorDefinition","parameters":{"id":1353,"nodeType":"ParameterList","parameters":[],"src":"17942:2:12"},"src":"17920:25:12"},{"documentation":{"id":1355,"nodeType":"StructuredDocumentation","src":"17951:156:12","text":" @notice The `VaultExtension` contract was called by an account directly.\n @dev It can only be called by the Vault via delegatecall."},"errorSelector":"9fd25b36","id":1357,"name":"NotVaultDelegateCall","nameLocation":"18118:20:12","nodeType":"ErrorDefinition","parameters":{"id":1356,"nodeType":"ParameterList","parameters":[],"src":"18138:2:12"},"src":"18112:29:12"},{"documentation":{"id":1358,"nodeType":"StructuredDocumentation","src":"18147:89:12","text":"@notice The `VaultExtension` contract was configured with an incorrect Vault address."},"errorSelector":"1ab9d9d0","id":1360,"name":"WrongVaultExtensionDeployment","nameLocation":"18247:29:12","nodeType":"ErrorDefinition","parameters":{"id":1359,"nodeType":"ParameterList","parameters":[],"src":"18276:2:12"},"src":"18241:38:12"},{"documentation":{"id":1361,"nodeType":"StructuredDocumentation","src":"18285:96:12","text":"@notice The `ProtocolFeeController` contract was configured with an incorrect Vault address."},"errorSelector":"1bbe95c7","id":1363,"name":"WrongProtocolFeeControllerDeployment","nameLocation":"18392:36:12","nodeType":"ErrorDefinition","parameters":{"id":1362,"nodeType":"ParameterList","parameters":[],"src":"18428:2:12"},"src":"18386:45:12"},{"documentation":{"id":1364,"nodeType":"StructuredDocumentation","src":"18437:85:12","text":"@notice The `VaultAdmin` contract was configured with an incorrect Vault address."},"errorSelector":"82cc28b6","id":1366,"name":"WrongVaultAdminDeployment","nameLocation":"18533:25:12","nodeType":"ErrorDefinition","parameters":{"id":1365,"nodeType":"ParameterList","parameters":[],"src":"18558:2:12"},"src":"18527:34:12"},{"documentation":{"id":1367,"nodeType":"StructuredDocumentation","src":"18567:54:12","text":"@notice Quote reverted with a reserved error code."},"errorSelector":"28f95541","id":1369,"name":"QuoteResultSpoofed","nameLocation":"18632:18:12","nodeType":"ErrorDefinition","parameters":{"id":1368,"nodeType":"ParameterList","parameters":[],"src":"18650:2:12"},"src":"18626:27:12"}],"scope":1371,"src":"316:18339:12","usedErrors":[1015,1020,1025,1030,1039,1045,1048,1051,1054,1057,1060,1063,1072,1075,1078,1081,1084,1087,1090,1093,1096,1099,1102,1105,1108,1111,1114,1120,1127,1134,1137,1140,1150,1160,1167,1170,1173,1176,1186,1196,1203,1206,1209,1212,1215,1218,1221,1224,1227,1232,1237,1242,1245,1248,1251,1254,1257,1262,1267,1272,1278,1284,1287,1295,1301,1307,1310,1313,1316,1321,1331,1341,1348,1351,1354,1357,1360,1363,1366,1369],"usedEvents":[]}],"src":"46:18610:12"},"id":12},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","exportedSymbols":{"AddLiquidityKind":[2409],"AddLiquidityParams":[2425],"AfterSwapParams":[2403],"BufferWrapOrUnwrapParams":[2464],"FEE_BITLENGTH":[2467],"FEE_SCALING_FACTOR":[2470],"HookFlags":[2229],"HooksConfig":[2253],"IAuthorizer":[40],"IERC20":[6980],"IERC4626":[6704],"IHooks":[300],"IProtocolFeeController":[643],"IRateProvider":[24],"IVaultEvents":[1609],"LiquidityManagement":[2182],"MAX_FEE_PERCENTAGE":[2473],"PoolConfig":[2207],"PoolConfigBits":[2184],"PoolData":[2331],"PoolRoleAccounts":[2279],"PoolSwapParams":[2374],"RemoveLiquidityKind":[2430],"RemoveLiquidityParams":[2446],"Rounding":[2334],"SwapKind":[2337],"SwapState":[2263],"TokenConfig":[2296],"TokenInfo":[2306],"TokenType":[2283],"VaultState":[2271],"VaultSwapParams":[2356],"WrappingDirection":[2449]},"id":1610,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1372,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:13"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1374,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1610,"sourceUnit":6705,"src":"72:75:13","symbolAliases":[{"foreign":{"id":1373,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6704,"src":"81:8:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1376,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1610,"sourceUnit":6981,"src":"148:72:13","symbolAliases":[{"foreign":{"id":1375,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"157:6:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":1378,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1610,"sourceUnit":644,"src":"222:70:13","symbolAliases":[{"foreign":{"id":1377,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":643,"src":"231:22:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":1380,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1610,"sourceUnit":41,"src":"293:48:13","symbolAliases":[{"foreign":{"id":1379,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40,"src":"302:11:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":1382,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1610,"sourceUnit":301,"src":"342:38:13","symbolAliases":[{"foreign":{"id":1381,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":300,"src":"351:6:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1383,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1610,"sourceUnit":2474,"src":"381:26:13","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultEvents","contractDependencies":[],"contractKind":"interface","documentation":{"id":1384,"nodeType":"StructuredDocumentation","src":"409:91:13","text":"@dev Events are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":1609,"linearizedBaseContracts":[1609],"name":"IVaultEvents","nameLocation":"510:12:13","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1385,"nodeType":"StructuredDocumentation","src":"529:657:13","text":" @notice A Pool was registered by calling `registerPool`.\n @param pool The pool being registered\n @param factory The factory creating the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The static swap fee of the pool\n @param pauseWindowEndTime The pool's pause window end time\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n @param liquidityManagement Supported liquidity management hook flags"},"eventSelector":"bc1561eeab9f40962e2fb827a7ff9c7cdb47a9d7c84caeefa4ed90e043842dad","id":1408,"name":"PoolRegistered","nameLocation":"1197:14:13","nodeType":"EventDefinition","parameters":{"id":1407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1387,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1237:4:13","nodeType":"VariableDeclaration","scope":1408,"src":"1221:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1386,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1389,"indexed":true,"mutability":"mutable","name":"factory","nameLocation":"1267:7:13","nodeType":"VariableDeclaration","scope":1408,"src":"1251:23:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1388,"name":"address","nodeType":"ElementaryTypeName","src":"1251:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1393,"indexed":false,"mutability":"mutable","name":"tokenConfig","nameLocation":"1298:11:13","nodeType":"VariableDeclaration","scope":1408,"src":"1284:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2296_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1391,"nodeType":"UserDefinedTypeName","pathNode":{"id":1390,"name":"TokenConfig","nameLocations":["1284:11:13"],"nodeType":"IdentifierPath","referencedDeclaration":2296,"src":"1284:11:13"},"referencedDeclaration":2296,"src":"1284:11:13","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2296_storage_ptr","typeString":"struct TokenConfig"}},"id":1392,"nodeType":"ArrayTypeName","src":"1284:13:13","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2296_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1395,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1327:17:13","nodeType":"VariableDeclaration","scope":1408,"src":"1319:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1394,"name":"uint256","nodeType":"ElementaryTypeName","src":"1319:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1397,"indexed":false,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1361:18:13","nodeType":"VariableDeclaration","scope":1408,"src":"1354:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1396,"name":"uint32","nodeType":"ElementaryTypeName","src":"1354:6:13","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1400,"indexed":false,"mutability":"mutable","name":"roleAccounts","nameLocation":"1406:12:13","nodeType":"VariableDeclaration","scope":1408,"src":"1389:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2279_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1399,"nodeType":"UserDefinedTypeName","pathNode":{"id":1398,"name":"PoolRoleAccounts","nameLocations":["1389:16:13"],"nodeType":"IdentifierPath","referencedDeclaration":2279,"src":"1389:16:13"},"referencedDeclaration":2279,"src":"1389:16:13","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2279_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":1403,"indexed":false,"mutability":"mutable","name":"hooksConfig","nameLocation":"1440:11:13","nodeType":"VariableDeclaration","scope":1408,"src":"1428:23:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2253_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":1402,"nodeType":"UserDefinedTypeName","pathNode":{"id":1401,"name":"HooksConfig","nameLocations":["1428:11:13"],"nodeType":"IdentifierPath","referencedDeclaration":2253,"src":"1428:11:13"},"referencedDeclaration":2253,"src":"1428:11:13","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2253_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"},{"constant":false,"id":1406,"indexed":false,"mutability":"mutable","name":"liquidityManagement","nameLocation":"1481:19:13","nodeType":"VariableDeclaration","scope":1408,"src":"1461:39:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2182_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1405,"nodeType":"UserDefinedTypeName","pathNode":{"id":1404,"name":"LiquidityManagement","nameLocations":["1461:19:13"],"nodeType":"IdentifierPath","referencedDeclaration":2182,"src":"1461:19:13"},"referencedDeclaration":2182,"src":"1461:19:13","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2182_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1211:295:13"},"src":"1191:316:13"},{"anonymous":false,"documentation":{"id":1409,"nodeType":"StructuredDocumentation","src":"1513:120:13","text":" @notice A Pool was initialized by calling `initialize`.\n @param pool The pool being initialized"},"eventSelector":"cad8c9d32507393b6508ca4a888b81979919b477510585bde8488f153072d6f3","id":1413,"name":"PoolInitialized","nameLocation":"1644:15:13","nodeType":"EventDefinition","parameters":{"id":1412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1411,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1676:4:13","nodeType":"VariableDeclaration","scope":1413,"src":"1660:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1410,"name":"address","nodeType":"ElementaryTypeName","src":"1660:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1659:22:13"},"src":"1638:44:13"},{"anonymous":false,"documentation":{"id":1414,"nodeType":"StructuredDocumentation","src":"1688:478:13","text":" @notice A swap has occurred.\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountIn Number of tokenIn tokens\n @param amountOut Number of tokenOut tokens\n @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n @param swapFeeAmount Swap fee amount paid"},"eventSelector":"0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db","id":1432,"name":"Swap","nameLocation":"2177:4:13","nodeType":"EventDefinition","parameters":{"id":1431,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1416,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2207:4:13","nodeType":"VariableDeclaration","scope":1432,"src":"2191:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1415,"name":"address","nodeType":"ElementaryTypeName","src":"2191:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1419,"indexed":true,"mutability":"mutable","name":"tokenIn","nameLocation":"2236:7:13","nodeType":"VariableDeclaration","scope":1432,"src":"2221:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":1418,"nodeType":"UserDefinedTypeName","pathNode":{"id":1417,"name":"IERC20","nameLocations":["2221:6:13"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"2221:6:13"},"referencedDeclaration":6980,"src":"2221:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1422,"indexed":true,"mutability":"mutable","name":"tokenOut","nameLocation":"2268:8:13","nodeType":"VariableDeclaration","scope":1432,"src":"2253:23:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":1421,"nodeType":"UserDefinedTypeName","pathNode":{"id":1420,"name":"IERC20","nameLocations":["2253:6:13"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"2253:6:13"},"referencedDeclaration":6980,"src":"2253:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1424,"indexed":false,"mutability":"mutable","name":"amountIn","nameLocation":"2294:8:13","nodeType":"VariableDeclaration","scope":1432,"src":"2286:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1423,"name":"uint256","nodeType":"ElementaryTypeName","src":"2286:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1426,"indexed":false,"mutability":"mutable","name":"amountOut","nameLocation":"2320:9:13","nodeType":"VariableDeclaration","scope":1432,"src":"2312:17:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1425,"name":"uint256","nodeType":"ElementaryTypeName","src":"2312:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1428,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"2347:17:13","nodeType":"VariableDeclaration","scope":1432,"src":"2339:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1427,"name":"uint256","nodeType":"ElementaryTypeName","src":"2339:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1430,"indexed":false,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"2382:13:13","nodeType":"VariableDeclaration","scope":1432,"src":"2374:21:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1429,"name":"uint256","nodeType":"ElementaryTypeName","src":"2374:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2181:220:13"},"src":"2171:231:13"},{"anonymous":false,"documentation":{"id":1433,"nodeType":"StructuredDocumentation","src":"2408:352:13","text":" @notice A wrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param depositedUnderlying Number of underlying tokens deposited\n @param mintedShares Number of shares (wrapped tokens) minted\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"3771d13c67011e31e12031c54bb59b0bf544a80b81d280a3711e172aa8b7f47b","id":1444,"name":"Wrap","nameLocation":"2771:4:13","nodeType":"EventDefinition","parameters":{"id":1443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1436,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"2802:12:13","nodeType":"VariableDeclaration","scope":1444,"src":"2785:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":1435,"nodeType":"UserDefinedTypeName","pathNode":{"id":1434,"name":"IERC4626","nameLocations":["2785:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"2785:8:13"},"referencedDeclaration":6704,"src":"2785:8:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1438,"indexed":false,"mutability":"mutable","name":"depositedUnderlying","nameLocation":"2832:19:13","nodeType":"VariableDeclaration","scope":1444,"src":"2824:27:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1437,"name":"uint256","nodeType":"ElementaryTypeName","src":"2824:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1440,"indexed":false,"mutability":"mutable","name":"mintedShares","nameLocation":"2869:12:13","nodeType":"VariableDeclaration","scope":1444,"src":"2861:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1439,"name":"uint256","nodeType":"ElementaryTypeName","src":"2861:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1442,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"2899:14:13","nodeType":"VariableDeclaration","scope":1444,"src":"2891:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1441,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2891:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2775:144:13"},"src":"2765:155:13"},{"anonymous":false,"documentation":{"id":1445,"nodeType":"StructuredDocumentation","src":"2926:355:13","text":" @notice An unwrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param burnedShares Number of shares (wrapped tokens) burned\n @param withdrawnUnderlying Number of underlying tokens withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"eeb740c90bf2b18c9532eb7d473137767036d893dff3e009f32718f821b2a4c0","id":1456,"name":"Unwrap","nameLocation":"3292:6:13","nodeType":"EventDefinition","parameters":{"id":1455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1448,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"3325:12:13","nodeType":"VariableDeclaration","scope":1456,"src":"3308:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":1447,"nodeType":"UserDefinedTypeName","pathNode":{"id":1446,"name":"IERC4626","nameLocations":["3308:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"3308:8:13"},"referencedDeclaration":6704,"src":"3308:8:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1450,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"3355:12:13","nodeType":"VariableDeclaration","scope":1456,"src":"3347:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1449,"name":"uint256","nodeType":"ElementaryTypeName","src":"3347:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1452,"indexed":false,"mutability":"mutable","name":"withdrawnUnderlying","nameLocation":"3385:19:13","nodeType":"VariableDeclaration","scope":1456,"src":"3377:27:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1451,"name":"uint256","nodeType":"ElementaryTypeName","src":"3377:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1454,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"3422:14:13","nodeType":"VariableDeclaration","scope":1456,"src":"3414:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1453,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3414:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3298:144:13"},"src":"3286:157:13"},{"anonymous":false,"documentation":{"id":1457,"nodeType":"StructuredDocumentation","src":"3449:562:13","text":" @notice Liquidity has been added to a pool (including initialization).\n @param pool The pool with liquidity added\n @param liquidityProvider The user performing the operation\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"a26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca871","id":1474,"name":"LiquidityAdded","nameLocation":"4022:14:13","nodeType":"EventDefinition","parameters":{"id":1473,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1459,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4062:4:13","nodeType":"VariableDeclaration","scope":1474,"src":"4046:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1458,"name":"address","nodeType":"ElementaryTypeName","src":"4046:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1461,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4092:17:13","nodeType":"VariableDeclaration","scope":1474,"src":"4076:33:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1460,"name":"address","nodeType":"ElementaryTypeName","src":"4076:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1464,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4144:4:13","nodeType":"VariableDeclaration","scope":1474,"src":"4119:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"},"typeName":{"id":1463,"nodeType":"UserDefinedTypeName","pathNode":{"id":1462,"name":"AddLiquidityKind","nameLocations":["4119:16:13"],"nodeType":"IdentifierPath","referencedDeclaration":2409,"src":"4119:16:13"},"referencedDeclaration":2409,"src":"4119:16:13","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1466,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4166:11:13","nodeType":"VariableDeclaration","scope":1474,"src":"4158:19:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1465,"name":"uint256","nodeType":"ElementaryTypeName","src":"4158:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1469,"indexed":false,"mutability":"mutable","name":"amountsAddedRaw","nameLocation":"4197:15:13","nodeType":"VariableDeclaration","scope":1474,"src":"4187:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1467,"name":"uint256","nodeType":"ElementaryTypeName","src":"4187:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1468,"nodeType":"ArrayTypeName","src":"4187:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1472,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"4232:17:13","nodeType":"VariableDeclaration","scope":1474,"src":"4222:27:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1470,"name":"uint256","nodeType":"ElementaryTypeName","src":"4222:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1471,"nodeType":"ArrayTypeName","src":"4222:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4036:219:13"},"src":"4016:240:13"},{"anonymous":false,"documentation":{"id":1475,"nodeType":"StructuredDocumentation","src":"4262:548:13","text":" @notice Liquidity has been removed from a pool.\n @param pool The pool with liquidity removed\n @param liquidityProvider The user performing the operation\n @param kind The remove liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"fbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a5","id":1492,"name":"LiquidityRemoved","nameLocation":"4821:16:13","nodeType":"EventDefinition","parameters":{"id":1491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1477,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4863:4:13","nodeType":"VariableDeclaration","scope":1492,"src":"4847:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1476,"name":"address","nodeType":"ElementaryTypeName","src":"4847:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1479,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4893:17:13","nodeType":"VariableDeclaration","scope":1492,"src":"4877:33:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1478,"name":"address","nodeType":"ElementaryTypeName","src":"4877:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1482,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4948:4:13","nodeType":"VariableDeclaration","scope":1492,"src":"4920:32:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":1481,"nodeType":"UserDefinedTypeName","pathNode":{"id":1480,"name":"RemoveLiquidityKind","nameLocations":["4920:19:13"],"nodeType":"IdentifierPath","referencedDeclaration":2430,"src":"4920:19:13"},"referencedDeclaration":2430,"src":"4920:19:13","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1484,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4970:11:13","nodeType":"VariableDeclaration","scope":1492,"src":"4962:19:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1483,"name":"uint256","nodeType":"ElementaryTypeName","src":"4962:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1487,"indexed":false,"mutability":"mutable","name":"amountsRemovedRaw","nameLocation":"5001:17:13","nodeType":"VariableDeclaration","scope":1492,"src":"4991:27:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1485,"name":"uint256","nodeType":"ElementaryTypeName","src":"4991:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1486,"nodeType":"ArrayTypeName","src":"4991:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1490,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"5038:17:13","nodeType":"VariableDeclaration","scope":1492,"src":"5028:27:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1488,"name":"uint256","nodeType":"ElementaryTypeName","src":"5028:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1489,"nodeType":"ArrayTypeName","src":"5028:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4837:224:13"},"src":"4815:247:13"},{"anonymous":false,"documentation":{"id":1493,"nodeType":"StructuredDocumentation","src":"5068:114:13","text":" @notice The Vault's pause status has changed.\n @param paused True if the Vault was paused"},"eventSelector":"e0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d02","id":1497,"name":"VaultPausedStateChanged","nameLocation":"5193:23:13","nodeType":"EventDefinition","parameters":{"id":1496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1495,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5222:6:13","nodeType":"VariableDeclaration","scope":1497,"src":"5217:11:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1494,"name":"bool","nodeType":"ElementaryTypeName","src":"5217:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5216:13:13"},"src":"5187:43:13"},{"anonymous":false,"documentation":{"id":1498,"nodeType":"StructuredDocumentation","src":"5236:87:13","text":"@notice `disableQuery` has been called on the Vault, disabling query functionality."},"eventSelector":"bd204090fd387f08e3076528bf09b4fc99d8100d749eace96c06002d3fedc625","id":1500,"name":"VaultQueriesDisabled","nameLocation":"5334:20:13","nodeType":"EventDefinition","parameters":{"id":1499,"nodeType":"ParameterList","parameters":[],"src":"5354:2:13"},"src":"5328:29:13"},{"anonymous":false,"documentation":{"id":1501,"nodeType":"StructuredDocumentation","src":"5363:85:13","text":"@notice `enableQuery` has been called on the Vault, enabling query functionality."},"eventSelector":"91d7478835f2b5adc315f5aad920f4a7f0a02f7fddf3042d17b2c80168ea17f5","id":1503,"name":"VaultQueriesEnabled","nameLocation":"5459:19:13","nodeType":"EventDefinition","parameters":{"id":1502,"nodeType":"ParameterList","parameters":[],"src":"5478:2:13"},"src":"5453:28:13"},{"anonymous":false,"documentation":{"id":1504,"nodeType":"StructuredDocumentation","src":"5487:171:13","text":" @notice A Pool's pause status has changed.\n @param pool The pool that was just paused or unpaused\n @param paused True if the pool was paused"},"eventSelector":"57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7","id":1510,"name":"PoolPausedStateChanged","nameLocation":"5669:22:13","nodeType":"EventDefinition","parameters":{"id":1509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1506,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5708:4:13","nodeType":"VariableDeclaration","scope":1510,"src":"5692:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1505,"name":"address","nodeType":"ElementaryTypeName","src":"5692:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1508,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5719:6:13","nodeType":"VariableDeclaration","scope":1510,"src":"5714:11:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1507,"name":"bool","nodeType":"ElementaryTypeName","src":"5714:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5691:35:13"},"src":"5663:64:13"},{"anonymous":false,"documentation":{"id":1511,"nodeType":"StructuredDocumentation","src":"5733:158:13","text":" @notice Emitted when the swap fee percentage of a pool is updated.\n @param swapFeePercentage The new swap fee percentage for the pool"},"eventSelector":"89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a1","id":1517,"name":"SwapFeePercentageChanged","nameLocation":"5902:24:13","nodeType":"EventDefinition","parameters":{"id":1516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1513,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5943:4:13","nodeType":"VariableDeclaration","scope":1517,"src":"5927:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1512,"name":"address","nodeType":"ElementaryTypeName","src":"5927:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1515,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"5957:17:13","nodeType":"VariableDeclaration","scope":1517,"src":"5949:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1514,"name":"uint256","nodeType":"ElementaryTypeName","src":"5949:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5926:49:13"},"src":"5896:80:13"},{"anonymous":false,"documentation":{"id":1518,"nodeType":"StructuredDocumentation","src":"5982:170:13","text":" @notice Recovery mode has been enabled or disabled for a pool.\n @param pool The pool\n @param recoveryMode True if recovery mode was enabled"},"eventSelector":"c2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a9","id":1524,"name":"PoolRecoveryModeStateChanged","nameLocation":"6163:28:13","nodeType":"EventDefinition","parameters":{"id":1523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1520,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6208:4:13","nodeType":"VariableDeclaration","scope":1524,"src":"6192:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1519,"name":"address","nodeType":"ElementaryTypeName","src":"6192:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1522,"indexed":false,"mutability":"mutable","name":"recoveryMode","nameLocation":"6219:12:13","nodeType":"VariableDeclaration","scope":1524,"src":"6214:17:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1521,"name":"bool","nodeType":"ElementaryTypeName","src":"6214:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6191:41:13"},"src":"6157:76:13"},{"anonymous":false,"documentation":{"id":1525,"nodeType":"StructuredDocumentation","src":"6239:353:13","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate swap fee percentage changed\n @param aggregateSwapFeePercentage The new aggregate swap fee percentage"},"eventSelector":"e4d371097beea42453a37406e2aef4c04f3c548f84ac50e72578662c0dcd7354","id":1531,"name":"AggregateSwapFeePercentageChanged","nameLocation":"6603:33:13","nodeType":"EventDefinition","parameters":{"id":1530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1527,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6653:4:13","nodeType":"VariableDeclaration","scope":1531,"src":"6637:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1526,"name":"address","nodeType":"ElementaryTypeName","src":"6637:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1529,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"6667:26:13","nodeType":"VariableDeclaration","scope":1531,"src":"6659:34:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1528,"name":"uint256","nodeType":"ElementaryTypeName","src":"6659:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6636:58:13"},"src":"6597:98:13"},{"anonymous":false,"documentation":{"id":1532,"nodeType":"StructuredDocumentation","src":"6701:357:13","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate yield fee percentage changed\n @param aggregateYieldFeePercentage The new aggregate yield fee percentage"},"eventSelector":"606eb97d83164bd6b200d638cd49c14c65d94d4f2c674cfd85e24e0e202c3ca5","id":1538,"name":"AggregateYieldFeePercentageChanged","nameLocation":"7069:34:13","nodeType":"EventDefinition","parameters":{"id":1537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1534,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"7120:4:13","nodeType":"VariableDeclaration","scope":1538,"src":"7104:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1533,"name":"address","nodeType":"ElementaryTypeName","src":"7104:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1536,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"7134:27:13","nodeType":"VariableDeclaration","scope":1538,"src":"7126:35:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1535,"name":"uint256","nodeType":"ElementaryTypeName","src":"7126:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7103:59:13"},"src":"7063:100:13"},{"anonymous":false,"documentation":{"id":1539,"nodeType":"StructuredDocumentation","src":"7169:132:13","text":" @notice A new authorizer is set by `setAuthorizer`.\n @param newAuthorizer The address of the new authorizer"},"eventSelector":"94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef","id":1544,"name":"AuthorizerChanged","nameLocation":"7312:17:13","nodeType":"EventDefinition","parameters":{"id":1543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1542,"indexed":true,"mutability":"mutable","name":"newAuthorizer","nameLocation":"7350:13:13","nodeType":"VariableDeclaration","scope":1544,"src":"7330:33:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$40","typeString":"contract IAuthorizer"},"typeName":{"id":1541,"nodeType":"UserDefinedTypeName","pathNode":{"id":1540,"name":"IAuthorizer","nameLocations":["7330:11:13"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"7330:11:13"},"referencedDeclaration":40,"src":"7330:11:13","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$40","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"7329:35:13"},"src":"7306:59:13"},{"anonymous":false,"documentation":{"id":1545,"nodeType":"StructuredDocumentation","src":"7371:180:13","text":" @notice A new protocol fee controller is set by `setProtocolFeeController`.\n @param newProtocolFeeController The address of the new protocol fee controller"},"eventSelector":"280a60b1e63c1774d397d35cce80eb80e51408ead755fb446e6f744ce98e5df0","id":1550,"name":"ProtocolFeeControllerChanged","nameLocation":"7562:28:13","nodeType":"EventDefinition","parameters":{"id":1549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1548,"indexed":true,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"7622:24:13","nodeType":"VariableDeclaration","scope":1550,"src":"7591:55:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$643","typeString":"contract IProtocolFeeController"},"typeName":{"id":1547,"nodeType":"UserDefinedTypeName","pathNode":{"id":1546,"name":"IProtocolFeeController","nameLocations":["7591:22:13"],"nodeType":"IdentifierPath","referencedDeclaration":643,"src":"7591:22:13"},"referencedDeclaration":643,"src":"7591:22:13","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$643","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"7590:57:13"},"src":"7556:92:13"},{"anonymous":false,"documentation":{"id":1551,"nodeType":"StructuredDocumentation","src":"7654:553:13","text":" @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was deposited\n @param amountWrapped The amount of the wrapped token that was deposited\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a9","id":1562,"name":"LiquidityAddedToBuffer","nameLocation":"8218:22:13","nodeType":"EventDefinition","parameters":{"id":1561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1554,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"8267:12:13","nodeType":"VariableDeclaration","scope":1562,"src":"8250:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":1553,"nodeType":"UserDefinedTypeName","pathNode":{"id":1552,"name":"IERC4626","nameLocations":["8250:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"8250:8:13"},"referencedDeclaration":6704,"src":"8250:8:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1556,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"8297:16:13","nodeType":"VariableDeclaration","scope":1562,"src":"8289:24:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1555,"name":"uint256","nodeType":"ElementaryTypeName","src":"8289:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1558,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"8331:13:13","nodeType":"VariableDeclaration","scope":1562,"src":"8323:21:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1557,"name":"uint256","nodeType":"ElementaryTypeName","src":"8323:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1560,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"8362:14:13","nodeType":"VariableDeclaration","scope":1562,"src":"8354:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1559,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8354:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8240:142:13"},"src":"8212:171:13"},{"anonymous":false,"documentation":{"id":1563,"nodeType":"StructuredDocumentation","src":"8389:570:13","text":" @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param to The owner of the minted shares\n @param issuedShares The amount of \"internal BPT\" shares created"},"eventSelector":"d66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec34","id":1572,"name":"BufferSharesMinted","nameLocation":"8970:18:13","nodeType":"EventDefinition","parameters":{"id":1571,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1566,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9006:12:13","nodeType":"VariableDeclaration","scope":1572,"src":"8989:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":1565,"nodeType":"UserDefinedTypeName","pathNode":{"id":1564,"name":"IERC4626","nameLocations":["8989:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"8989:8:13"},"referencedDeclaration":6704,"src":"8989:8:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1568,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"9036:2:13","nodeType":"VariableDeclaration","scope":1572,"src":"9020:18:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1567,"name":"address","nodeType":"ElementaryTypeName","src":"9020:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1570,"indexed":false,"mutability":"mutable","name":"issuedShares","nameLocation":"9048:12:13","nodeType":"VariableDeclaration","scope":1572,"src":"9040:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1569,"name":"uint256","nodeType":"ElementaryTypeName","src":"9040:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8988:73:13"},"src":"8964:98:13"},{"anonymous":false,"documentation":{"id":1573,"nodeType":"StructuredDocumentation","src":"9068:571:13","text":" @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param from The owner of the burned shares\n @param burnedShares The amount of \"internal BPT\" shares burned"},"eventSelector":"4e09f7f7fc37ce2897800e2c2a9099565edb0a133d19d84a6871b3530af8846b","id":1582,"name":"BufferSharesBurned","nameLocation":"9650:18:13","nodeType":"EventDefinition","parameters":{"id":1581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1576,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9686:12:13","nodeType":"VariableDeclaration","scope":1582,"src":"9669:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":1575,"nodeType":"UserDefinedTypeName","pathNode":{"id":1574,"name":"IERC4626","nameLocations":["9669:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"9669:8:13"},"referencedDeclaration":6704,"src":"9669:8:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1578,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"9716:4:13","nodeType":"VariableDeclaration","scope":1582,"src":"9700:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1577,"name":"address","nodeType":"ElementaryTypeName","src":"9700:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1580,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"9730:12:13","nodeType":"VariableDeclaration","scope":1582,"src":"9722:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1579,"name":"uint256","nodeType":"ElementaryTypeName","src":"9722:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9668:75:13"},"src":"9644:100:13"},{"anonymous":false,"documentation":{"id":1583,"nodeType":"StructuredDocumentation","src":"9750:509:13","text":" @notice Liquidity was removed from an ERC4626 buffer.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was withdrawn\n @param amountWrapped The amount of the wrapped token that was withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"44d97b36e99b590b3d2875aad3b167b1d7fb1e063f3f1325a1eeac76caee5113","id":1594,"name":"LiquidityRemovedFromBuffer","nameLocation":"10270:26:13","nodeType":"EventDefinition","parameters":{"id":1593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1586,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"10323:12:13","nodeType":"VariableDeclaration","scope":1594,"src":"10306:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":1585,"nodeType":"UserDefinedTypeName","pathNode":{"id":1584,"name":"IERC4626","nameLocations":["10306:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"10306:8:13"},"referencedDeclaration":6704,"src":"10306:8:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1588,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"10353:16:13","nodeType":"VariableDeclaration","scope":1594,"src":"10345:24:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1587,"name":"uint256","nodeType":"ElementaryTypeName","src":"10345:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1590,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"10387:13:13","nodeType":"VariableDeclaration","scope":1594,"src":"10379:21:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1589,"name":"uint256","nodeType":"ElementaryTypeName","src":"10379:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1592,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"10418:14:13","nodeType":"VariableDeclaration","scope":1594,"src":"10410:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1591,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10410:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10296:142:13"},"src":"10264:175:13"},{"anonymous":false,"documentation":{"id":1595,"nodeType":"StructuredDocumentation","src":"10445:278:13","text":" @notice The Vault buffers pause status has changed.\n @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n set to true) will revert.\n @param paused True if the Vault buffers were paused"},"eventSelector":"300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a5","id":1599,"name":"VaultBuffersPausedStateChanged","nameLocation":"10734:30:13","nodeType":"EventDefinition","parameters":{"id":1598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1597,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"10770:6:13","nodeType":"VariableDeclaration","scope":1599,"src":"10765:11:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1596,"name":"bool","nodeType":"ElementaryTypeName","src":"10765:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10764:13:13"},"src":"10728:50:13"},{"anonymous":false,"documentation":{"id":1600,"nodeType":"StructuredDocumentation","src":"10784:194:13","text":" @notice Pools can use this event to emit event data from the Vault.\n @param pool Pool address\n @param eventKey Event key\n @param eventData Encoded event data"},"eventSelector":"4bc4412e210115456903c65b5277d299a505e79f2eb852b92b1ca52d85856428","id":1608,"name":"VaultAuxiliary","nameLocation":"10989:14:13","nodeType":"EventDefinition","parameters":{"id":1607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1602,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"11020:4:13","nodeType":"VariableDeclaration","scope":1608,"src":"11004:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1601,"name":"address","nodeType":"ElementaryTypeName","src":"11004:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1604,"indexed":true,"mutability":"mutable","name":"eventKey","nameLocation":"11042:8:13","nodeType":"VariableDeclaration","scope":1608,"src":"11026:24:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1603,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11026:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1606,"indexed":false,"mutability":"mutable","name":"eventData","nameLocation":"11058:9:13","nodeType":"VariableDeclaration","scope":1608,"src":"11052:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1605,"name":"bytes","nodeType":"ElementaryTypeName","src":"11052:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11003:65:13"},"src":"10983:86:13"}],"scope":1610,"src":"500:10571:13","usedErrors":[],"usedEvents":[1408,1413,1432,1444,1456,1474,1492,1497,1500,1503,1510,1517,1524,1531,1538,1544,1550,1562,1572,1582,1594,1599,1608]}],"src":"46:11026:13"},"id":13},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","exportedSymbols":{"AddLiquidityKind":[2409],"AddLiquidityParams":[2425],"AfterSwapParams":[2403],"BufferWrapOrUnwrapParams":[2464],"FEE_BITLENGTH":[2467],"FEE_SCALING_FACTOR":[2470],"HookFlags":[2229],"HooksConfig":[2253],"IAuthorizer":[40],"IERC20":[6980],"IERC4626":[6704],"IHooks":[300],"IProtocolFeeController":[643],"IRateProvider":[24],"IVault":[713],"IVaultExtension":[2028],"LiquidityManagement":[2182],"MAX_FEE_PERCENTAGE":[2473],"PoolConfig":[2207],"PoolConfigBits":[2184],"PoolData":[2331],"PoolRoleAccounts":[2279],"PoolSwapParams":[2374],"RemoveLiquidityKind":[2430],"RemoveLiquidityParams":[2446],"Rounding":[2334],"SwapKind":[2337],"SwapState":[2263],"TokenConfig":[2296],"TokenInfo":[2306],"TokenType":[2283],"VaultState":[2271],"VaultSwapParams":[2356],"WrappingDirection":[2449]},"id":2029,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1611,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:14"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1613,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2029,"sourceUnit":6705,"src":"72:75:14","symbolAliases":[{"foreign":{"id":1612,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6704,"src":"81:8:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1615,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2029,"sourceUnit":6981,"src":"148:72:14","symbolAliases":[{"foreign":{"id":1614,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"157:6:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":1617,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2029,"sourceUnit":41,"src":"222:48:14","symbolAliases":[{"foreign":{"id":1616,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40,"src":"231:11:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":1619,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2029,"sourceUnit":644,"src":"271:70:14","symbolAliases":[{"foreign":{"id":1618,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":643,"src":"280:22:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":1621,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2029,"sourceUnit":714,"src":"342:38:14","symbolAliases":[{"foreign":{"id":1620,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":713,"src":"351:6:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":1623,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2029,"sourceUnit":301,"src":"381:38:14","symbolAliases":[{"foreign":{"id":1622,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":300,"src":"390:6:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1624,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2029,"sourceUnit":2474,"src":"420:26:14","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultExtension","contractDependencies":[],"contractKind":"interface","documentation":{"id":1625,"nodeType":"StructuredDocumentation","src":"448:318:14","text":" @notice Interface for functions defined on the `VaultExtension` contract.\n @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n liquidity operations."},"fullyImplemented":false,"id":2028,"linearizedBaseContracts":[2028],"name":"IVaultExtension","nameLocation":"777:15:14","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1626,"nodeType":"StructuredDocumentation","src":"1025:206:14","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":1632,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1245:5:14","nodeType":"FunctionDefinition","parameters":{"id":1627,"nodeType":"ParameterList","parameters":[],"src":"1250:2:14"},"returnParameters":{"id":1631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1630,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1632,"src":"1276:6:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"},"typeName":{"id":1629,"nodeType":"UserDefinedTypeName","pathNode":{"id":1628,"name":"IVault","nameLocations":["1276:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":713,"src":"1276:6:14"},"referencedDeclaration":713,"src":"1276:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1275:8:14"},"scope":2028,"src":"1236:48:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1633,"nodeType":"StructuredDocumentation","src":"1290:202:14","text":" @notice Returns the VaultAdmin contract address.\n @dev The VaultAdmin contract mostly implements permissioned functions.\n @return vaultAdmin The address of the Vault admin"},"functionSelector":"1ba0ae45","id":1638,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultAdmin","nameLocation":"1506:13:14","nodeType":"FunctionDefinition","parameters":{"id":1634,"nodeType":"ParameterList","parameters":[],"src":"1519:2:14"},"returnParameters":{"id":1637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1636,"mutability":"mutable","name":"vaultAdmin","nameLocation":"1553:10:14","nodeType":"VariableDeclaration","scope":1638,"src":"1545:18:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1635,"name":"address","nodeType":"ElementaryTypeName","src":"1545:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1544:20:14"},"scope":2028,"src":"1497:68:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1639,"nodeType":"StructuredDocumentation","src":"1793:254:14","text":" @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n @dev The Vault must be unlocked to perform state-changing liquidity operations.\n @return unlocked True if the Vault is unlocked, false otherwise"},"functionSelector":"8380edb7","id":1644,"implemented":false,"kind":"function","modifiers":[],"name":"isUnlocked","nameLocation":"2061:10:14","nodeType":"FunctionDefinition","parameters":{"id":1640,"nodeType":"ParameterList","parameters":[],"src":"2071:2:14"},"returnParameters":{"id":1643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1642,"mutability":"mutable","name":"unlocked","nameLocation":"2102:8:14","nodeType":"VariableDeclaration","scope":1644,"src":"2097:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1641,"name":"bool","nodeType":"ElementaryTypeName","src":"2097:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2096:15:14"},"scope":2028,"src":"2052:60:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1645,"nodeType":"StructuredDocumentation","src":"2118:141:14","text":" @notice Returns the count of non-zero deltas.\n @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`"},"functionSelector":"db817187","id":1650,"implemented":false,"kind":"function","modifiers":[],"name":"getNonzeroDeltaCount","nameLocation":"2273:20:14","nodeType":"FunctionDefinition","parameters":{"id":1646,"nodeType":"ParameterList","parameters":[],"src":"2293:2:14"},"returnParameters":{"id":1649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1648,"mutability":"mutable","name":"nonzeroDeltaCount","nameLocation":"2327:17:14","nodeType":"VariableDeclaration","scope":1650,"src":"2319:25:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1647,"name":"uint256","nodeType":"ElementaryTypeName","src":"2319:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2318:27:14"},"scope":2028,"src":"2264:82:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1651,"nodeType":"StructuredDocumentation","src":"2352:284:14","text":" @notice Retrieves the token delta for a specific token.\n @dev This function allows reading the value from the `_tokenDeltas` mapping.\n @param token The token for which the delta is being fetched\n @return tokenDelta The delta of the specified token"},"functionSelector":"9e825ff5","id":1659,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenDelta","nameLocation":"2650:13:14","nodeType":"FunctionDefinition","parameters":{"id":1655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1654,"mutability":"mutable","name":"token","nameLocation":"2671:5:14","nodeType":"VariableDeclaration","scope":1659,"src":"2664:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":1653,"nodeType":"UserDefinedTypeName","pathNode":{"id":1652,"name":"IERC20","nameLocations":["2664:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"2664:6:14"},"referencedDeclaration":6980,"src":"2664:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2663:14:14"},"returnParameters":{"id":1658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1657,"mutability":"mutable","name":"tokenDelta","nameLocation":"2708:10:14","nodeType":"VariableDeclaration","scope":1659,"src":"2701:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1656,"name":"int256","nodeType":"ElementaryTypeName","src":"2701:6:14","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"2700:19:14"},"scope":2028,"src":"2641:79:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1660,"nodeType":"StructuredDocumentation","src":"2726:230:14","text":" @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n @param token The token for which to retrieve the reserve\n @return reserveAmount The amount of reserves for the given token"},"functionSelector":"96787092","id":1668,"implemented":false,"kind":"function","modifiers":[],"name":"getReservesOf","nameLocation":"2970:13:14","nodeType":"FunctionDefinition","parameters":{"id":1664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1663,"mutability":"mutable","name":"token","nameLocation":"2991:5:14","nodeType":"VariableDeclaration","scope":1668,"src":"2984:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":1662,"nodeType":"UserDefinedTypeName","pathNode":{"id":1661,"name":"IERC20","nameLocations":["2984:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"2984:6:14"},"referencedDeclaration":6980,"src":"2984:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2983:14:14"},"returnParameters":{"id":1667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1666,"mutability":"mutable","name":"reserveAmount","nameLocation":"3029:13:14","nodeType":"VariableDeclaration","scope":1668,"src":"3021:21:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1665,"name":"uint256","nodeType":"ElementaryTypeName","src":"3021:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3020:23:14"},"scope":2028,"src":"2961:83:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1669,"nodeType":"StructuredDocumentation","src":"3050:944:14","text":" @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n same pool).\n @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n than a simple swap for every pool type.\n @param pool Address of the pool to check\n @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session."},"functionSelector":"ace9b89b","id":1676,"implemented":false,"kind":"function","modifiers":[],"name":"getAddLiquidityCalledFlag","nameLocation":"4008:25:14","nodeType":"FunctionDefinition","parameters":{"id":1672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1671,"mutability":"mutable","name":"pool","nameLocation":"4042:4:14","nodeType":"VariableDeclaration","scope":1676,"src":"4034:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1670,"name":"address","nodeType":"ElementaryTypeName","src":"4034:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4033:14:14"},"returnParameters":{"id":1675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1674,"mutability":"mutable","name":"liquidityAdded","nameLocation":"4076:14:14","nodeType":"VariableDeclaration","scope":1676,"src":"4071:19:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1673,"name":"bool","nodeType":"ElementaryTypeName","src":"4071:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4070:21:14"},"scope":2028,"src":"3999:93:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1677,"nodeType":"StructuredDocumentation","src":"4323:1604:14","text":" @notice Registers a pool, associating it with its factory and the tokens it manages.\n @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n pool will automatically unpause. Balancer timestamps are 32 bits.\n A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n the Vault.\n If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n authorizer.\n @param pool The address of the pool being registered\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The initial static swap fee percentage of the pool\n @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param poolHooksContract Contract that implements the hooks for the pool\n @param liquidityManagement Liquidity management flags with implemented methods"},"functionSelector":"eeec802f","id":1700,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"5941:12:14","nodeType":"FunctionDefinition","parameters":{"id":1698,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1679,"mutability":"mutable","name":"pool","nameLocation":"5971:4:14","nodeType":"VariableDeclaration","scope":1700,"src":"5963:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1678,"name":"address","nodeType":"ElementaryTypeName","src":"5963:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1683,"mutability":"mutable","name":"tokenConfig","nameLocation":"6006:11:14","nodeType":"VariableDeclaration","scope":1700,"src":"5985:32:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2296_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1681,"nodeType":"UserDefinedTypeName","pathNode":{"id":1680,"name":"TokenConfig","nameLocations":["5985:11:14"],"nodeType":"IdentifierPath","referencedDeclaration":2296,"src":"5985:11:14"},"referencedDeclaration":2296,"src":"5985:11:14","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2296_storage_ptr","typeString":"struct TokenConfig"}},"id":1682,"nodeType":"ArrayTypeName","src":"5985:13:14","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2296_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1685,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"6035:17:14","nodeType":"VariableDeclaration","scope":1700,"src":"6027:25:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1684,"name":"uint256","nodeType":"ElementaryTypeName","src":"6027:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1687,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"6069:18:14","nodeType":"VariableDeclaration","scope":1700,"src":"6062:25:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1686,"name":"uint32","nodeType":"ElementaryTypeName","src":"6062:6:14","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1689,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6102:17:14","nodeType":"VariableDeclaration","scope":1700,"src":"6097:22:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1688,"name":"bool","nodeType":"ElementaryTypeName","src":"6097:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1692,"mutability":"mutable","name":"roleAccounts","nameLocation":"6155:12:14","nodeType":"VariableDeclaration","scope":1700,"src":"6129:38:14","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2279_calldata_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1691,"nodeType":"UserDefinedTypeName","pathNode":{"id":1690,"name":"PoolRoleAccounts","nameLocations":["6129:16:14"],"nodeType":"IdentifierPath","referencedDeclaration":2279,"src":"6129:16:14"},"referencedDeclaration":2279,"src":"6129:16:14","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2279_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":1694,"mutability":"mutable","name":"poolHooksContract","nameLocation":"6185:17:14","nodeType":"VariableDeclaration","scope":1700,"src":"6177:25:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1693,"name":"address","nodeType":"ElementaryTypeName","src":"6177:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1697,"mutability":"mutable","name":"liquidityManagement","nameLocation":"6241:19:14","nodeType":"VariableDeclaration","scope":1700,"src":"6212:48:14","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2182_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1696,"nodeType":"UserDefinedTypeName","pathNode":{"id":1695,"name":"LiquidityManagement","nameLocations":["6212:19:14"],"nodeType":"IdentifierPath","referencedDeclaration":2182,"src":"6212:19:14"},"referencedDeclaration":2182,"src":"6212:19:14","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2182_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"5953:313:14"},"returnParameters":{"id":1699,"nodeType":"ParameterList","parameters":[],"src":"6275:0:14"},"scope":2028,"src":"5932:344:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1701,"nodeType":"StructuredDocumentation","src":"6282:185:14","text":" @notice Checks whether a pool is registered.\n @param pool Address of the pool to check\n @return registered True if the pool is registered, false otherwise"},"functionSelector":"c673bdaf","id":1708,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"6481:16:14","nodeType":"FunctionDefinition","parameters":{"id":1704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1703,"mutability":"mutable","name":"pool","nameLocation":"6506:4:14","nodeType":"VariableDeclaration","scope":1708,"src":"6498:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1702,"name":"address","nodeType":"ElementaryTypeName","src":"6498:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6497:14:14"},"returnParameters":{"id":1707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1706,"mutability":"mutable","name":"registered","nameLocation":"6540:10:14","nodeType":"VariableDeclaration","scope":1708,"src":"6535:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1705,"name":"bool","nodeType":"ElementaryTypeName","src":"6535:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6534:17:14"},"scope":2028,"src":"6472:80:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1709,"nodeType":"StructuredDocumentation","src":"6558:589:14","text":" @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n @param pool Address of the pool to initialize\n @param to Address that will receive the output BPT\n @param tokens Tokens used to seed the pool (must match the registered tokens)\n @param exactAmountsIn Exact amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param userData Additional (optional) data required for adding initial liquidity\n @return bptAmountOut Output pool token amount"},"functionSelector":"ba8a2be0","id":1729,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"7161:10:14","nodeType":"FunctionDefinition","parameters":{"id":1725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1711,"mutability":"mutable","name":"pool","nameLocation":"7189:4:14","nodeType":"VariableDeclaration","scope":1729,"src":"7181:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1710,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1713,"mutability":"mutable","name":"to","nameLocation":"7211:2:14","nodeType":"VariableDeclaration","scope":1729,"src":"7203:10:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1712,"name":"address","nodeType":"ElementaryTypeName","src":"7203:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1717,"mutability":"mutable","name":"tokens","nameLocation":"7239:6:14","nodeType":"VariableDeclaration","scope":1729,"src":"7223:22:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1715,"nodeType":"UserDefinedTypeName","pathNode":{"id":1714,"name":"IERC20","nameLocations":["7223:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"7223:6:14"},"referencedDeclaration":6980,"src":"7223:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":1716,"nodeType":"ArrayTypeName","src":"7223:8:14","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":1720,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"7272:14:14","nodeType":"VariableDeclaration","scope":1729,"src":"7255:31:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1718,"name":"uint256","nodeType":"ElementaryTypeName","src":"7255:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1719,"nodeType":"ArrayTypeName","src":"7255:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1722,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"7304:15:14","nodeType":"VariableDeclaration","scope":1729,"src":"7296:23:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1721,"name":"uint256","nodeType":"ElementaryTypeName","src":"7296:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1724,"mutability":"mutable","name":"userData","nameLocation":"7342:8:14","nodeType":"VariableDeclaration","scope":1729,"src":"7329:21:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1723,"name":"bytes","nodeType":"ElementaryTypeName","src":"7329:5:14","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7171:185:14"},"returnParameters":{"id":1728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1727,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7383:12:14","nodeType":"VariableDeclaration","scope":1729,"src":"7375:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1726,"name":"uint256","nodeType":"ElementaryTypeName","src":"7375:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7374:22:14"},"scope":2028,"src":"7152:245:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1730,"nodeType":"StructuredDocumentation","src":"7627:258:14","text":" @notice Checks whether a pool is initialized.\n @dev An initialized pool can be considered registered as well.\n @param pool Address of the pool to check\n @return initialized True if the pool is initialized, false otherwise"},"functionSelector":"532cec7c","id":1737,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInitialized","nameLocation":"7899:17:14","nodeType":"FunctionDefinition","parameters":{"id":1733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1732,"mutability":"mutable","name":"pool","nameLocation":"7925:4:14","nodeType":"VariableDeclaration","scope":1737,"src":"7917:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1731,"name":"address","nodeType":"ElementaryTypeName","src":"7917:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7916:14:14"},"returnParameters":{"id":1736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1735,"mutability":"mutable","name":"initialized","nameLocation":"7959:11:14","nodeType":"VariableDeclaration","scope":1737,"src":"7954:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1734,"name":"bool","nodeType":"ElementaryTypeName","src":"7954:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7953:18:14"},"scope":2028,"src":"7890:82:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1738,"nodeType":"StructuredDocumentation","src":"7978:152:14","text":" @notice Gets the tokens registered to a pool.\n @param pool Address of the pool\n @return tokens List of tokens in the pool"},"functionSelector":"ca4f2803","id":1747,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokens","nameLocation":"8144:13:14","nodeType":"FunctionDefinition","parameters":{"id":1741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1740,"mutability":"mutable","name":"pool","nameLocation":"8166:4:14","nodeType":"VariableDeclaration","scope":1747,"src":"8158:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1739,"name":"address","nodeType":"ElementaryTypeName","src":"8158:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8157:14:14"},"returnParameters":{"id":1746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1745,"mutability":"mutable","name":"tokens","nameLocation":"8211:6:14","nodeType":"VariableDeclaration","scope":1747,"src":"8195:22:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1743,"nodeType":"UserDefinedTypeName","pathNode":{"id":1742,"name":"IERC20","nameLocations":["8195:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"8195:6:14"},"referencedDeclaration":6980,"src":"8195:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":1744,"nodeType":"ArrayTypeName","src":"8195:8:14","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"8194:24:14"},"scope":2028,"src":"8135:84:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1748,"nodeType":"StructuredDocumentation","src":"8225:512:14","text":" @notice Gets pool token rates.\n @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n registration order.\n @param pool Address of the pool\n @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. FP(1) for 18-decimal tokens\n @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens"},"functionSelector":"7e361bde","id":1759,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenRates","nameLocation":"8751:17:14","nodeType":"FunctionDefinition","parameters":{"id":1751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1750,"mutability":"mutable","name":"pool","nameLocation":"8786:4:14","nodeType":"VariableDeclaration","scope":1759,"src":"8778:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1749,"name":"address","nodeType":"ElementaryTypeName","src":"8778:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8768:28:14"},"returnParameters":{"id":1758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1754,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"8837:21:14","nodeType":"VariableDeclaration","scope":1759,"src":"8820:38:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1752,"name":"uint256","nodeType":"ElementaryTypeName","src":"8820:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1753,"nodeType":"ArrayTypeName","src":"8820:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1757,"mutability":"mutable","name":"tokenRates","nameLocation":"8877:10:14","nodeType":"VariableDeclaration","scope":1759,"src":"8860:27:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1755,"name":"uint256","nodeType":"ElementaryTypeName","src":"8860:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1756,"nodeType":"ArrayTypeName","src":"8860:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8819:69:14"},"scope":2028,"src":"8742:147:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1760,"nodeType":"StructuredDocumentation","src":"8895:287:14","text":" @notice Returns comprehensive pool data for the given pool.\n @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n @param pool The address of the pool\n @return poolData The `PoolData` result"},"functionSelector":"13d21cdf","id":1768,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolData","nameLocation":"9196:11:14","nodeType":"FunctionDefinition","parameters":{"id":1763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1762,"mutability":"mutable","name":"pool","nameLocation":"9216:4:14","nodeType":"VariableDeclaration","scope":1768,"src":"9208:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1761,"name":"address","nodeType":"ElementaryTypeName","src":"9208:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9207:14:14"},"returnParameters":{"id":1767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1766,"mutability":"mutable","name":"poolData","nameLocation":"9261:8:14","nodeType":"VariableDeclaration","scope":1768,"src":"9245:24:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":1765,"nodeType":"UserDefinedTypeName","pathNode":{"id":1764,"name":"PoolData","nameLocations":["9245:8:14"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"9245:8:14"},"referencedDeclaration":2331,"src":"9245:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"9244:26:14"},"scope":2028,"src":"9187:84:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1769,"nodeType":"StructuredDocumentation","src":"9277:531:14","text":" @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n @param pool Address of the pool\n @return tokens The pool tokens, sorted in registration order\n @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order"},"functionSelector":"67e0e076","id":1788,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenInfo","nameLocation":"9822:16:14","nodeType":"FunctionDefinition","parameters":{"id":1772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1771,"mutability":"mutable","name":"pool","nameLocation":"9856:4:14","nodeType":"VariableDeclaration","scope":1788,"src":"9848:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1770,"name":"address","nodeType":"ElementaryTypeName","src":"9848:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9838:28:14"},"returnParameters":{"id":1787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1776,"mutability":"mutable","name":"tokens","nameLocation":"9943:6:14","nodeType":"VariableDeclaration","scope":1788,"src":"9927:22:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1774,"nodeType":"UserDefinedTypeName","pathNode":{"id":1773,"name":"IERC20","nameLocations":["9927:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"9927:6:14"},"referencedDeclaration":6980,"src":"9927:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":1775,"nodeType":"ArrayTypeName","src":"9927:8:14","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":1780,"mutability":"mutable","name":"tokenInfo","nameLocation":"9982:9:14","nodeType":"VariableDeclaration","scope":1788,"src":"9963:28:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2306_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":1778,"nodeType":"UserDefinedTypeName","pathNode":{"id":1777,"name":"TokenInfo","nameLocations":["9963:9:14"],"nodeType":"IdentifierPath","referencedDeclaration":2306,"src":"9963:9:14"},"referencedDeclaration":2306,"src":"9963:9:14","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2306_storage_ptr","typeString":"struct TokenInfo"}},"id":1779,"nodeType":"ArrayTypeName","src":"9963:11:14","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2306_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":1783,"mutability":"mutable","name":"balancesRaw","nameLocation":"10022:11:14","nodeType":"VariableDeclaration","scope":1788,"src":"10005:28:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1781,"name":"uint256","nodeType":"ElementaryTypeName","src":"10005:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1782,"nodeType":"ArrayTypeName","src":"10005:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1786,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"10064:24:14","nodeType":"VariableDeclaration","scope":1788,"src":"10047:41:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1784,"name":"uint256","nodeType":"ElementaryTypeName","src":"10047:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1785,"nodeType":"ArrayTypeName","src":"10047:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9913:185:14"},"scope":2028,"src":"9813:286:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1789,"nodeType":"StructuredDocumentation","src":"10105:312:14","text":" @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n registration order.\n @param pool Address of the pool\n @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates"},"functionSelector":"535cfd8a","id":1797,"implemented":false,"kind":"function","modifiers":[],"name":"getCurrentLiveBalances","nameLocation":"10431:22:14","nodeType":"FunctionDefinition","parameters":{"id":1792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1791,"mutability":"mutable","name":"pool","nameLocation":"10462:4:14","nodeType":"VariableDeclaration","scope":1797,"src":"10454:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1790,"name":"address","nodeType":"ElementaryTypeName","src":"10454:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10453:14:14"},"returnParameters":{"id":1796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1795,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"10508:20:14","nodeType":"VariableDeclaration","scope":1797,"src":"10491:37:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1793,"name":"uint256","nodeType":"ElementaryTypeName","src":"10491:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1794,"nodeType":"ArrayTypeName","src":"10491:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10490:39:14"},"scope":2028,"src":"10422:108:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1798,"nodeType":"StructuredDocumentation","src":"10536:301:14","text":" @notice Gets the configuration parameters of a pool.\n @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n @param pool Address of the pool\n @return poolConfig The pool configuration as a `PoolConfig` struct"},"functionSelector":"f29486a1","id":1806,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolConfig","nameLocation":"10851:13:14","nodeType":"FunctionDefinition","parameters":{"id":1801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1800,"mutability":"mutable","name":"pool","nameLocation":"10873:4:14","nodeType":"VariableDeclaration","scope":1806,"src":"10865:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1799,"name":"address","nodeType":"ElementaryTypeName","src":"10865:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10864:14:14"},"returnParameters":{"id":1805,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1804,"mutability":"mutable","name":"poolConfig","nameLocation":"10920:10:14","nodeType":"VariableDeclaration","scope":1806,"src":"10902:28:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2207_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":1803,"nodeType":"UserDefinedTypeName","pathNode":{"id":1802,"name":"PoolConfig","nameLocations":["10902:10:14"],"nodeType":"IdentifierPath","referencedDeclaration":2207,"src":"10902:10:14"},"referencedDeclaration":2207,"src":"10902:10:14","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2207_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"src":"10901:30:14"},"scope":2028,"src":"10842:90:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1807,"nodeType":"StructuredDocumentation","src":"10938:283:14","text":" @notice Gets the hooks configuration parameters of a pool.\n @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n @param pool Address of the pool\n @return hooksConfig The hooks configuration as a `HooksConfig` struct"},"functionSelector":"ce8630d4","id":1815,"implemented":false,"kind":"function","modifiers":[],"name":"getHooksConfig","nameLocation":"11235:14:14","nodeType":"FunctionDefinition","parameters":{"id":1810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1809,"mutability":"mutable","name":"pool","nameLocation":"11258:4:14","nodeType":"VariableDeclaration","scope":1815,"src":"11250:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1808,"name":"address","nodeType":"ElementaryTypeName","src":"11250:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11249:14:14"},"returnParameters":{"id":1814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1813,"mutability":"mutable","name":"hooksConfig","nameLocation":"11306:11:14","nodeType":"VariableDeclaration","scope":1815,"src":"11287:30:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2253_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":1812,"nodeType":"UserDefinedTypeName","pathNode":{"id":1811,"name":"HooksConfig","nameLocations":["11287:11:14"],"nodeType":"IdentifierPath","referencedDeclaration":2253,"src":"11287:11:14"},"referencedDeclaration":2253,"src":"11287:11:14","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2253_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"}],"src":"11286:32:14"},"scope":2028,"src":"11226:93:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1816,"nodeType":"StructuredDocumentation","src":"11325:160:14","text":" @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n @param pool Address of the pool\n @return rate BPT rate"},"functionSelector":"4f037ee7","id":1823,"implemented":false,"kind":"function","modifiers":[],"name":"getBptRate","nameLocation":"11499:10:14","nodeType":"FunctionDefinition","parameters":{"id":1819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1818,"mutability":"mutable","name":"pool","nameLocation":"11518:4:14","nodeType":"VariableDeclaration","scope":1823,"src":"11510:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1817,"name":"address","nodeType":"ElementaryTypeName","src":"11510:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11509:14:14"},"returnParameters":{"id":1822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1821,"mutability":"mutable","name":"rate","nameLocation":"11555:4:14","nodeType":"VariableDeclaration","scope":1823,"src":"11547:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1820,"name":"uint256","nodeType":"ElementaryTypeName","src":"11547:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11546:14:14"},"scope":2028,"src":"11490:71:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1824,"nodeType":"StructuredDocumentation","src":"11792:168:14","text":" @notice Gets the total supply of a given ERC20 token.\n @param token The token address\n @return tokenTotalSupply Total supply of the token"},"functionSelector":"e4dc2aa4","id":1831,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"11974:11:14","nodeType":"FunctionDefinition","parameters":{"id":1827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1826,"mutability":"mutable","name":"token","nameLocation":"11994:5:14","nodeType":"VariableDeclaration","scope":1831,"src":"11986:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1825,"name":"address","nodeType":"ElementaryTypeName","src":"11986:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11985:15:14"},"returnParameters":{"id":1830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1829,"mutability":"mutable","name":"tokenTotalSupply","nameLocation":"12032:16:14","nodeType":"VariableDeclaration","scope":1831,"src":"12024:24:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1828,"name":"uint256","nodeType":"ElementaryTypeName","src":"12024:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12023:26:14"},"scope":2028,"src":"11965:85:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1832,"nodeType":"StructuredDocumentation","src":"12056:225:14","text":" @notice Gets the balance of an account for a given ERC20 token.\n @param token Address of the token\n @param account Address of the account\n @return tokenBalance Token balance of the account"},"functionSelector":"f7888aec","id":1841,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"12295:9:14","nodeType":"FunctionDefinition","parameters":{"id":1837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1834,"mutability":"mutable","name":"token","nameLocation":"12313:5:14","nodeType":"VariableDeclaration","scope":1841,"src":"12305:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1833,"name":"address","nodeType":"ElementaryTypeName","src":"12305:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1836,"mutability":"mutable","name":"account","nameLocation":"12328:7:14","nodeType":"VariableDeclaration","scope":1841,"src":"12320:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1835,"name":"address","nodeType":"ElementaryTypeName","src":"12320:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12304:32:14"},"returnParameters":{"id":1840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1839,"mutability":"mutable","name":"tokenBalance","nameLocation":"12368:12:14","nodeType":"VariableDeclaration","scope":1841,"src":"12360:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1838,"name":"uint256","nodeType":"ElementaryTypeName","src":"12360:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12359:22:14"},"scope":2028,"src":"12286:96:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1842,"nodeType":"StructuredDocumentation","src":"12388:299:14","text":" @notice Gets the allowance of a spender for a given ERC20 token and owner.\n @param token Address of the token\n @param owner Address of the owner\n @param spender Address of the spender\n @return tokenAllowance Amount of tokens the spender is allowed to spend"},"functionSelector":"927da105","id":1853,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"12701:9:14","nodeType":"FunctionDefinition","parameters":{"id":1849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1844,"mutability":"mutable","name":"token","nameLocation":"12719:5:14","nodeType":"VariableDeclaration","scope":1853,"src":"12711:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1843,"name":"address","nodeType":"ElementaryTypeName","src":"12711:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1846,"mutability":"mutable","name":"owner","nameLocation":"12734:5:14","nodeType":"VariableDeclaration","scope":1853,"src":"12726:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1845,"name":"address","nodeType":"ElementaryTypeName","src":"12726:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1848,"mutability":"mutable","name":"spender","nameLocation":"12749:7:14","nodeType":"VariableDeclaration","scope":1853,"src":"12741:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1847,"name":"address","nodeType":"ElementaryTypeName","src":"12741:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12710:47:14"},"returnParameters":{"id":1852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1851,"mutability":"mutable","name":"tokenAllowance","nameLocation":"12789:14:14","nodeType":"VariableDeclaration","scope":1853,"src":"12781:22:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1850,"name":"uint256","nodeType":"ElementaryTypeName","src":"12781:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12780:24:14"},"scope":2028,"src":"12692:113:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1854,"nodeType":"StructuredDocumentation","src":"12811:475:14","text":" @notice Approves a spender to spend pool tokens on behalf of sender.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param spender Address of the spender\n @param amount Amount of tokens to approve\n @return success True if successful, false otherwise"},"functionSelector":"e1f21c67","id":1865,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"13300:7:14","nodeType":"FunctionDefinition","parameters":{"id":1861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1856,"mutability":"mutable","name":"owner","nameLocation":"13316:5:14","nodeType":"VariableDeclaration","scope":1865,"src":"13308:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1855,"name":"address","nodeType":"ElementaryTypeName","src":"13308:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1858,"mutability":"mutable","name":"spender","nameLocation":"13331:7:14","nodeType":"VariableDeclaration","scope":1865,"src":"13323:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1857,"name":"address","nodeType":"ElementaryTypeName","src":"13323:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1860,"mutability":"mutable","name":"amount","nameLocation":"13348:6:14","nodeType":"VariableDeclaration","scope":1865,"src":"13340:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1859,"name":"uint256","nodeType":"ElementaryTypeName","src":"13340:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13307:48:14"},"returnParameters":{"id":1864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1863,"mutability":"mutable","name":"success","nameLocation":"13379:7:14","nodeType":"VariableDeclaration","scope":1865,"src":"13374:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1862,"name":"bool","nodeType":"ElementaryTypeName","src":"13374:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13373:14:14"},"scope":2028,"src":"13291:97:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1866,"nodeType":"StructuredDocumentation","src":"13615:251:14","text":" @notice Indicates whether a pool is paused.\n @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n @param pool The pool to be checked\n @return poolPaused True if the pool is paused"},"functionSelector":"6c9bc732","id":1873,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolPaused","nameLocation":"13880:12:14","nodeType":"FunctionDefinition","parameters":{"id":1869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1868,"mutability":"mutable","name":"pool","nameLocation":"13901:4:14","nodeType":"VariableDeclaration","scope":1873,"src":"13893:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1867,"name":"address","nodeType":"ElementaryTypeName","src":"13893:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13892:14:14"},"returnParameters":{"id":1872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1871,"mutability":"mutable","name":"poolPaused","nameLocation":"13935:10:14","nodeType":"VariableDeclaration","scope":1873,"src":"13930:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1870,"name":"bool","nodeType":"ElementaryTypeName","src":"13930:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13929:17:14"},"scope":2028,"src":"13871:76:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1874,"nodeType":"StructuredDocumentation","src":"13953:648:14","text":" @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n the buffer period. Balancer timestamps are 32 bits.\n @param pool The pool whose data is requested\n @return poolPaused True if the Pool is paused\n @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n @return pauseManager The pause manager, or the zero address"},"functionSelector":"15e32046","id":1887,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolPausedState","nameLocation":"14615:18:14","nodeType":"FunctionDefinition","parameters":{"id":1877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1876,"mutability":"mutable","name":"pool","nameLocation":"14651:4:14","nodeType":"VariableDeclaration","scope":1887,"src":"14643:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1875,"name":"address","nodeType":"ElementaryTypeName","src":"14643:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14633:28:14"},"returnParameters":{"id":1886,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1879,"mutability":"mutable","name":"poolPaused","nameLocation":"14714:10:14","nodeType":"VariableDeclaration","scope":1887,"src":"14709:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1878,"name":"bool","nodeType":"ElementaryTypeName","src":"14709:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1881,"mutability":"mutable","name":"poolPauseWindowEndTime","nameLocation":"14733:22:14","nodeType":"VariableDeclaration","scope":1887,"src":"14726:29:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1880,"name":"uint32","nodeType":"ElementaryTypeName","src":"14726:6:14","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1883,"mutability":"mutable","name":"poolBufferPeriodEndTime","nameLocation":"14764:23:14","nodeType":"VariableDeclaration","scope":1887,"src":"14757:30:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1882,"name":"uint32","nodeType":"ElementaryTypeName","src":"14757:6:14","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1885,"mutability":"mutable","name":"pauseManager","nameLocation":"14797:12:14","nodeType":"VariableDeclaration","scope":1887,"src":"14789:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1884,"name":"address","nodeType":"ElementaryTypeName","src":"14789:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14708:102:14"},"scope":2028,"src":"14606:205:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1888,"nodeType":"StructuredDocumentation","src":"15039:332:14","text":" @notice Checks if the wrapped token has an initialized buffer in the Vault.\n @dev An initialized buffer should have an asset registered in the Vault.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return isBufferInitialized True if the ERC4626 buffer is initialized"},"functionSelector":"6844846b","id":1896,"implemented":false,"kind":"function","modifiers":[],"name":"isERC4626BufferInitialized","nameLocation":"15385:26:14","nodeType":"FunctionDefinition","parameters":{"id":1892,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1891,"mutability":"mutable","name":"wrappedToken","nameLocation":"15421:12:14","nodeType":"VariableDeclaration","scope":1896,"src":"15412:21:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":1890,"nodeType":"UserDefinedTypeName","pathNode":{"id":1889,"name":"IERC4626","nameLocations":["15412:8:14"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"15412:8:14"},"referencedDeclaration":6704,"src":"15412:8:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15411:23:14"},"returnParameters":{"id":1895,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1894,"mutability":"mutable","name":"isBufferInitialized","nameLocation":"15463:19:14","nodeType":"VariableDeclaration","scope":1896,"src":"15458:24:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1893,"name":"bool","nodeType":"ElementaryTypeName","src":"15458:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15457:26:14"},"scope":2028,"src":"15376:108:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1897,"nodeType":"StructuredDocumentation","src":"15490:477:14","text":" @notice Gets the registered asset for a given buffer.\n @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n the Vault on initialization.\n @param wrappedToken The wrapped token specifying the buffer\n @return asset The underlying asset of the wrapped token"},"functionSelector":"4afbaf5a","id":1905,"implemented":false,"kind":"function","modifiers":[],"name":"getERC4626BufferAsset","nameLocation":"15981:21:14","nodeType":"FunctionDefinition","parameters":{"id":1901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1900,"mutability":"mutable","name":"wrappedToken","nameLocation":"16012:12:14","nodeType":"VariableDeclaration","scope":1905,"src":"16003:21:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":1899,"nodeType":"UserDefinedTypeName","pathNode":{"id":1898,"name":"IERC4626","nameLocations":["16003:8:14"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"16003:8:14"},"referencedDeclaration":6704,"src":"16003:8:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16002:23:14"},"returnParameters":{"id":1904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1903,"mutability":"mutable","name":"asset","nameLocation":"16057:5:14","nodeType":"VariableDeclaration","scope":1905,"src":"16049:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1902,"name":"address","nodeType":"ElementaryTypeName","src":"16049:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16048:15:14"},"scope":2028,"src":"15972:92:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1906,"nodeType":"StructuredDocumentation","src":"16288:379:14","text":" @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return swapFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"85e0b999","id":1916,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateSwapFeeAmount","nameLocation":"16681:25:14","nodeType":"FunctionDefinition","parameters":{"id":1912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1908,"mutability":"mutable","name":"pool","nameLocation":"16715:4:14","nodeType":"VariableDeclaration","scope":1916,"src":"16707:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1907,"name":"address","nodeType":"ElementaryTypeName","src":"16707:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1911,"mutability":"mutable","name":"token","nameLocation":"16728:5:14","nodeType":"VariableDeclaration","scope":1916,"src":"16721:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":1910,"nodeType":"UserDefinedTypeName","pathNode":{"id":1909,"name":"IERC20","nameLocations":["16721:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"16721:6:14"},"referencedDeclaration":6980,"src":"16721:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"16706:28:14"},"returnParameters":{"id":1915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1914,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"16766:13:14","nodeType":"VariableDeclaration","scope":1916,"src":"16758:21:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1913,"name":"uint256","nodeType":"ElementaryTypeName","src":"16758:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16757:23:14"},"scope":2028,"src":"16672:109:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1917,"nodeType":"StructuredDocumentation","src":"16787:381:14","text":" @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return yieldFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"00fdfa13","id":1927,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateYieldFeeAmount","nameLocation":"17182:26:14","nodeType":"FunctionDefinition","parameters":{"id":1923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1919,"mutability":"mutable","name":"pool","nameLocation":"17217:4:14","nodeType":"VariableDeclaration","scope":1927,"src":"17209:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1918,"name":"address","nodeType":"ElementaryTypeName","src":"17209:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1922,"mutability":"mutable","name":"token","nameLocation":"17230:5:14","nodeType":"VariableDeclaration","scope":1927,"src":"17223:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":1921,"nodeType":"UserDefinedTypeName","pathNode":{"id":1920,"name":"IERC20","nameLocations":["17223:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"17223:6:14"},"referencedDeclaration":6980,"src":"17223:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"17208:28:14"},"returnParameters":{"id":1926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1925,"mutability":"mutable","name":"yieldFeeAmount","nameLocation":"17268:14:14","nodeType":"VariableDeclaration","scope":1927,"src":"17260:22:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1924,"name":"uint256","nodeType":"ElementaryTypeName","src":"17260:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17259:24:14"},"scope":2028,"src":"17173:111:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1928,"nodeType":"StructuredDocumentation","src":"17290:271:14","text":" @notice Fetches the static swap fee percentage for a given pool.\n @param pool The address of the pool whose static swap fee percentage is being queried\n @return swapFeePercentage The current static swap fee percentage for the specified pool"},"functionSelector":"b45090f9","id":1935,"implemented":false,"kind":"function","modifiers":[],"name":"getStaticSwapFeePercentage","nameLocation":"17575:26:14","nodeType":"FunctionDefinition","parameters":{"id":1931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1930,"mutability":"mutable","name":"pool","nameLocation":"17610:4:14","nodeType":"VariableDeclaration","scope":1935,"src":"17602:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1929,"name":"address","nodeType":"ElementaryTypeName","src":"17602:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17601:14:14"},"returnParameters":{"id":1934,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1933,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"17647:17:14","nodeType":"VariableDeclaration","scope":1935,"src":"17639:25:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1932,"name":"uint256","nodeType":"ElementaryTypeName","src":"17639:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17638:27:14"},"scope":2028,"src":"17566:100:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1936,"nodeType":"StructuredDocumentation","src":"17672:286:14","text":" @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n @param pool The address of the pool whose roles are being queried\n @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)"},"functionSelector":"e9ddeb26","id":1944,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolRoleAccounts","nameLocation":"17972:19:14","nodeType":"FunctionDefinition","parameters":{"id":1939,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1938,"mutability":"mutable","name":"pool","nameLocation":"18000:4:14","nodeType":"VariableDeclaration","scope":1944,"src":"17992:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1937,"name":"address","nodeType":"ElementaryTypeName","src":"17992:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17991:14:14"},"returnParameters":{"id":1943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1942,"mutability":"mutable","name":"roleAccounts","nameLocation":"18053:12:14","nodeType":"VariableDeclaration","scope":1944,"src":"18029:36:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2279_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1941,"nodeType":"UserDefinedTypeName","pathNode":{"id":1940,"name":"PoolRoleAccounts","nameLocations":["18029:16:14"],"nodeType":"IdentifierPath","referencedDeclaration":2279,"src":"18029:16:14"},"referencedDeclaration":2279,"src":"18029:16:14","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2279_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"src":"18028:38:14"},"scope":2028,"src":"17963:104:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1945,"nodeType":"StructuredDocumentation","src":"18073:363:14","text":" @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n @dev Reverts if the hook doesn't return the success flag set to `true`.\n @param pool The pool\n @param swapParams The swap parameters used to compute the fee\n @return dynamicSwapFeePercentage The dynamic swap fee percentage"},"functionSelector":"4d472bdd","id":1955,"implemented":false,"kind":"function","modifiers":[],"name":"computeDynamicSwapFeePercentage","nameLocation":"18450:31:14","nodeType":"FunctionDefinition","parameters":{"id":1951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1947,"mutability":"mutable","name":"pool","nameLocation":"18499:4:14","nodeType":"VariableDeclaration","scope":1955,"src":"18491:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1946,"name":"address","nodeType":"ElementaryTypeName","src":"18491:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1950,"mutability":"mutable","name":"swapParams","nameLocation":"18535:10:14","nodeType":"VariableDeclaration","scope":1955,"src":"18513:32:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":1949,"nodeType":"UserDefinedTypeName","pathNode":{"id":1948,"name":"PoolSwapParams","nameLocations":["18513:14:14"],"nodeType":"IdentifierPath","referencedDeclaration":2374,"src":"18513:14:14"},"referencedDeclaration":2374,"src":"18513:14:14","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"18481:70:14"},"returnParameters":{"id":1954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1953,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"18583:24:14","nodeType":"VariableDeclaration","scope":1955,"src":"18575:32:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1952,"name":"uint256","nodeType":"ElementaryTypeName","src":"18575:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18574:34:14"},"scope":2028,"src":"18441:168:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1956,"nodeType":"StructuredDocumentation","src":"18615:145:14","text":" @notice Returns the Protocol Fee Controller address.\n @return protocolFeeController Address of the ProtocolFeeController"},"functionSelector":"85f2dbd4","id":1962,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"18774:24:14","nodeType":"FunctionDefinition","parameters":{"id":1957,"nodeType":"ParameterList","parameters":[],"src":"18798:2:14"},"returnParameters":{"id":1961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1960,"mutability":"mutable","name":"protocolFeeController","nameLocation":"18847:21:14","nodeType":"VariableDeclaration","scope":1962,"src":"18824:44:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$643","typeString":"contract IProtocolFeeController"},"typeName":{"id":1959,"nodeType":"UserDefinedTypeName","pathNode":{"id":1958,"name":"IProtocolFeeController","nameLocations":["18824:22:14"],"nodeType":"IdentifierPath","referencedDeclaration":643,"src":"18824:22:14"},"referencedDeclaration":643,"src":"18824:22:14","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$643","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"18823:46:14"},"scope":2028,"src":"18765:105:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1963,"nodeType":"StructuredDocumentation","src":"19098:296:14","text":" @notice Checks whether a pool is in Recovery Mode.\n @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n @param pool Address of the pool to check\n @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise"},"functionSelector":"be7d628a","id":1970,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInRecoveryMode","nameLocation":"19408:20:14","nodeType":"FunctionDefinition","parameters":{"id":1966,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1965,"mutability":"mutable","name":"pool","nameLocation":"19437:4:14","nodeType":"VariableDeclaration","scope":1970,"src":"19429:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1964,"name":"address","nodeType":"ElementaryTypeName","src":"19429:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19428:14:14"},"returnParameters":{"id":1969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1968,"mutability":"mutable","name":"inRecoveryMode","nameLocation":"19471:14:14","nodeType":"VariableDeclaration","scope":1970,"src":"19466:19:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1967,"name":"bool","nodeType":"ElementaryTypeName","src":"19466:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19465:21:14"},"scope":2028,"src":"19399:88:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1971,"nodeType":"StructuredDocumentation","src":"19493:679:14","text":" @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n The request is implemented by the Vault without any interaction with the pool, ensuring that\n it works the same for all pools, and cannot be disabled by a new pool type.\n @param pool Address of the pool\n @param from Address of user to burn pool tokens from\n @param exactBptAmountIn Input pool token amount\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order"},"functionSelector":"a07d6040","id":1986,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityRecovery","nameLocation":"20186:23:14","nodeType":"FunctionDefinition","parameters":{"id":1981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1973,"mutability":"mutable","name":"pool","nameLocation":"20227:4:14","nodeType":"VariableDeclaration","scope":1986,"src":"20219:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1972,"name":"address","nodeType":"ElementaryTypeName","src":"20219:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1975,"mutability":"mutable","name":"from","nameLocation":"20249:4:14","nodeType":"VariableDeclaration","scope":1986,"src":"20241:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1974,"name":"address","nodeType":"ElementaryTypeName","src":"20241:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1977,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"20271:16:14","nodeType":"VariableDeclaration","scope":1986,"src":"20263:24:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1976,"name":"uint256","nodeType":"ElementaryTypeName","src":"20263:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1980,"mutability":"mutable","name":"minAmountsOut","nameLocation":"20314:13:14","nodeType":"VariableDeclaration","scope":1986,"src":"20297:30:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1978,"name":"uint256","nodeType":"ElementaryTypeName","src":"20297:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1979,"nodeType":"ArrayTypeName","src":"20297:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20209:124:14"},"returnParameters":{"id":1985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1984,"mutability":"mutable","name":"amountsOut","nameLocation":"20369:10:14","nodeType":"VariableDeclaration","scope":1986,"src":"20352:27:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1982,"name":"uint256","nodeType":"ElementaryTypeName","src":"20352:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1983,"nodeType":"ArrayTypeName","src":"20352:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20351:29:14"},"scope":2028,"src":"20177:204:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1987,"nodeType":"StructuredDocumentation","src":"20602:699:14","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"edfa3568","id":1994,"implemented":false,"kind":"function","modifiers":[],"name":"quote","nameLocation":"21315:5:14","nodeType":"FunctionDefinition","parameters":{"id":1990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1989,"mutability":"mutable","name":"data","nameLocation":"21336:4:14","nodeType":"VariableDeclaration","scope":1994,"src":"21321:19:14","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1988,"name":"bytes","nodeType":"ElementaryTypeName","src":"21321:5:14","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21320:21:14"},"returnParameters":{"id":1993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1992,"mutability":"mutable","name":"result","nameLocation":"21373:6:14","nodeType":"VariableDeclaration","scope":1994,"src":"21360:19:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1991,"name":"bytes","nodeType":"ElementaryTypeName","src":"21360:5:14","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21359:21:14"},"scope":2028,"src":"21306:75:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1995,"nodeType":"StructuredDocumentation","src":"21387:731:14","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n This call always reverts, returning the result in the revert reason.\n @param data Contains function signature and args to be passed to the msg.sender"},"functionSelector":"757d64b3","id":2000,"implemented":false,"kind":"function","modifiers":[],"name":"quoteAndRevert","nameLocation":"22132:14:14","nodeType":"FunctionDefinition","parameters":{"id":1998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1997,"mutability":"mutable","name":"data","nameLocation":"22162:4:14","nodeType":"VariableDeclaration","scope":2000,"src":"22147:19:14","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1996,"name":"bytes","nodeType":"ElementaryTypeName","src":"22147:5:14","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"22146:21:14"},"returnParameters":{"id":1999,"nodeType":"ParameterList","parameters":[],"src":"22176:0:14"},"scope":2028,"src":"22123:54:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2001,"nodeType":"StructuredDocumentation","src":"22183:239:14","text":" @notice Returns true if queries are disabled on the Vault.\n @dev If true, queries might either be disabled temporarily or permanently.\n @return queryDisabled True if query functionality is reversibly disabled"},"functionSelector":"b4aef0ab","id":2006,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabled","nameLocation":"22436:15:14","nodeType":"FunctionDefinition","parameters":{"id":2002,"nodeType":"ParameterList","parameters":[],"src":"22451:2:14"},"returnParameters":{"id":2005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2004,"mutability":"mutable","name":"queryDisabled","nameLocation":"22482:13:14","nodeType":"VariableDeclaration","scope":2006,"src":"22477:18:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2003,"name":"bool","nodeType":"ElementaryTypeName","src":"22477:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22476:20:14"},"scope":2028,"src":"22427:70:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2007,"nodeType":"StructuredDocumentation","src":"22503:302:14","text":" @notice Returns true if queries are disabled permanently; false if they are enabled.\n @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n @return queryDisabledPermanently True if query functionality is permanently disabled"},"functionSelector":"13ef8a5d","id":2012,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabledPermanently","nameLocation":"22819:26:14","nodeType":"FunctionDefinition","parameters":{"id":2008,"nodeType":"ParameterList","parameters":[],"src":"22845:2:14"},"returnParameters":{"id":2011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2010,"mutability":"mutable","name":"queryDisabledPermanently","nameLocation":"22876:24:14","nodeType":"VariableDeclaration","scope":2012,"src":"22871:29:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2009,"name":"bool","nodeType":"ElementaryTypeName","src":"22871:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22870:31:14"},"scope":2028,"src":"22810:92:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2013,"nodeType":"StructuredDocumentation","src":"22908:162:14","text":" @notice Pools can use this event to emit event data from the Vault.\n @param eventKey Event key\n @param eventData Encoded event data"},"functionSelector":"c8088247","id":2020,"implemented":false,"kind":"function","modifiers":[],"name":"emitAuxiliaryEvent","nameLocation":"23084:18:14","nodeType":"FunctionDefinition","parameters":{"id":2018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2015,"mutability":"mutable","name":"eventKey","nameLocation":"23111:8:14","nodeType":"VariableDeclaration","scope":2020,"src":"23103:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2014,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23103:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2017,"mutability":"mutable","name":"eventData","nameLocation":"23136:9:14","nodeType":"VariableDeclaration","scope":2020,"src":"23121:24:14","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2016,"name":"bytes","nodeType":"ElementaryTypeName","src":"23121:5:14","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"23102:44:14"},"returnParameters":{"id":2019,"nodeType":"ParameterList","parameters":[],"src":"23155:0:14"},"scope":2028,"src":"23075:81:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2021,"nodeType":"StructuredDocumentation","src":"23380:284:14","text":" @notice Returns the Authorizer address.\n @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n and can be changed through a permissioned call.\n @return authorizer Address of the authorizer contract"},"functionSelector":"aaabadc5","id":2027,"implemented":false,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"23678:13:14","nodeType":"FunctionDefinition","parameters":{"id":2022,"nodeType":"ParameterList","parameters":[],"src":"23691:2:14"},"returnParameters":{"id":2026,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2025,"mutability":"mutable","name":"authorizer","nameLocation":"23729:10:14","nodeType":"VariableDeclaration","scope":2027,"src":"23717:22:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$40","typeString":"contract IAuthorizer"},"typeName":{"id":2024,"nodeType":"UserDefinedTypeName","pathNode":{"id":2023,"name":"IAuthorizer","nameLocations":["23717:11:14"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"23717:11:14"},"referencedDeclaration":40,"src":"23717:11:14","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$40","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23716:24:14"},"scope":2028,"src":"23669:72:14","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2029,"src":"767:22976:14","usedErrors":[],"usedEvents":[]}],"src":"46:23698:14"},"id":14},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","exportedSymbols":{"AddLiquidityKind":[2409],"AddLiquidityParams":[2425],"AfterSwapParams":[2403],"BufferWrapOrUnwrapParams":[2464],"FEE_BITLENGTH":[2467],"FEE_SCALING_FACTOR":[2470],"HookFlags":[2229],"HooksConfig":[2253],"IERC20":[6980],"IERC4626":[6704],"IRateProvider":[24],"IVaultMain":[2164],"LiquidityManagement":[2182],"MAX_FEE_PERCENTAGE":[2473],"PoolConfig":[2207],"PoolConfigBits":[2184],"PoolData":[2331],"PoolRoleAccounts":[2279],"PoolSwapParams":[2374],"RemoveLiquidityKind":[2430],"RemoveLiquidityParams":[2446],"Rounding":[2334],"SwapKind":[2337],"SwapState":[2263],"TokenConfig":[2296],"TokenInfo":[2306],"TokenType":[2283],"VaultState":[2271],"VaultSwapParams":[2356],"WrappingDirection":[2449]},"id":2165,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2030,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:15"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2032,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2165,"sourceUnit":6981,"src":"72:72:15","symbolAliases":[{"foreign":{"id":2031,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"81:6:15","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":2033,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2165,"sourceUnit":2474,"src":"146:26:15","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultMain","contractDependencies":[],"contractKind":"interface","documentation":{"id":2034,"nodeType":"StructuredDocumentation","src":"174:232:15","text":" @notice Interface for functions defined on the main Vault contract.\n @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n for technical or performance reasons."},"fullyImplemented":false,"id":2164,"linearizedBaseContracts":[2164],"name":"IVaultMain","nameLocation":"417:10:15","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2035,"nodeType":"StructuredDocumentation","src":"656:431:15","text":" @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n meaning all balances for the caller have to be settled at the end.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"48c89491","id":2042,"implemented":false,"kind":"function","modifiers":[],"name":"unlock","nameLocation":"1101:6:15","nodeType":"FunctionDefinition","parameters":{"id":2038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2037,"mutability":"mutable","name":"data","nameLocation":"1123:4:15","nodeType":"VariableDeclaration","scope":2042,"src":"1108:19:15","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2036,"name":"bytes","nodeType":"ElementaryTypeName","src":"1108:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1107:21:15"},"returnParameters":{"id":2041,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2040,"mutability":"mutable","name":"result","nameLocation":"1160:6:15","nodeType":"VariableDeclaration","scope":2042,"src":"1147:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2039,"name":"bytes","nodeType":"ElementaryTypeName","src":"1147:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1146:21:15"},"scope":2164,"src":"1092:76:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2043,"nodeType":"StructuredDocumentation","src":"1174:1291:15","text":" @notice Settles deltas for a token; must be successful for the current lock to be released.\n @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n excess in the Vault balance.\n If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n not affect settlement.\n The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n difference equals current balance of the token minus existing reserves of the token when the function is called.\n @param token Address of the token\n @param amountHint Amount paid as reported by the caller\n @return credit Credit received in return of the payment"},"functionSelector":"15afd409","id":2053,"implemented":false,"kind":"function","modifiers":[],"name":"settle","nameLocation":"2479:6:15","nodeType":"FunctionDefinition","parameters":{"id":2049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2046,"mutability":"mutable","name":"token","nameLocation":"2493:5:15","nodeType":"VariableDeclaration","scope":2053,"src":"2486:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":2045,"nodeType":"UserDefinedTypeName","pathNode":{"id":2044,"name":"IERC20","nameLocations":["2486:6:15"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"2486:6:15"},"referencedDeclaration":6980,"src":"2486:6:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2048,"mutability":"mutable","name":"amountHint","nameLocation":"2508:10:15","nodeType":"VariableDeclaration","scope":2053,"src":"2500:18:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2047,"name":"uint256","nodeType":"ElementaryTypeName","src":"2500:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2485:34:15"},"returnParameters":{"id":2052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2051,"mutability":"mutable","name":"credit","nameLocation":"2546:6:15","nodeType":"VariableDeclaration","scope":2053,"src":"2538:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2050,"name":"uint256","nodeType":"ElementaryTypeName","src":"2538:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2537:16:15"},"scope":2164,"src":"2470:84:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2054,"nodeType":"StructuredDocumentation","src":"2560:315:15","text":" @notice Sends tokens to a recipient.\n @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n debts.\n @param token Address of the token\n @param to Recipient address\n @param amount Amount of tokens to send"},"functionSelector":"ae639329","id":2064,"implemented":false,"kind":"function","modifiers":[],"name":"sendTo","nameLocation":"2889:6:15","nodeType":"FunctionDefinition","parameters":{"id":2062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2057,"mutability":"mutable","name":"token","nameLocation":"2903:5:15","nodeType":"VariableDeclaration","scope":2064,"src":"2896:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":2056,"nodeType":"UserDefinedTypeName","pathNode":{"id":2055,"name":"IERC20","nameLocations":["2896:6:15"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"2896:6:15"},"referencedDeclaration":6980,"src":"2896:6:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2059,"mutability":"mutable","name":"to","nameLocation":"2918:2:15","nodeType":"VariableDeclaration","scope":2064,"src":"2910:10:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2058,"name":"address","nodeType":"ElementaryTypeName","src":"2910:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2061,"mutability":"mutable","name":"amount","nameLocation":"2930:6:15","nodeType":"VariableDeclaration","scope":2064,"src":"2922:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2060,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2895:42:15"},"returnParameters":{"id":2063,"nodeType":"ParameterList","parameters":[],"src":"2946:0:15"},"scope":2164,"src":"2880:67:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2065,"nodeType":"StructuredDocumentation","src":"3161:412:15","text":" @notice Swaps tokens based on provided parameters.\n @dev All parameters are given in raw token decimal encoding.\n @param vaultSwapParams Parameters for the swap (see above for struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"2bfb780c","id":2077,"implemented":false,"kind":"function","modifiers":[],"name":"swap","nameLocation":"3587:4:15","nodeType":"FunctionDefinition","parameters":{"id":2069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2068,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"3624:15:15","nodeType":"VariableDeclaration","scope":2077,"src":"3601:38:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":2067,"nodeType":"UserDefinedTypeName","pathNode":{"id":2066,"name":"VaultSwapParams","nameLocations":["3601:15:15"],"nodeType":"IdentifierPath","referencedDeclaration":2356,"src":"3601:15:15"},"referencedDeclaration":2356,"src":"3601:15:15","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"}],"src":"3591:54:15"},"returnParameters":{"id":2076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2071,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"3672:19:15","nodeType":"VariableDeclaration","scope":2077,"src":"3664:27:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2070,"name":"uint256","nodeType":"ElementaryTypeName","src":"3664:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2073,"mutability":"mutable","name":"amountInRaw","nameLocation":"3701:11:15","nodeType":"VariableDeclaration","scope":2077,"src":"3693:19:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2072,"name":"uint256","nodeType":"ElementaryTypeName","src":"3693:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2075,"mutability":"mutable","name":"amountOutRaw","nameLocation":"3722:12:15","nodeType":"VariableDeclaration","scope":2077,"src":"3714:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2074,"name":"uint256","nodeType":"ElementaryTypeName","src":"3714:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3663:72:15"},"scope":2164,"src":"3578:158:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2078,"nodeType":"StructuredDocumentation","src":"3954:523:15","text":" @notice Adds liquidity to a pool.\n @dev Caution should be exercised when adding liquidity because the Vault has the capability\n to transfer tokens from any user, given that it holds all allowances.\n @param params Parameters for the add liquidity (see above for struct definition)\n @return amountsIn Actual amounts of input tokens\n @return bptAmountOut Output pool token amount\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"4af29ec4","id":2091,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidity","nameLocation":"4491:12:15","nodeType":"FunctionDefinition","parameters":{"id":2082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2081,"mutability":"mutable","name":"params","nameLocation":"4539:6:15","nodeType":"VariableDeclaration","scope":2091,"src":"4513:32:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":2080,"nodeType":"UserDefinedTypeName","pathNode":{"id":2079,"name":"AddLiquidityParams","nameLocations":["4513:18:15"],"nodeType":"IdentifierPath","referencedDeclaration":2425,"src":"4513:18:15"},"referencedDeclaration":2425,"src":"4513:18:15","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"}],"src":"4503:48:15"},"returnParameters":{"id":2090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2085,"mutability":"mutable","name":"amountsIn","nameLocation":"4587:9:15","nodeType":"VariableDeclaration","scope":2091,"src":"4570:26:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2083,"name":"uint256","nodeType":"ElementaryTypeName","src":"4570:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2084,"nodeType":"ArrayTypeName","src":"4570:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2087,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4606:12:15","nodeType":"VariableDeclaration","scope":2091,"src":"4598:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2086,"name":"uint256","nodeType":"ElementaryTypeName","src":"4598:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2089,"mutability":"mutable","name":"returnData","nameLocation":"4633:10:15","nodeType":"VariableDeclaration","scope":2091,"src":"4620:23:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2088,"name":"bytes","nodeType":"ElementaryTypeName","src":"4620:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4569:75:15"},"scope":2164,"src":"4482:163:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2092,"nodeType":"StructuredDocumentation","src":"4864:644:15","text":" @notice Removes liquidity from a pool.\n @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n Untrusted routers require prior approval from the user. This is the only function allowed to call\n _queryModeBalanceIncrease (and only in a query context).\n @param params Parameters for the remove liquidity (see above for struct definition)\n @return bptAmountIn Actual amount of BPT burned\n @return amountsOut Actual amounts of output tokens\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"21457897","id":2105,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidity","nameLocation":"5522:15:15","nodeType":"FunctionDefinition","parameters":{"id":2096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2095,"mutability":"mutable","name":"params","nameLocation":"5576:6:15","nodeType":"VariableDeclaration","scope":2105,"src":"5547:35:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":2094,"nodeType":"UserDefinedTypeName","pathNode":{"id":2093,"name":"RemoveLiquidityParams","nameLocations":["5547:21:15"],"nodeType":"IdentifierPath","referencedDeclaration":2446,"src":"5547:21:15"},"referencedDeclaration":2446,"src":"5547:21:15","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"}],"src":"5537:51:15"},"returnParameters":{"id":2104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2098,"mutability":"mutable","name":"bptAmountIn","nameLocation":"5615:11:15","nodeType":"VariableDeclaration","scope":2105,"src":"5607:19:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2097,"name":"uint256","nodeType":"ElementaryTypeName","src":"5607:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2101,"mutability":"mutable","name":"amountsOut","nameLocation":"5645:10:15","nodeType":"VariableDeclaration","scope":2105,"src":"5628:27:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2099,"name":"uint256","nodeType":"ElementaryTypeName","src":"5628:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2100,"nodeType":"ArrayTypeName","src":"5628:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2103,"mutability":"mutable","name":"returnData","nameLocation":"5670:10:15","nodeType":"VariableDeclaration","scope":2105,"src":"5657:23:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2102,"name":"bytes","nodeType":"ElementaryTypeName","src":"5657:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5606:75:15"},"scope":2164,"src":"5513:169:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2106,"nodeType":"StructuredDocumentation","src":"5912:385:15","text":" @notice Gets the index of a token in a given pool.\n @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n @param pool Address of the pool\n @param token Address of the token\n @return tokenCount Number of tokens in the pool\n @return index Index corresponding to the given token in the pool's token list"},"functionSelector":"c9c1661b","id":2118,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenCountAndIndexOfToken","nameLocation":"6311:32:15","nodeType":"FunctionDefinition","parameters":{"id":2112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2108,"mutability":"mutable","name":"pool","nameLocation":"6361:4:15","nodeType":"VariableDeclaration","scope":2118,"src":"6353:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2107,"name":"address","nodeType":"ElementaryTypeName","src":"6353:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2111,"mutability":"mutable","name":"token","nameLocation":"6382:5:15","nodeType":"VariableDeclaration","scope":2118,"src":"6375:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":2110,"nodeType":"UserDefinedTypeName","pathNode":{"id":2109,"name":"IERC20","nameLocations":["6375:6:15"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"6375:6:15"},"referencedDeclaration":6980,"src":"6375:6:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6343:50:15"},"returnParameters":{"id":2117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2114,"mutability":"mutable","name":"tokenCount","nameLocation":"6425:10:15","nodeType":"VariableDeclaration","scope":2118,"src":"6417:18:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2113,"name":"uint256","nodeType":"ElementaryTypeName","src":"6417:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2116,"mutability":"mutable","name":"index","nameLocation":"6445:5:15","nodeType":"VariableDeclaration","scope":2118,"src":"6437:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2115,"name":"uint256","nodeType":"ElementaryTypeName","src":"6437:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6416:35:15"},"scope":2164,"src":"6302:150:15","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2119,"nodeType":"StructuredDocumentation","src":"6683:460:15","text":" @notice Transfers pool token from owner to a recipient.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"beabacc8","id":2130,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"7157:8:15","nodeType":"FunctionDefinition","parameters":{"id":2126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2121,"mutability":"mutable","name":"owner","nameLocation":"7174:5:15","nodeType":"VariableDeclaration","scope":2130,"src":"7166:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2120,"name":"address","nodeType":"ElementaryTypeName","src":"7166:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2123,"mutability":"mutable","name":"to","nameLocation":"7189:2:15","nodeType":"VariableDeclaration","scope":2130,"src":"7181:10:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2122,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2125,"mutability":"mutable","name":"amount","nameLocation":"7201:6:15","nodeType":"VariableDeclaration","scope":2130,"src":"7193:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2124,"name":"uint256","nodeType":"ElementaryTypeName","src":"7193:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7165:43:15"},"returnParameters":{"id":2129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2128,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2130,"src":"7227:4:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2127,"name":"bool","nodeType":"ElementaryTypeName","src":"7227:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7226:6:15"},"scope":2164,"src":"7148:85:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2131,"nodeType":"StructuredDocumentation","src":"7239:544:15","text":" @notice Transfers pool token from a sender to a recipient using an allowance.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param spender Address allowed to perform the transfer\n @param from Address of the sender\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"15dacbea","id":2144,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"7797:12:15","nodeType":"FunctionDefinition","parameters":{"id":2140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2133,"mutability":"mutable","name":"spender","nameLocation":"7818:7:15","nodeType":"VariableDeclaration","scope":2144,"src":"7810:15:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2132,"name":"address","nodeType":"ElementaryTypeName","src":"7810:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2135,"mutability":"mutable","name":"from","nameLocation":"7835:4:15","nodeType":"VariableDeclaration","scope":2144,"src":"7827:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2134,"name":"address","nodeType":"ElementaryTypeName","src":"7827:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2137,"mutability":"mutable","name":"to","nameLocation":"7849:2:15","nodeType":"VariableDeclaration","scope":2144,"src":"7841:10:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2136,"name":"address","nodeType":"ElementaryTypeName","src":"7841:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2139,"mutability":"mutable","name":"amount","nameLocation":"7861:6:15","nodeType":"VariableDeclaration","scope":2144,"src":"7853:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2138,"name":"uint256","nodeType":"ElementaryTypeName","src":"7853:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7809:59:15"},"returnParameters":{"id":2143,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2142,"mutability":"mutable","name":"success","nameLocation":"7892:7:15","nodeType":"VariableDeclaration","scope":2144,"src":"7887:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2141,"name":"bool","nodeType":"ElementaryTypeName","src":"7887:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7886:14:15"},"scope":2164,"src":"7788:113:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2145,"nodeType":"StructuredDocumentation","src":"8128:575:15","text":" @notice Wraps/unwraps tokens based on the parameters provided.\n @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n @param params Parameters for the wrap/unwrap operation (see struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"43583be5","id":2157,"implemented":false,"kind":"function","modifiers":[],"name":"erc4626BufferWrapOrUnwrap","nameLocation":"8717:25:15","nodeType":"FunctionDefinition","parameters":{"id":2149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2148,"mutability":"mutable","name":"params","nameLocation":"8784:6:15","nodeType":"VariableDeclaration","scope":2157,"src":"8752:38:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams"},"typeName":{"id":2147,"nodeType":"UserDefinedTypeName","pathNode":{"id":2146,"name":"BufferWrapOrUnwrapParams","nameLocations":["8752:24:15"],"nodeType":"IdentifierPath","referencedDeclaration":2464,"src":"8752:24:15"},"referencedDeclaration":2464,"src":"8752:24:15","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_storage_ptr","typeString":"struct BufferWrapOrUnwrapParams"}},"visibility":"internal"}],"src":"8742:54:15"},"returnParameters":{"id":2156,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2151,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"8823:19:15","nodeType":"VariableDeclaration","scope":2157,"src":"8815:27:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2150,"name":"uint256","nodeType":"ElementaryTypeName","src":"8815:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2153,"mutability":"mutable","name":"amountInRaw","nameLocation":"8852:11:15","nodeType":"VariableDeclaration","scope":2157,"src":"8844:19:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2152,"name":"uint256","nodeType":"ElementaryTypeName","src":"8844:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2155,"mutability":"mutable","name":"amountOutRaw","nameLocation":"8873:12:15","nodeType":"VariableDeclaration","scope":2157,"src":"8865:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2154,"name":"uint256","nodeType":"ElementaryTypeName","src":"8865:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8814:72:15"},"scope":2164,"src":"8708:179:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2158,"nodeType":"StructuredDocumentation","src":"9115:345:15","text":" @notice Returns the VaultExtension contract address.\n @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n functions, since delegate calls through the Vault are more expensive than direct calls.\n @return vaultExtension Address of the VaultExtension"},"functionSelector":"b9a8effa","id":2163,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultExtension","nameLocation":"9474:17:15","nodeType":"FunctionDefinition","parameters":{"id":2159,"nodeType":"ParameterList","parameters":[],"src":"9491:2:15"},"returnParameters":{"id":2162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2161,"mutability":"mutable","name":"vaultExtension","nameLocation":"9525:14:15","nodeType":"VariableDeclaration","scope":2163,"src":"9517:22:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2160,"name":"address","nodeType":"ElementaryTypeName","src":"9517:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9516:24:15"},"scope":2164,"src":"9465:76:15","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2165,"src":"407:9136:15","usedErrors":[],"usedEvents":[]}],"src":"46:9498:15"},"id":15},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","exportedSymbols":{"AddLiquidityKind":[2409],"AddLiquidityParams":[2425],"AfterSwapParams":[2403],"BufferWrapOrUnwrapParams":[2464],"FEE_BITLENGTH":[2467],"FEE_SCALING_FACTOR":[2470],"HookFlags":[2229],"HooksConfig":[2253],"IERC20":[6980],"IERC4626":[6704],"IRateProvider":[24],"LiquidityManagement":[2182],"MAX_FEE_PERCENTAGE":[2473],"PoolConfig":[2207],"PoolConfigBits":[2184],"PoolData":[2331],"PoolRoleAccounts":[2279],"PoolSwapParams":[2374],"RemoveLiquidityKind":[2430],"RemoveLiquidityParams":[2446],"Rounding":[2334],"SwapKind":[2337],"SwapState":[2263],"TokenConfig":[2296],"TokenInfo":[2306],"TokenType":[2283],"VaultState":[2271],"VaultSwapParams":[2356],"WrappingDirection":[2449]},"id":2474,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2166,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:16"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2168,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2474,"sourceUnit":6981,"src":"72:72:16","symbolAliases":[{"foreign":{"id":2167,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"81:6:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2170,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2474,"sourceUnit":6705,"src":"145:75:16","symbolAliases":[{"foreign":{"id":2169,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6704,"src":"154:8:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"../solidity-utils/helpers/IRateProvider.sol","id":2172,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2474,"sourceUnit":25,"src":"222:76:16","symbolAliases":[{"foreign":{"id":2171,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24,"src":"231:13:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"LiquidityManagement","documentation":{"id":2173,"nodeType":"StructuredDocumentation","src":"300:472:16","text":" @notice Represents a pool's liquidity management configuration.\n @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION"},"id":2182,"members":[{"constant":false,"id":2175,"mutability":"mutable","name":"disableUnbalancedLiquidity","nameLocation":"811:26:16","nodeType":"VariableDeclaration","scope":2182,"src":"806:31:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2174,"name":"bool","nodeType":"ElementaryTypeName","src":"806:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2177,"mutability":"mutable","name":"enableAddLiquidityCustom","nameLocation":"848:24:16","nodeType":"VariableDeclaration","scope":2182,"src":"843:29:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2176,"name":"bool","nodeType":"ElementaryTypeName","src":"843:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2179,"mutability":"mutable","name":"enableRemoveLiquidityCustom","nameLocation":"883:27:16","nodeType":"VariableDeclaration","scope":2182,"src":"878:32:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2178,"name":"bool","nodeType":"ElementaryTypeName","src":"878:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2181,"mutability":"mutable","name":"enableDonation","nameLocation":"921:14:16","nodeType":"VariableDeclaration","scope":2182,"src":"916:19:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2180,"name":"bool","nodeType":"ElementaryTypeName","src":"916:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"LiquidityManagement","nameLocation":"780:19:16","nodeType":"StructDefinition","scope":2474,"src":"773:165:16","visibility":"public"},{"canonicalName":"PoolConfigBits","id":2184,"name":"PoolConfigBits","nameLocation":"1015:14:16","nodeType":"UserDefinedValueTypeDefinition","src":"1010:31:16","underlyingType":{"id":2183,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1033:7:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"canonicalName":"PoolConfig","documentation":{"id":2185,"nodeType":"StructuredDocumentation","src":"1043:1034:16","text":" @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n @param liquidityManagement Flags related to adding/removing liquidity\n @param staticSwapFeePercentage The pool's native swap fee\n @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n @param isPoolRegistered If true, the pool has been registered with the Vault\n @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals"},"id":2207,"members":[{"constant":false,"id":2188,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2122:19:16","nodeType":"VariableDeclaration","scope":2207,"src":"2102:39:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2182_storage_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":2187,"nodeType":"UserDefinedTypeName","pathNode":{"id":2186,"name":"LiquidityManagement","nameLocations":["2102:19:16"],"nodeType":"IdentifierPath","referencedDeclaration":2182,"src":"2102:19:16"},"referencedDeclaration":2182,"src":"2102:19:16","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2182_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"},{"constant":false,"id":2190,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"2155:23:16","nodeType":"VariableDeclaration","scope":2207,"src":"2147:31:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2189,"name":"uint256","nodeType":"ElementaryTypeName","src":"2147:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2192,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"2192:26:16","nodeType":"VariableDeclaration","scope":2207,"src":"2184:34:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2191,"name":"uint256","nodeType":"ElementaryTypeName","src":"2184:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2194,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"2232:27:16","nodeType":"VariableDeclaration","scope":2207,"src":"2224:35:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2193,"name":"uint256","nodeType":"ElementaryTypeName","src":"2224:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2196,"mutability":"mutable","name":"tokenDecimalDiffs","nameLocation":"2272:17:16","nodeType":"VariableDeclaration","scope":2207,"src":"2265:24:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":2195,"name":"uint40","nodeType":"ElementaryTypeName","src":"2265:6:16","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":2198,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"2302:18:16","nodeType":"VariableDeclaration","scope":2207,"src":"2295:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2197,"name":"uint32","nodeType":"ElementaryTypeName","src":"2295:6:16","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2200,"mutability":"mutable","name":"isPoolRegistered","nameLocation":"2331:16:16","nodeType":"VariableDeclaration","scope":2207,"src":"2326:21:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2199,"name":"bool","nodeType":"ElementaryTypeName","src":"2326:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2202,"mutability":"mutable","name":"isPoolInitialized","nameLocation":"2358:17:16","nodeType":"VariableDeclaration","scope":2207,"src":"2353:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2201,"name":"bool","nodeType":"ElementaryTypeName","src":"2353:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2204,"mutability":"mutable","name":"isPoolPaused","nameLocation":"2386:12:16","nodeType":"VariableDeclaration","scope":2207,"src":"2381:17:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2203,"name":"bool","nodeType":"ElementaryTypeName","src":"2381:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2206,"mutability":"mutable","name":"isPoolInRecoveryMode","nameLocation":"2409:20:16","nodeType":"VariableDeclaration","scope":2207,"src":"2404:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2205,"name":"bool","nodeType":"ElementaryTypeName","src":"2404:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolConfig","nameLocation":"2085:10:16","nodeType":"StructDefinition","scope":2474,"src":"2078:354:16","visibility":"public"},{"canonicalName":"HookFlags","documentation":{"id":2208,"nodeType":"StructuredDocumentation","src":"2434:352:16","text":" @notice The flag portion of the `HooksConfig`.\n @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n flags to true will cause the Vault to call the corresponding hook during operations."},"id":2229,"members":[{"constant":false,"id":2210,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"2815:25:16","nodeType":"VariableDeclaration","scope":2229,"src":"2810:30:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2209,"name":"bool","nodeType":"ElementaryTypeName","src":"2810:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2212,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"2851:26:16","nodeType":"VariableDeclaration","scope":2229,"src":"2846:31:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2211,"name":"bool","nodeType":"ElementaryTypeName","src":"2846:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2214,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"2888:25:16","nodeType":"VariableDeclaration","scope":2229,"src":"2883:30:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2213,"name":"bool","nodeType":"ElementaryTypeName","src":"2883:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2216,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"2924:31:16","nodeType":"VariableDeclaration","scope":2229,"src":"2919:36:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2215,"name":"bool","nodeType":"ElementaryTypeName","src":"2919:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2218,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"2966:20:16","nodeType":"VariableDeclaration","scope":2229,"src":"2961:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2217,"name":"bool","nodeType":"ElementaryTypeName","src":"2961:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2220,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"2997:19:16","nodeType":"VariableDeclaration","scope":2229,"src":"2992:24:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2219,"name":"bool","nodeType":"ElementaryTypeName","src":"2992:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2222,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3027:28:16","nodeType":"VariableDeclaration","scope":2229,"src":"3022:33:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2221,"name":"bool","nodeType":"ElementaryTypeName","src":"3022:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2224,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3066:27:16","nodeType":"VariableDeclaration","scope":2229,"src":"3061:32:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2223,"name":"bool","nodeType":"ElementaryTypeName","src":"3061:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2226,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3104:31:16","nodeType":"VariableDeclaration","scope":2229,"src":"3099:36:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2225,"name":"bool","nodeType":"ElementaryTypeName","src":"3099:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2228,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3146:30:16","nodeType":"VariableDeclaration","scope":2229,"src":"3141:35:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2227,"name":"bool","nodeType":"ElementaryTypeName","src":"3141:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"HookFlags","nameLocation":"2794:9:16","nodeType":"StructDefinition","scope":2474,"src":"2787:392:16","visibility":"public"},{"canonicalName":"HooksConfig","documentation":{"id":2230,"nodeType":"StructuredDocumentation","src":"3181:101:16","text":"@notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address)."},"id":2253,"members":[{"constant":false,"id":2232,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"3312:25:16","nodeType":"VariableDeclaration","scope":2253,"src":"3307:30:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2231,"name":"bool","nodeType":"ElementaryTypeName","src":"3307:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2234,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"3348:26:16","nodeType":"VariableDeclaration","scope":2253,"src":"3343:31:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2233,"name":"bool","nodeType":"ElementaryTypeName","src":"3343:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2236,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"3385:25:16","nodeType":"VariableDeclaration","scope":2253,"src":"3380:30:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2235,"name":"bool","nodeType":"ElementaryTypeName","src":"3380:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2238,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"3421:31:16","nodeType":"VariableDeclaration","scope":2253,"src":"3416:36:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2237,"name":"bool","nodeType":"ElementaryTypeName","src":"3416:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2240,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"3463:20:16","nodeType":"VariableDeclaration","scope":2253,"src":"3458:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2239,"name":"bool","nodeType":"ElementaryTypeName","src":"3458:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2242,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"3494:19:16","nodeType":"VariableDeclaration","scope":2253,"src":"3489:24:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2241,"name":"bool","nodeType":"ElementaryTypeName","src":"3489:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2244,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3524:28:16","nodeType":"VariableDeclaration","scope":2253,"src":"3519:33:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2243,"name":"bool","nodeType":"ElementaryTypeName","src":"3519:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2246,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3563:27:16","nodeType":"VariableDeclaration","scope":2253,"src":"3558:32:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2245,"name":"bool","nodeType":"ElementaryTypeName","src":"3558:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2248,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3601:31:16","nodeType":"VariableDeclaration","scope":2253,"src":"3596:36:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2247,"name":"bool","nodeType":"ElementaryTypeName","src":"3596:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2250,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3643:30:16","nodeType":"VariableDeclaration","scope":2253,"src":"3638:35:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2249,"name":"bool","nodeType":"ElementaryTypeName","src":"3638:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2252,"mutability":"mutable","name":"hooksContract","nameLocation":"3687:13:16","nodeType":"VariableDeclaration","scope":2253,"src":"3679:21:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2251,"name":"address","nodeType":"ElementaryTypeName","src":"3679:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"HooksConfig","nameLocation":"3289:11:16","nodeType":"StructDefinition","scope":2474,"src":"3282:421:16","visibility":"public"},{"canonicalName":"SwapState","documentation":{"id":2254,"nodeType":"StructuredDocumentation","src":"3705:364:16","text":" @notice Represents temporary state used during a swap operation.\n @param indexIn The zero-based index of tokenIn\n @param indexOut The zero-based index of tokenOut\n @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n @param swapFeePercentage The swap fee to be applied (might be static or dynamic)"},"id":2263,"members":[{"constant":false,"id":2256,"mutability":"mutable","name":"indexIn","nameLocation":"4101:7:16","nodeType":"VariableDeclaration","scope":2263,"src":"4093:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2255,"name":"uint256","nodeType":"ElementaryTypeName","src":"4093:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2258,"mutability":"mutable","name":"indexOut","nameLocation":"4122:8:16","nodeType":"VariableDeclaration","scope":2263,"src":"4114:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2257,"name":"uint256","nodeType":"ElementaryTypeName","src":"4114:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2260,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"4144:19:16","nodeType":"VariableDeclaration","scope":2263,"src":"4136:27:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2259,"name":"uint256","nodeType":"ElementaryTypeName","src":"4136:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2262,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"4177:17:16","nodeType":"VariableDeclaration","scope":2263,"src":"4169:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2261,"name":"uint256","nodeType":"ElementaryTypeName","src":"4169:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapState","nameLocation":"4077:9:16","nodeType":"StructDefinition","scope":2474,"src":"4070:127:16","visibility":"public"},{"canonicalName":"VaultState","documentation":{"id":2264,"nodeType":"StructuredDocumentation","src":"4199:381:16","text":" @notice Represents the Vault's configuration.\n @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled"},"id":2271,"members":[{"constant":false,"id":2266,"mutability":"mutable","name":"isQueryDisabled","nameLocation":"4610:15:16","nodeType":"VariableDeclaration","scope":2271,"src":"4605:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2265,"name":"bool","nodeType":"ElementaryTypeName","src":"4605:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2268,"mutability":"mutable","name":"isVaultPaused","nameLocation":"4636:13:16","nodeType":"VariableDeclaration","scope":2271,"src":"4631:18:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2267,"name":"bool","nodeType":"ElementaryTypeName","src":"4631:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2270,"mutability":"mutable","name":"areBuffersPaused","nameLocation":"4660:16:16","nodeType":"VariableDeclaration","scope":2271,"src":"4655:21:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2269,"name":"bool","nodeType":"ElementaryTypeName","src":"4655:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"VaultState","nameLocation":"4588:10:16","nodeType":"StructDefinition","scope":2474,"src":"4581:98:16","visibility":"public"},{"canonicalName":"PoolRoleAccounts","documentation":{"id":2272,"nodeType":"StructuredDocumentation","src":"4681:461:16","text":" @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)"},"id":2279,"members":[{"constant":false,"id":2274,"mutability":"mutable","name":"pauseManager","nameLocation":"5181:12:16","nodeType":"VariableDeclaration","scope":2279,"src":"5173:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2273,"name":"address","nodeType":"ElementaryTypeName","src":"5173:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2276,"mutability":"mutable","name":"swapFeeManager","nameLocation":"5207:14:16","nodeType":"VariableDeclaration","scope":2279,"src":"5199:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2275,"name":"address","nodeType":"ElementaryTypeName","src":"5199:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2278,"mutability":"mutable","name":"poolCreator","nameLocation":"5235:11:16","nodeType":"VariableDeclaration","scope":2279,"src":"5227:19:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2277,"name":"address","nodeType":"ElementaryTypeName","src":"5227:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"PoolRoleAccounts","nameLocation":"5150:16:16","nodeType":"StructDefinition","scope":2474,"src":"5143:106:16","visibility":"public"},{"canonicalName":"TokenType","documentation":{"id":2280,"nodeType":"StructuredDocumentation","src":"9245:1024:16","text":" @notice Token types supported by the Vault.\n @dev In general, pools may contain any combination of these tokens.\n STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n yield fees are charged elsewhere).\n NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard."},"id":2283,"members":[{"id":2281,"name":"STANDARD","nameLocation":"10291:8:16","nodeType":"EnumValue","src":"10291:8:16"},{"id":2282,"name":"WITH_RATE","nameLocation":"10305:9:16","nodeType":"EnumValue","src":"10305:9:16"}],"name":"TokenType","nameLocation":"10275:9:16","nodeType":"EnumDefinition","src":"10270:46:16"},{"canonicalName":"TokenConfig","documentation":{"id":2284,"nodeType":"StructuredDocumentation","src":"10318:915:16","text":" @notice Encapsulate the data required for the Vault to support a token of the given type.\n @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n need a rate provider, and may or may not be yield-bearing.\n At registration time, it is useful to include the token address along with the token parameters in the structure\n passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n @param token The token address\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":2296,"members":[{"constant":false,"id":2287,"mutability":"mutable","name":"token","nameLocation":"11266:5:16","nodeType":"VariableDeclaration","scope":2296,"src":"11259:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":2286,"nodeType":"UserDefinedTypeName","pathNode":{"id":2285,"name":"IERC20","nameLocations":["11259:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"11259:6:16"},"referencedDeclaration":6980,"src":"11259:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2290,"mutability":"mutable","name":"tokenType","nameLocation":"11287:9:16","nodeType":"VariableDeclaration","scope":2296,"src":"11277:19:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2283","typeString":"enum TokenType"},"typeName":{"id":2289,"nodeType":"UserDefinedTypeName","pathNode":{"id":2288,"name":"TokenType","nameLocations":["11277:9:16"],"nodeType":"IdentifierPath","referencedDeclaration":2283,"src":"11277:9:16"},"referencedDeclaration":2283,"src":"11277:9:16","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2283","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":2293,"mutability":"mutable","name":"rateProvider","nameLocation":"11316:12:16","nodeType":"VariableDeclaration","scope":2296,"src":"11302:26:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"},"typeName":{"id":2292,"nodeType":"UserDefinedTypeName","pathNode":{"id":2291,"name":"IRateProvider","nameLocations":["11302:13:16"],"nodeType":"IdentifierPath","referencedDeclaration":24,"src":"11302:13:16"},"referencedDeclaration":24,"src":"11302:13:16","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":2295,"mutability":"mutable","name":"paysYieldFees","nameLocation":"11339:13:16","nodeType":"VariableDeclaration","scope":2296,"src":"11334:18:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2294,"name":"bool","nodeType":"ElementaryTypeName","src":"11334:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenConfig","nameLocation":"11241:11:16","nodeType":"StructDefinition","scope":2474,"src":"11234:121:16","visibility":"public"},{"canonicalName":"TokenInfo","documentation":{"id":2297,"nodeType":"StructuredDocumentation","src":"11357:592:16","text":" @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":2306,"members":[{"constant":false,"id":2300,"mutability":"mutable","name":"tokenType","nameLocation":"11983:9:16","nodeType":"VariableDeclaration","scope":2306,"src":"11973:19:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2283","typeString":"enum TokenType"},"typeName":{"id":2299,"nodeType":"UserDefinedTypeName","pathNode":{"id":2298,"name":"TokenType","nameLocations":["11973:9:16"],"nodeType":"IdentifierPath","referencedDeclaration":2283,"src":"11973:9:16"},"referencedDeclaration":2283,"src":"11973:9:16","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2283","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":2303,"mutability":"mutable","name":"rateProvider","nameLocation":"12012:12:16","nodeType":"VariableDeclaration","scope":2306,"src":"11998:26:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"},"typeName":{"id":2302,"nodeType":"UserDefinedTypeName","pathNode":{"id":2301,"name":"IRateProvider","nameLocations":["11998:13:16"],"nodeType":"IdentifierPath","referencedDeclaration":24,"src":"11998:13:16"},"referencedDeclaration":24,"src":"11998:13:16","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":2305,"mutability":"mutable","name":"paysYieldFees","nameLocation":"12035:13:16","nodeType":"VariableDeclaration","scope":2306,"src":"12030:18:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2304,"name":"bool","nodeType":"ElementaryTypeName","src":"12030:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenInfo","nameLocation":"11957:9:16","nodeType":"StructDefinition","scope":2474,"src":"11950:101:16","visibility":"public"},{"canonicalName":"PoolData","documentation":{"id":2307,"nodeType":"StructuredDocumentation","src":"12053:761:16","text":" @notice Data structure used to represent the current pool state in memory\n @param poolConfigBits Custom type to store the entire configuration of the pool.\n @param tokens Pool tokens, sorted in token registration order\n @param tokenInfo Configuration data for each token, sorted in token registration order\n @param balancesRaw Token balances in native decimals\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. It is 1e18 (FP 1) for 18-decimal tokens"},"id":2331,"members":[{"constant":false,"id":2310,"mutability":"mutable","name":"poolConfigBits","nameLocation":"12852:14:16","nodeType":"VariableDeclaration","scope":2331,"src":"12837:29:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":2309,"nodeType":"UserDefinedTypeName","pathNode":{"id":2308,"name":"PoolConfigBits","nameLocations":["12837:14:16"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"12837:14:16"},"referencedDeclaration":2184,"src":"12837:14:16","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":2314,"mutability":"mutable","name":"tokens","nameLocation":"12881:6:16","nodeType":"VariableDeclaration","scope":2331,"src":"12872:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2312,"nodeType":"UserDefinedTypeName","pathNode":{"id":2311,"name":"IERC20","nameLocations":["12872:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"12872:6:16"},"referencedDeclaration":6980,"src":"12872:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":2313,"nodeType":"ArrayTypeName","src":"12872:8:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":2318,"mutability":"mutable","name":"tokenInfo","nameLocation":"12905:9:16","nodeType":"VariableDeclaration","scope":2331,"src":"12893:21:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2306_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":2316,"nodeType":"UserDefinedTypeName","pathNode":{"id":2315,"name":"TokenInfo","nameLocations":["12893:9:16"],"nodeType":"IdentifierPath","referencedDeclaration":2306,"src":"12893:9:16"},"referencedDeclaration":2306,"src":"12893:9:16","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2306_storage_ptr","typeString":"struct TokenInfo"}},"id":2317,"nodeType":"ArrayTypeName","src":"12893:11:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2306_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":2321,"mutability":"mutable","name":"balancesRaw","nameLocation":"12930:11:16","nodeType":"VariableDeclaration","scope":2331,"src":"12920:21:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2319,"name":"uint256","nodeType":"ElementaryTypeName","src":"12920:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2320,"nodeType":"ArrayTypeName","src":"12920:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2324,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"12957:20:16","nodeType":"VariableDeclaration","scope":2331,"src":"12947:30:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2322,"name":"uint256","nodeType":"ElementaryTypeName","src":"12947:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2323,"nodeType":"ArrayTypeName","src":"12947:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2327,"mutability":"mutable","name":"tokenRates","nameLocation":"12993:10:16","nodeType":"VariableDeclaration","scope":2331,"src":"12983:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2325,"name":"uint256","nodeType":"ElementaryTypeName","src":"12983:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2326,"nodeType":"ArrayTypeName","src":"12983:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2330,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"13019:21:16","nodeType":"VariableDeclaration","scope":2331,"src":"13009:31:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2328,"name":"uint256","nodeType":"ElementaryTypeName","src":"13009:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2329,"nodeType":"ArrayTypeName","src":"13009:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"name":"PoolData","nameLocation":"12822:8:16","nodeType":"StructDefinition","scope":2474,"src":"12815:228:16","visibility":"public"},{"canonicalName":"Rounding","id":2334,"members":[{"id":2332,"name":"ROUND_UP","nameLocation":"13065:8:16","nodeType":"EnumValue","src":"13065:8:16"},{"id":2333,"name":"ROUND_DOWN","nameLocation":"13079:10:16","nodeType":"EnumValue","src":"13079:10:16"}],"name":"Rounding","nameLocation":"13050:8:16","nodeType":"EnumDefinition","src":"13045:46:16"},{"canonicalName":"SwapKind","id":2337,"members":[{"id":2335,"name":"EXACT_IN","nameLocation":"13318:8:16","nodeType":"EnumValue","src":"13318:8:16"},{"id":2336,"name":"EXACT_OUT","nameLocation":"13332:9:16","nodeType":"EnumValue","src":"13332:9:16"}],"name":"SwapKind","nameLocation":"13303:8:16","nodeType":"EnumDefinition","src":"13298:45:16"},{"canonicalName":"VaultSwapParams","documentation":{"id":2338,"nodeType":"StructuredDocumentation","src":"14089:558:16","text":" @notice Data passed into primary Vault `swap` operations.\n @param kind Type of swap (Exact In or Exact Out)\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n @param userData Additional (optional) user data"},"id":2356,"members":[{"constant":false,"id":2341,"mutability":"mutable","name":"kind","nameLocation":"14686:4:16","nodeType":"VariableDeclaration","scope":2356,"src":"14677:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},"typeName":{"id":2340,"nodeType":"UserDefinedTypeName","pathNode":{"id":2339,"name":"SwapKind","nameLocations":["14677:8:16"],"nodeType":"IdentifierPath","referencedDeclaration":2337,"src":"14677:8:16"},"referencedDeclaration":2337,"src":"14677:8:16","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2343,"mutability":"mutable","name":"pool","nameLocation":"14704:4:16","nodeType":"VariableDeclaration","scope":2356,"src":"14696:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2342,"name":"address","nodeType":"ElementaryTypeName","src":"14696:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2346,"mutability":"mutable","name":"tokenIn","nameLocation":"14721:7:16","nodeType":"VariableDeclaration","scope":2356,"src":"14714:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":2345,"nodeType":"UserDefinedTypeName","pathNode":{"id":2344,"name":"IERC20","nameLocations":["14714:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"14714:6:16"},"referencedDeclaration":6980,"src":"14714:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2349,"mutability":"mutable","name":"tokenOut","nameLocation":"14741:8:16","nodeType":"VariableDeclaration","scope":2356,"src":"14734:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":2348,"nodeType":"UserDefinedTypeName","pathNode":{"id":2347,"name":"IERC20","nameLocations":["14734:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"14734:6:16"},"referencedDeclaration":6980,"src":"14734:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2351,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"14763:14:16","nodeType":"VariableDeclaration","scope":2356,"src":"14755:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2350,"name":"uint256","nodeType":"ElementaryTypeName","src":"14755:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2353,"mutability":"mutable","name":"limitRaw","nameLocation":"14791:8:16","nodeType":"VariableDeclaration","scope":2356,"src":"14783:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2352,"name":"uint256","nodeType":"ElementaryTypeName","src":"14783:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2355,"mutability":"mutable","name":"userData","nameLocation":"14811:8:16","nodeType":"VariableDeclaration","scope":2356,"src":"14805:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2354,"name":"bytes","nodeType":"ElementaryTypeName","src":"14805:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"VaultSwapParams","nameLocation":"14655:15:16","nodeType":"StructDefinition","scope":2474,"src":"14648:174:16","visibility":"public"},{"canonicalName":"PoolSwapParams","documentation":{"id":2357,"nodeType":"StructuredDocumentation","src":"14824:530:16","text":" @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n @param kind Type of swap (exact in or exact out)\n @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n @param balancesScaled18 Current pool balances\n @param indexIn Index of tokenIn\n @param indexOut Index of tokenOut\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param userData Additional (optional) data required for the swap"},"id":2374,"members":[{"constant":false,"id":2360,"mutability":"mutable","name":"kind","nameLocation":"15392:4:16","nodeType":"VariableDeclaration","scope":2374,"src":"15383:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},"typeName":{"id":2359,"nodeType":"UserDefinedTypeName","pathNode":{"id":2358,"name":"SwapKind","nameLocations":["15383:8:16"],"nodeType":"IdentifierPath","referencedDeclaration":2337,"src":"15383:8:16"},"referencedDeclaration":2337,"src":"15383:8:16","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2362,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"15410:19:16","nodeType":"VariableDeclaration","scope":2374,"src":"15402:27:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2361,"name":"uint256","nodeType":"ElementaryTypeName","src":"15402:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2365,"mutability":"mutable","name":"balancesScaled18","nameLocation":"15445:16:16","nodeType":"VariableDeclaration","scope":2374,"src":"15435:26:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2363,"name":"uint256","nodeType":"ElementaryTypeName","src":"15435:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2364,"nodeType":"ArrayTypeName","src":"15435:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2367,"mutability":"mutable","name":"indexIn","nameLocation":"15475:7:16","nodeType":"VariableDeclaration","scope":2374,"src":"15467:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2366,"name":"uint256","nodeType":"ElementaryTypeName","src":"15467:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2369,"mutability":"mutable","name":"indexOut","nameLocation":"15496:8:16","nodeType":"VariableDeclaration","scope":2374,"src":"15488:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2368,"name":"uint256","nodeType":"ElementaryTypeName","src":"15488:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2371,"mutability":"mutable","name":"router","nameLocation":"15518:6:16","nodeType":"VariableDeclaration","scope":2374,"src":"15510:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2370,"name":"address","nodeType":"ElementaryTypeName","src":"15510:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2373,"mutability":"mutable","name":"userData","nameLocation":"15536:8:16","nodeType":"VariableDeclaration","scope":2374,"src":"15530:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2372,"name":"bytes","nodeType":"ElementaryTypeName","src":"15530:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"PoolSwapParams","nameLocation":"15362:14:16","nodeType":"StructDefinition","scope":2474,"src":"15355:192:16","visibility":"public"},{"canonicalName":"AfterSwapParams","documentation":{"id":2375,"nodeType":"StructuredDocumentation","src":"15549:813:16","text":" @notice Data for the hook after a swap operation.\n @param kind Type of swap (exact in or exact out)\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param amountInScaled18 Amount of tokenIn (entering the Vault)\n @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n @param amountCalculatedScaled18 Token amount calculated by the swap\n @param amountCalculatedRaw Token amount calculated by the swap\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param pool Pool address\n @param userData Additional (optional) data required for the swap"},"id":2403,"members":[{"constant":false,"id":2378,"mutability":"mutable","name":"kind","nameLocation":"16401:4:16","nodeType":"VariableDeclaration","scope":2403,"src":"16392:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},"typeName":{"id":2377,"nodeType":"UserDefinedTypeName","pathNode":{"id":2376,"name":"SwapKind","nameLocations":["16392:8:16"],"nodeType":"IdentifierPath","referencedDeclaration":2337,"src":"16392:8:16"},"referencedDeclaration":2337,"src":"16392:8:16","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2381,"mutability":"mutable","name":"tokenIn","nameLocation":"16418:7:16","nodeType":"VariableDeclaration","scope":2403,"src":"16411:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":2380,"nodeType":"UserDefinedTypeName","pathNode":{"id":2379,"name":"IERC20","nameLocations":["16411:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"16411:6:16"},"referencedDeclaration":6980,"src":"16411:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2384,"mutability":"mutable","name":"tokenOut","nameLocation":"16438:8:16","nodeType":"VariableDeclaration","scope":2403,"src":"16431:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":2383,"nodeType":"UserDefinedTypeName","pathNode":{"id":2382,"name":"IERC20","nameLocations":["16431:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"16431:6:16"},"referencedDeclaration":6980,"src":"16431:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2386,"mutability":"mutable","name":"amountInScaled18","nameLocation":"16460:16:16","nodeType":"VariableDeclaration","scope":2403,"src":"16452:24:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2385,"name":"uint256","nodeType":"ElementaryTypeName","src":"16452:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2388,"mutability":"mutable","name":"amountOutScaled18","nameLocation":"16490:17:16","nodeType":"VariableDeclaration","scope":2403,"src":"16482:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2387,"name":"uint256","nodeType":"ElementaryTypeName","src":"16482:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2390,"mutability":"mutable","name":"tokenInBalanceScaled18","nameLocation":"16521:22:16","nodeType":"VariableDeclaration","scope":2403,"src":"16513:30:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2389,"name":"uint256","nodeType":"ElementaryTypeName","src":"16513:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2392,"mutability":"mutable","name":"tokenOutBalanceScaled18","nameLocation":"16557:23:16","nodeType":"VariableDeclaration","scope":2403,"src":"16549:31:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2391,"name":"uint256","nodeType":"ElementaryTypeName","src":"16549:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2394,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"16594:24:16","nodeType":"VariableDeclaration","scope":2403,"src":"16586:32:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2393,"name":"uint256","nodeType":"ElementaryTypeName","src":"16586:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2396,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"16632:19:16","nodeType":"VariableDeclaration","scope":2403,"src":"16624:27:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2395,"name":"uint256","nodeType":"ElementaryTypeName","src":"16624:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2398,"mutability":"mutable","name":"router","nameLocation":"16665:6:16","nodeType":"VariableDeclaration","scope":2403,"src":"16657:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2397,"name":"address","nodeType":"ElementaryTypeName","src":"16657:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2400,"mutability":"mutable","name":"pool","nameLocation":"16685:4:16","nodeType":"VariableDeclaration","scope":2403,"src":"16677:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2399,"name":"address","nodeType":"ElementaryTypeName","src":"16677:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2402,"mutability":"mutable","name":"userData","nameLocation":"16701:8:16","nodeType":"VariableDeclaration","scope":2403,"src":"16695:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2401,"name":"bytes","nodeType":"ElementaryTypeName","src":"16695:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AfterSwapParams","nameLocation":"16370:15:16","nodeType":"StructDefinition","scope":2474,"src":"16363:349:16","visibility":"public"},{"canonicalName":"AddLiquidityKind","id":2409,"members":[{"id":2404,"name":"PROPORTIONAL","nameLocation":"16951:12:16","nodeType":"EnumValue","src":"16951:12:16"},{"id":2405,"name":"UNBALANCED","nameLocation":"16969:10:16","nodeType":"EnumValue","src":"16969:10:16"},{"id":2406,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"16985:22:16","nodeType":"EnumValue","src":"16985:22:16"},{"id":2407,"name":"DONATION","nameLocation":"17013:8:16","nodeType":"EnumValue","src":"17013:8:16"},{"id":2408,"name":"CUSTOM","nameLocation":"17027:6:16","nodeType":"EnumValue","src":"17027:6:16"}],"name":"AddLiquidityKind","nameLocation":"16928:16:16","nodeType":"EnumDefinition","src":"16923:112:16"},{"canonicalName":"AddLiquidityParams","documentation":{"id":2410,"nodeType":"StructuredDocumentation","src":"17037:320:16","text":" @notice Data for an add liquidity operation.\n @param pool Address of the pool\n @param to Address of user to mint to\n @param maxAmountsIn Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param kind Add liquidity kind\n @param userData Optional user data"},"id":2425,"members":[{"constant":false,"id":2412,"mutability":"mutable","name":"pool","nameLocation":"17398:4:16","nodeType":"VariableDeclaration","scope":2425,"src":"17390:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2411,"name":"address","nodeType":"ElementaryTypeName","src":"17390:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2414,"mutability":"mutable","name":"to","nameLocation":"17416:2:16","nodeType":"VariableDeclaration","scope":2425,"src":"17408:10:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2413,"name":"address","nodeType":"ElementaryTypeName","src":"17408:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2417,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"17434:12:16","nodeType":"VariableDeclaration","scope":2425,"src":"17424:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2415,"name":"uint256","nodeType":"ElementaryTypeName","src":"17424:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2416,"nodeType":"ArrayTypeName","src":"17424:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2419,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"17460:15:16","nodeType":"VariableDeclaration","scope":2425,"src":"17452:23:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2418,"name":"uint256","nodeType":"ElementaryTypeName","src":"17452:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2422,"mutability":"mutable","name":"kind","nameLocation":"17498:4:16","nodeType":"VariableDeclaration","scope":2425,"src":"17481:21:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"},"typeName":{"id":2421,"nodeType":"UserDefinedTypeName","pathNode":{"id":2420,"name":"AddLiquidityKind","nameLocations":["17481:16:16"],"nodeType":"IdentifierPath","referencedDeclaration":2409,"src":"17481:16:16"},"referencedDeclaration":2409,"src":"17481:16:16","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":2424,"mutability":"mutable","name":"userData","nameLocation":"17514:8:16","nodeType":"VariableDeclaration","scope":2425,"src":"17508:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2423,"name":"bytes","nodeType":"ElementaryTypeName","src":"17508:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AddLiquidityParams","nameLocation":"17365:18:16","nodeType":"StructDefinition","scope":2474,"src":"17358:167:16","visibility":"public"},{"canonicalName":"RemoveLiquidityKind","id":2430,"members":[{"id":2426,"name":"PROPORTIONAL","nameLocation":"17770:12:16","nodeType":"EnumValue","src":"17770:12:16"},{"id":2427,"name":"SINGLE_TOKEN_EXACT_IN","nameLocation":"17788:21:16","nodeType":"EnumValue","src":"17788:21:16"},{"id":2428,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"17815:22:16","nodeType":"EnumValue","src":"17815:22:16"},{"id":2429,"name":"CUSTOM","nameLocation":"17843:6:16","nodeType":"EnumValue","src":"17843:6:16"}],"name":"RemoveLiquidityKind","nameLocation":"17744:19:16","nodeType":"EnumDefinition","src":"17739:112:16"},{"canonicalName":"RemoveLiquidityParams","documentation":{"id":2431,"nodeType":"StructuredDocumentation","src":"17853:330:16","text":" @notice Data for an remove liquidity operation.\n @param pool Address of the pool\n @param from Address of user to burn from\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOut Minimum amounts of output tokens\n @param kind Remove liquidity kind\n @param userData Optional user data"},"id":2446,"members":[{"constant":false,"id":2433,"mutability":"mutable","name":"pool","nameLocation":"18227:4:16","nodeType":"VariableDeclaration","scope":2446,"src":"18219:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2432,"name":"address","nodeType":"ElementaryTypeName","src":"18219:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2435,"mutability":"mutable","name":"from","nameLocation":"18245:4:16","nodeType":"VariableDeclaration","scope":2446,"src":"18237:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2434,"name":"address","nodeType":"ElementaryTypeName","src":"18237:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2437,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"18263:14:16","nodeType":"VariableDeclaration","scope":2446,"src":"18255:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2436,"name":"uint256","nodeType":"ElementaryTypeName","src":"18255:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2440,"mutability":"mutable","name":"minAmountsOut","nameLocation":"18293:13:16","nodeType":"VariableDeclaration","scope":2446,"src":"18283:23:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2438,"name":"uint256","nodeType":"ElementaryTypeName","src":"18283:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2439,"nodeType":"ArrayTypeName","src":"18283:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2443,"mutability":"mutable","name":"kind","nameLocation":"18332:4:16","nodeType":"VariableDeclaration","scope":2446,"src":"18312:24:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":2442,"nodeType":"UserDefinedTypeName","pathNode":{"id":2441,"name":"RemoveLiquidityKind","nameLocations":["18312:19:16"],"nodeType":"IdentifierPath","referencedDeclaration":2430,"src":"18312:19:16"},"referencedDeclaration":2430,"src":"18312:19:16","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":2445,"mutability":"mutable","name":"userData","nameLocation":"18348:8:16","nodeType":"VariableDeclaration","scope":2446,"src":"18342:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2444,"name":"bytes","nodeType":"ElementaryTypeName","src":"18342:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"RemoveLiquidityParams","nameLocation":"18191:21:16","nodeType":"StructDefinition","scope":2474,"src":"18184:175:16","visibility":"public"},{"canonicalName":"WrappingDirection","id":2449,"members":[{"id":2447,"name":"WRAP","nameLocation":"18602:4:16","nodeType":"EnumValue","src":"18602:4:16"},{"id":2448,"name":"UNWRAP","nameLocation":"18612:6:16","nodeType":"EnumValue","src":"18612:6:16"}],"name":"WrappingDirection","nameLocation":"18578:17:16","nodeType":"EnumDefinition","src":"18573:47:16"},{"canonicalName":"BufferWrapOrUnwrapParams","documentation":{"id":2450,"nodeType":"StructuredDocumentation","src":"18622:499:16","text":" @notice Data for a wrap/unwrap operation.\n @param kind Type of swap (Exact In or Exact Out)\n @param direction Direction of the wrapping operation (Wrap or Unwrap)\n @param wrappedToken Wrapped token, compatible with interface ERC4626\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n direction)"},"id":2464,"members":[{"constant":false,"id":2453,"mutability":"mutable","name":"kind","nameLocation":"19169:4:16","nodeType":"VariableDeclaration","scope":2464,"src":"19160:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},"typeName":{"id":2452,"nodeType":"UserDefinedTypeName","pathNode":{"id":2451,"name":"SwapKind","nameLocations":["19160:8:16"],"nodeType":"IdentifierPath","referencedDeclaration":2337,"src":"19160:8:16"},"referencedDeclaration":2337,"src":"19160:8:16","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2456,"mutability":"mutable","name":"direction","nameLocation":"19197:9:16","nodeType":"VariableDeclaration","scope":2464,"src":"19179:27:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$2449","typeString":"enum WrappingDirection"},"typeName":{"id":2455,"nodeType":"UserDefinedTypeName","pathNode":{"id":2454,"name":"WrappingDirection","nameLocations":["19179:17:16"],"nodeType":"IdentifierPath","referencedDeclaration":2449,"src":"19179:17:16"},"referencedDeclaration":2449,"src":"19179:17:16","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$2449","typeString":"enum WrappingDirection"}},"visibility":"internal"},{"constant":false,"id":2459,"mutability":"mutable","name":"wrappedToken","nameLocation":"19221:12:16","nodeType":"VariableDeclaration","scope":2464,"src":"19212:21:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":2458,"nodeType":"UserDefinedTypeName","pathNode":{"id":2457,"name":"IERC4626","nameLocations":["19212:8:16"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"19212:8:16"},"referencedDeclaration":6704,"src":"19212:8:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2461,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"19247:14:16","nodeType":"VariableDeclaration","scope":2464,"src":"19239:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2460,"name":"uint256","nodeType":"ElementaryTypeName","src":"19239:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2463,"mutability":"mutable","name":"limitRaw","nameLocation":"19275:8:16","nodeType":"VariableDeclaration","scope":2464,"src":"19267:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2462,"name":"uint256","nodeType":"ElementaryTypeName","src":"19267:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"BufferWrapOrUnwrapParams","nameLocation":"19129:24:16","nodeType":"StructDefinition","scope":2474,"src":"19122:164:16","visibility":"public"},{"constant":true,"id":2467,"mutability":"constant","name":"FEE_BITLENGTH","nameLocation":"19611:13:16","nodeType":"VariableDeclaration","scope":2474,"src":"19594:35:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2465,"name":"uint256","nodeType":"ElementaryTypeName","src":"19594:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3234","id":2466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19627:2:16","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},"visibility":"internal"},{"constant":true,"id":2470,"mutability":"constant","name":"FEE_SCALING_FACTOR","nameLocation":"19648:18:16","nodeType":"VariableDeclaration","scope":2474,"src":"19631:42:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2468,"name":"uint256","nodeType":"ElementaryTypeName","src":"19631:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653131","id":2469,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19669:4:16","typeDescriptions":{"typeIdentifier":"t_rational_100000000000_by_1","typeString":"int_const 100000000000"},"value":"1e11"},"visibility":"internal"},{"constant":true,"id":2473,"mutability":"constant","name":"MAX_FEE_PERCENTAGE","nameLocation":"19896:18:16","nodeType":"VariableDeclaration","scope":2474,"src":"19879:48:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2471,"name":"uint256","nodeType":"ElementaryTypeName","src":"19879:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e39393939653136","id":2472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19917:10:16","typeDescriptions":{"typeIdentifier":"t_rational_999999000000000000_by_1","typeString":"int_const 999999000000000000"},"value":"99.9999e16"},"visibility":"internal"}],"src":"46:19895:16"},"id":16},"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol","exportedSymbols":{"BufferHelpers":[2585],"IERC4626":[6704],"PackedTokenBalance":[3032],"SafeCast":[11729]},"id":2586,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2475,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:17"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2477,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2586,"sourceUnit":6705,"src":"72:75:17","symbolAliases":[{"foreign":{"id":2476,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6704,"src":"81:8:17","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":2479,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2586,"sourceUnit":11730,"src":"148:75:17","symbolAliases":[{"foreign":{"id":2478,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11729,"src":"157:8:17","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","file":"./PackedTokenBalance.sol","id":2481,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2586,"sourceUnit":3033,"src":"225:62:17","symbolAliases":[{"foreign":{"id":2480,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3032,"src":"234:18:17","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"BufferHelpers","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":2585,"linearizedBaseContracts":[2585],"name":"BufferHelpers","nameLocation":"297:13:17","nodeType":"ContractDefinition","nodes":[{"global":false,"id":2484,"libraryName":{"id":2482,"name":"PackedTokenBalance","nameLocations":["323:18:17"],"nodeType":"IdentifierPath","referencedDeclaration":3032,"src":"323:18:17"},"nodeType":"UsingForDirective","src":"317:37:17","typeName":{"id":2483,"name":"bytes32","nodeType":"ElementaryTypeName","src":"346:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"global":false,"id":2486,"libraryName":{"id":2485,"name":"SafeCast","nameLocations":["365:8:17"],"nodeType":"IdentifierPath","referencedDeclaration":11729,"src":"365:8:17"},"nodeType":"UsingForDirective","src":"359:21:17"},{"body":{"id":2534,"nodeType":"Block","src":"1759:785:17","statements":[{"assignments":[2498],"declarations":[{"constant":false,"id":2498,"mutability":"mutable","name":"underlyingBalance","nameLocation":"1776:17:17","nodeType":"VariableDeclaration","scope":2534,"src":"1769:24:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2497,"name":"int256","nodeType":"ElementaryTypeName","src":"1769:6:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":2504,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2499,"name":"bufferBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2489,"src":"1796:13:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1810:13:17","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":2910,"src":"1796:27:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":2501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1796:29:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1826:8:17","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":11728,"src":"1796:38:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":2503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1796:40:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"1769:67:17"},{"assignments":[2506],"declarations":[{"constant":false,"id":2506,"mutability":"mutable","name":"wrappedBalanceAsUnderlying","nameLocation":"1854:26:17","nodeType":"VariableDeclaration","scope":2534,"src":"1847:33:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2505,"name":"int256","nodeType":"ElementaryTypeName","src":"1847:6:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":2508,"initialValue":{"hexValue":"30","id":2507,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1883:1:17","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1847:37:17"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2509,"name":"bufferBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2489,"src":"1898:13:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1912:17:17","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":2927,"src":"1898:31:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":2511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1898:33:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2512,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1934:1:17","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1898:37:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2526,"nodeType":"IfStatement","src":"1894:474:17","trueBody":{"id":2525,"nodeType":"Block","src":"1937:431:17","statements":[{"expression":{"id":2523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2514,"name":"wrappedBalanceAsUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2506,"src":"2258:26:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2517,"name":"bufferBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2489,"src":"2312:13:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2326:17:17","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":2927,"src":"2312:31:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":2519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2312:33:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2515,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2492,"src":"2287:12:17","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"id":2516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2300:11:17","memberName":"previewMint","nodeType":"MemberAccess","referencedDeclaration":6637,"src":"2287:24:17","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":2520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2287:59:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2347:8:17","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":11728,"src":"2287:68:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":2522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2287:70:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"2258:99:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":2524,"nodeType":"ExpressionStatement","src":"2258:99:17"}]}},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":2532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":2529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2527,"name":"underlyingBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2498,"src":"2486:17:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":2528,"name":"wrappedBalanceAsUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2506,"src":"2506:26:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"2486:46:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":2530,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2485:48:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":2531,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2536:1:17","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"2485:52:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":2496,"id":2533,"nodeType":"Return","src":"2478:59:17"}]},"documentation":{"id":2487,"nodeType":"StructuredDocumentation","src":"386:1253:17","text":" @notice Returns the imbalance of a buffer in terms of the underlying asset.\n @dev The imbalance refers to the difference between the buffer's underlying asset balance and its wrapped asset\n balance, both expressed in terms of the underlying asset. A positive imbalance means the buffer holds more\n underlying assets than wrapped assets, indicating that the excess underlying should be wrapped to restore\n balance. Conversely, a negative imbalance means the buffer has more wrapped assets than underlying assets, so\n during a wrap operation, fewer underlying tokens need to be wrapped, and the surplus wrapped tokens can be\n returned to the caller.\n For instance, consider the following scenario:\n - buffer balances: 2 wrapped and 10 underlying\n - wrapped rate: 2\n - normalized buffer balances: 4 wrapped as underlying (2 wrapped * rate) and 10 underlying\n - underlying token imbalance = (10 - 4) / 2 = 3 underlying\n We need to wrap 3 underlying tokens to rebalance the buffer.\n - 3 underlying = 1.5 wrapped\n - final balances: 3.5 wrapped (2 existing + 1.5 new) and 7 underlying (10 existing - 3)\n These balances are equal value, given the rate."},"id":2535,"implemented":true,"kind":"function","modifiers":[],"name":"getBufferUnderlyingImbalance","nameLocation":"1653:28:17","nodeType":"FunctionDefinition","parameters":{"id":2493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2489,"mutability":"mutable","name":"bufferBalance","nameLocation":"1690:13:17","nodeType":"VariableDeclaration","scope":2535,"src":"1682:21:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2488,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1682:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2492,"mutability":"mutable","name":"wrappedToken","nameLocation":"1714:12:17","nodeType":"VariableDeclaration","scope":2535,"src":"1705:21:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":2491,"nodeType":"UserDefinedTypeName","pathNode":{"id":2490,"name":"IERC4626","nameLocations":["1705:8:17"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"1705:8:17"},"referencedDeclaration":6704,"src":"1705:8:17","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"1681:46:17"},"returnParameters":{"id":2496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2495,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2535,"src":"1751:6:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2494,"name":"int256","nodeType":"ElementaryTypeName","src":"1751:6:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1750:8:17"},"scope":2585,"src":"1644:900:17","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2583,"nodeType":"Block","src":"3903:785:17","statements":[{"assignments":[2547],"declarations":[{"constant":false,"id":2547,"mutability":"mutable","name":"wrappedBalance","nameLocation":"3920:14:17","nodeType":"VariableDeclaration","scope":2583,"src":"3913:21:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2546,"name":"int256","nodeType":"ElementaryTypeName","src":"3913:6:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":2553,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2548,"name":"bufferBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2538,"src":"3937:13:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3951:17:17","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":2927,"src":"3937:31:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":2550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3937:33:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3971:8:17","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":11728,"src":"3937:42:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":2552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3937:44:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"3913:68:17"},{"assignments":[2555],"declarations":[{"constant":false,"id":2555,"mutability":"mutable","name":"underlyingBalanceAsWrapped","nameLocation":"3999:26:17","nodeType":"VariableDeclaration","scope":2583,"src":"3992:33:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2554,"name":"int256","nodeType":"ElementaryTypeName","src":"3992:6:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":2557,"initialValue":{"hexValue":"30","id":2556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4028:1:17","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3992:37:17"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2558,"name":"bufferBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2538,"src":"4043:13:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4057:13:17","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":2910,"src":"4043:27:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":2560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4043:29:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2561,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4075:1:17","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4043:33:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2575,"nodeType":"IfStatement","src":"4039:476:17","trueBody":{"id":2574,"nodeType":"Block","src":"4078:437:17","statements":[{"expression":{"id":2572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2563,"name":"underlyingBalanceAsWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2555,"src":"4405:26:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2566,"name":"bufferBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2538,"src":"4463:13:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4477:13:17","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":2910,"src":"4463:27:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":2568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4463:29:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2564,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2541,"src":"4434:12:17","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"id":2565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4447:15:17","memberName":"previewWithdraw","nodeType":"MemberAccess","referencedDeclaration":6663,"src":"4434:28:17","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":2569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4434:59:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4494:8:17","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":11728,"src":"4434:68:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":2571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4434:70:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"4405:99:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":2573,"nodeType":"ExpressionStatement","src":"4405:99:17"}]}},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":2581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":2578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2576,"name":"wrappedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2547,"src":"4633:14:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":2577,"name":"underlyingBalanceAsWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2555,"src":"4650:26:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"4633:43:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":2579,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4632:45:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":2580,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4680:1:17","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4632:49:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":2545,"id":2582,"nodeType":"Return","src":"4625:56:17"}]},"documentation":{"id":2536,"nodeType":"StructuredDocumentation","src":"2550:1236:17","text":" @notice Returns the imbalance of a buffer in terms of the wrapped asset.\n @dev The imbalance refers to the difference between the buffer's underlying asset balance and its wrapped asset\n balance, both expressed in terms of the wrapped asset. A positive imbalance means the buffer holds more\n wrapped assets than underlying assets, indicating that the excess wrapped should be unwrapped to restore\n balance. Conversely, a negative imbalance means the buffer has more underlying assets than wrapped assets, so\n during an unwrap operation, fewer wrapped tokens need to be unwrapped, and the surplus underlying tokens can be\n returned to the caller.\n For instance, consider the following scenario:\n - buffer balances: 10 wrapped and 4 underlying\n - wrapped rate: 2\n - normalized buffer balances: 10 wrapped and 2 underlying as wrapped (2 underlying / rate)\n - imbalance of wrapped = (10 - 2) / 2 = 4 wrapped\n We need to unwrap 4 wrapped tokens to rebalance the buffer.\n - 4 wrapped = 8 underlying\n - final balances: 6 wrapped (10 existing - 4) and 12 underlying (4 existing + 8 new)\n These balances are equal value, given the rate."},"id":2584,"implemented":true,"kind":"function","modifiers":[],"name":"getBufferWrappedImbalance","nameLocation":"3800:25:17","nodeType":"FunctionDefinition","parameters":{"id":2542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2538,"mutability":"mutable","name":"bufferBalance","nameLocation":"3834:13:17","nodeType":"VariableDeclaration","scope":2584,"src":"3826:21:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2537,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3826:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2541,"mutability":"mutable","name":"wrappedToken","nameLocation":"3858:12:17","nodeType":"VariableDeclaration","scope":2584,"src":"3849:21:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":2540,"nodeType":"UserDefinedTypeName","pathNode":{"id":2539,"name":"IERC4626","nameLocations":["3849:8:17"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"3849:8:17"},"referencedDeclaration":6704,"src":"3849:8:17","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"3825:46:17"},"returnParameters":{"id":2545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2544,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2584,"src":"3895:6:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2543,"name":"int256","nodeType":"ElementaryTypeName","src":"3895:6:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"3894:8:17"},"scope":2585,"src":"3791:897:17","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":2586,"src":"289:4401:17","usedErrors":[],"usedEvents":[]}],"src":"46:4645:17"},"id":17},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","exportedSymbols":{"CastingHelpers":[2617],"IERC20":[6980]},"id":2618,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2587,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:18"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2589,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2618,"sourceUnit":6981,"src":"72:72:18","symbolAliases":[{"foreign":{"id":2588,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"81:6:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"CastingHelpers","contractDependencies":[],"contractKind":"library","documentation":{"id":2590,"nodeType":"StructuredDocumentation","src":"146:71:18","text":"@notice Library of helper functions related to typecasting arrays."},"fullyImplemented":true,"id":2617,"linearizedBaseContracts":[2617],"name":"CastingHelpers","nameLocation":"225:14:18","nodeType":"ContractDefinition","nodes":[{"body":{"id":2602,"nodeType":"Block","src":"410:140:18","statements":[{"AST":{"nativeSrc":"501:43:18","nodeType":"YulBlock","src":"501:43:18","statements":[{"nativeSrc":"515:19:18","nodeType":"YulAssignment","src":"515:19:18","value":{"name":"addresses","nativeSrc":"525:9:18","nodeType":"YulIdentifier","src":"525:9:18"},"variableNames":[{"name":"tokens","nativeSrc":"515:6:18","nodeType":"YulIdentifier","src":"515:6:18"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":2594,"isOffset":false,"isSlot":false,"src":"525:9:18","valueSize":1},{"declaration":2599,"isOffset":false,"isSlot":false,"src":"515:6:18","valueSize":1}],"flags":["memory-safe"],"id":2601,"nodeType":"InlineAssembly","src":"476:68:18"}]},"documentation":{"id":2591,"nodeType":"StructuredDocumentation","src":"246:66:18","text":"@dev Returns a native array of addresses as an IERC20[] array."},"id":2603,"implemented":true,"kind":"function","modifiers":[],"name":"asIERC20","nameLocation":"326:8:18","nodeType":"FunctionDefinition","parameters":{"id":2595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2594,"mutability":"mutable","name":"addresses","nameLocation":"352:9:18","nodeType":"VariableDeclaration","scope":2603,"src":"335:26:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":2592,"name":"address","nodeType":"ElementaryTypeName","src":"335:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2593,"nodeType":"ArrayTypeName","src":"335:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"334:28:18"},"returnParameters":{"id":2600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2599,"mutability":"mutable","name":"tokens","nameLocation":"402:6:18","nodeType":"VariableDeclaration","scope":2603,"src":"386:22:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2597,"nodeType":"UserDefinedTypeName","pathNode":{"id":2596,"name":"IERC20","nameLocations":["386:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"386:6:18"},"referencedDeclaration":6980,"src":"386:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":2598,"nodeType":"ArrayTypeName","src":"386:8:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"385:24:18"},"scope":2617,"src":"317:233:18","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2615,"nodeType":"Block","src":"712:140:18","statements":[{"AST":{"nativeSrc":"803:43:18","nodeType":"YulBlock","src":"803:43:18","statements":[{"nativeSrc":"817:19:18","nodeType":"YulAssignment","src":"817:19:18","value":{"name":"tokens","nativeSrc":"830:6:18","nodeType":"YulIdentifier","src":"830:6:18"},"variableNames":[{"name":"addresses","nativeSrc":"817:9:18","nodeType":"YulIdentifier","src":"817:9:18"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":2612,"isOffset":false,"isSlot":false,"src":"817:9:18","valueSize":1},{"declaration":2608,"isOffset":false,"isSlot":false,"src":"830:6:18","valueSize":1}],"flags":["memory-safe"],"id":2614,"nodeType":"InlineAssembly","src":"778:68:18"}]},"documentation":{"id":2604,"nodeType":"StructuredDocumentation","src":"556:57:18","text":"@dev Returns an IERC20[] array as an address[] array."},"id":2616,"implemented":true,"kind":"function","modifiers":[],"name":"asAddress","nameLocation":"627:9:18","nodeType":"FunctionDefinition","parameters":{"id":2609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2608,"mutability":"mutable","name":"tokens","nameLocation":"653:6:18","nodeType":"VariableDeclaration","scope":2616,"src":"637:22:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2606,"nodeType":"UserDefinedTypeName","pathNode":{"id":2605,"name":"IERC20","nameLocations":["637:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"637:6:18"},"referencedDeclaration":6980,"src":"637:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":2607,"nodeType":"ArrayTypeName","src":"637:8:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"636:24:18"},"returnParameters":{"id":2613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2612,"mutability":"mutable","name":"addresses","nameLocation":"701:9:18","nodeType":"VariableDeclaration","scope":2616,"src":"684:26:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":2610,"name":"address","nodeType":"ElementaryTypeName","src":"684:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2611,"nodeType":"ArrayTypeName","src":"684:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"683:28:18"},"scope":2617,"src":"618:234:18","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":2618,"src":"217:637:18","usedErrors":[],"usedEvents":[]}],"src":"46:809:18"},"id":18},"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol","exportedSymbols":{"EVMCallModeHelpers":[2639]},"id":2640,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2619,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:19"},{"abstract":false,"baseContracts":[],"canonicalName":"EVMCallModeHelpers","contractDependencies":[],"contractKind":"library","documentation":{"id":2620,"nodeType":"StructuredDocumentation","src":"72:101:19","text":"@notice Library used to check whether the current operation was initiated through a static call."},"fullyImplemented":true,"id":2639,"linearizedBaseContracts":[2639],"name":"EVMCallModeHelpers","nameLocation":"181:18:19","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2621,"nodeType":"StructuredDocumentation","src":"206:98:19","text":"@notice A state-changing transaction was initiated in a context that only allows static calls."},"errorSelector":"67f84ab2","id":2623,"name":"NotStaticCall","nameLocation":"315:13:19","nodeType":"ErrorDefinition","parameters":{"id":2622,"nodeType":"ParameterList","parameters":[],"src":"328:2:19"},"src":"309:22:19"},{"body":{"id":2637,"nodeType":"Block","src":"842:104:19","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2629,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"859:2:19","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":2630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"862:6:19","memberName":"origin","nodeType":"MemberAccess","src":"859:9:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2633,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"880:1:19","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":2632,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"872:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2631,"name":"address","nodeType":"ElementaryTypeName","src":"872:7:19","typeDescriptions":{}}},"id":2634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"872:10:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"859:23:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2628,"id":2636,"nodeType":"Return","src":"852:30:19"}]},"documentation":{"id":2624,"nodeType":"StructuredDocumentation","src":"337:447:19","text":" @dev Detects whether the current transaction is a static call.\n A static call is one where `tx.origin` equals 0x0 for most implementations.\n See this tweet for a table on how transaction parameters are set on different platforms:\n https://twitter.com/0xkarmacoma/status/1493380279309717505\n Solidity eth_call reference docs are here: https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_call"},"id":2638,"implemented":true,"kind":"function","modifiers":[],"name":"isStaticCall","nameLocation":"798:12:19","nodeType":"FunctionDefinition","parameters":{"id":2625,"nodeType":"ParameterList","parameters":[],"src":"810:2:19"},"returnParameters":{"id":2628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2627,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2638,"src":"836:4:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2626,"name":"bool","nodeType":"ElementaryTypeName","src":"836:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"835:6:19"},"scope":2639,"src":"789:157:19","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":2640,"src":"173:775:19","usedErrors":[2623],"usedEvents":[]}],"src":"46:903:19"},"id":19},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","exportedSymbols":{"CastingHelpers":[2617],"IERC20":[6980],"InputHelpers":[2881]},"id":2882,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2641,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:20"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2643,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2882,"sourceUnit":6981,"src":"72:72:20","symbolAliases":[{"foreign":{"id":2642,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"81:6:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","file":"./CastingHelpers.sol","id":2645,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2882,"sourceUnit":2618,"src":"146:54:20","symbolAliases":[{"foreign":{"id":2644,"name":"CastingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2617,"src":"155:14:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"InputHelpers","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":2881,"linearizedBaseContracts":[2881],"name":"InputHelpers","nameLocation":"210:12:20","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2646,"nodeType":"StructuredDocumentation","src":"229:91:20","text":"@notice Arrays passed to a function and intended to be parallel have different lengths."},"errorSelector":"aaad13f7","id":2648,"name":"InputLengthMismatch","nameLocation":"331:19:20","nodeType":"ErrorDefinition","parameters":{"id":2647,"nodeType":"ParameterList","parameters":[],"src":"350:2:20"},"src":"325:28:20"},{"documentation":{"id":2649,"nodeType":"StructuredDocumentation","src":"359:332:20","text":" @notice More than one non-zero value was given for a single token operation.\n @dev Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value,\n corresponding to the token being added or removed. This error results if there are multiple non-zero entries."},"errorSelector":"6b8c3be5","id":2651,"name":"MultipleNonZeroInputs","nameLocation":"702:21:20","nodeType":"ErrorDefinition","parameters":{"id":2650,"nodeType":"ParameterList","parameters":[],"src":"723:2:20"},"src":"696:30:20"},{"documentation":{"id":2652,"nodeType":"StructuredDocumentation","src":"732:298:20","text":" @notice No valid input was given for a single token operation.\n @dev Input arrays for single token add/remove liquidity operations are expected to have one non-zero value,\n corresponding to the token being added or removed. This error results if all entries are zero."},"errorSelector":"7e46bddc","id":2654,"name":"AllZeroInputs","nameLocation":"1041:13:20","nodeType":"ErrorDefinition","parameters":{"id":2653,"nodeType":"ParameterList","parameters":[],"src":"1054:2:20"},"src":"1035:22:20"},{"documentation":{"id":2655,"nodeType":"StructuredDocumentation","src":"1063:320:20","text":" @notice The tokens supplied to an array argument were not sorted in numerical order.\n @dev Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can\n predict the token order without having to query the Vault. (It is also legacy v2 behavior.)"},"errorSelector":"6e8f1947","id":2657,"name":"TokensNotSorted","nameLocation":"1394:15:20","nodeType":"ErrorDefinition","parameters":{"id":2656,"nodeType":"ParameterList","parameters":[],"src":"1409:2:20"},"src":"1388:24:20"},{"body":{"id":2672,"nodeType":"Block","src":"1486:81:20","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2664,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2659,"src":"1500:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2665,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2661,"src":"1505:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1500:6:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2671,"nodeType":"IfStatement","src":"1496:65:20","trueBody":{"id":2670,"nodeType":"Block","src":"1508:53:20","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2667,"name":"InputLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2648,"src":"1529:19:20","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1529:21:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2669,"nodeType":"RevertStatement","src":"1522:28:20"}]}}]},"id":2673,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInputLengthMatch","nameLocation":"1427:22:20","nodeType":"FunctionDefinition","parameters":{"id":2662,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2659,"mutability":"mutable","name":"a","nameLocation":"1458:1:20","nodeType":"VariableDeclaration","scope":2673,"src":"1450:9:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2658,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2661,"mutability":"mutable","name":"b","nameLocation":"1469:1:20","nodeType":"VariableDeclaration","scope":2673,"src":"1461:9:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2660,"name":"uint256","nodeType":"ElementaryTypeName","src":"1461:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1449:22:20"},"returnParameters":{"id":2663,"nodeType":"ParameterList","parameters":[],"src":"1486:0:20"},"scope":2881,"src":"1418:149:20","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2694,"nodeType":"Block","src":"1652:91:20","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2682,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2675,"src":"1666:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2683,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"1671:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1666:6:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2685,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"1676:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2686,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2679,"src":"1681:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1676:6:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1666:16:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2693,"nodeType":"IfStatement","src":"1662:75:20","trueBody":{"id":2692,"nodeType":"Block","src":"1684:53:20","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2689,"name":"InputLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2648,"src":"1705:19:20","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2690,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1705:21:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2691,"nodeType":"RevertStatement","src":"1698:28:20"}]}}]},"id":2695,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInputLengthMatch","nameLocation":"1582:22:20","nodeType":"FunctionDefinition","parameters":{"id":2680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2675,"mutability":"mutable","name":"a","nameLocation":"1613:1:20","nodeType":"VariableDeclaration","scope":2695,"src":"1605:9:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2674,"name":"uint256","nodeType":"ElementaryTypeName","src":"1605:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2677,"mutability":"mutable","name":"b","nameLocation":"1624:1:20","nodeType":"VariableDeclaration","scope":2695,"src":"1616:9:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2676,"name":"uint256","nodeType":"ElementaryTypeName","src":"1616:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2679,"mutability":"mutable","name":"c","nameLocation":"1635:1:20","nodeType":"VariableDeclaration","scope":2695,"src":"1627:9:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2678,"name":"uint256","nodeType":"ElementaryTypeName","src":"1627:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1604:33:20"},"returnParameters":{"id":2681,"nodeType":"ParameterList","parameters":[],"src":"1652:0:20"},"scope":2881,"src":"1573:170:20","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2753,"nodeType":"Block","src":"1938:451:20","statements":[{"assignments":[2704],"declarations":[{"constant":false,"id":2704,"mutability":"mutable","name":"length","nameLocation":"1956:6:20","nodeType":"VariableDeclaration","scope":2753,"src":"1948:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2703,"name":"uint256","nodeType":"ElementaryTypeName","src":"1948:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2707,"initialValue":{"expression":{"id":2705,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2698,"src":"1965:12:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1978:6:20","memberName":"length","nodeType":"MemberAccess","src":"1965:19:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1948:36:20"},{"expression":{"id":2710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2708,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2701,"src":"1994:10:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2709,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2704,"src":"2007:6:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1994:19:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2711,"nodeType":"ExpressionStatement","src":"1994:19:20"},{"body":{"id":2741,"nodeType":"Block","src":"2061:211:20","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":2722,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2698,"src":"2079:12:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2724,"indexExpression":{"id":2723,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2713,"src":"2092:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2079:15:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":2725,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2098:1:20","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2079:20:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2740,"nodeType":"IfStatement","src":"2075:187:20","trueBody":{"id":2739,"nodeType":"Block","src":"2101:161:20","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2727,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2701,"src":"2123:10:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2728,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2704,"src":"2137:6:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2123:20:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2734,"nodeType":"IfStatement","src":"2119:97:20","trueBody":{"id":2733,"nodeType":"Block","src":"2145:71:20","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2730,"name":"MultipleNonZeroInputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2651,"src":"2174:21:20","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2174:23:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2732,"nodeType":"RevertStatement","src":"2167:30:20"}]}},{"expression":{"id":2737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2735,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2701,"src":"2233:10:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2736,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2713,"src":"2246:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2233:14:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2738,"nodeType":"ExpressionStatement","src":"2233:14:20"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2716,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2713,"src":"2044:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":2717,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2704,"src":"2048:6:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2044:10:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2742,"initializationExpression":{"assignments":[2713],"declarations":[{"constant":false,"id":2713,"mutability":"mutable","name":"i","nameLocation":"2037:1:20","nodeType":"VariableDeclaration","scope":2742,"src":"2029:9:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2712,"name":"uint256","nodeType":"ElementaryTypeName","src":"2029:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2715,"initialValue":{"hexValue":"30","id":2714,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2041:1:20","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2029:13:20"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2056:3:20","subExpression":{"id":2719,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2713,"src":"2058:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2721,"nodeType":"ExpressionStatement","src":"2056:3:20"},"nodeType":"ForStatement","src":"2024:248:20"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2743,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2701,"src":"2286:10:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2744,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2704,"src":"2300:6:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2286:20:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2750,"nodeType":"IfStatement","src":"2282:73:20","trueBody":{"id":2749,"nodeType":"Block","src":"2308:47:20","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2746,"name":"AllZeroInputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2654,"src":"2329:13:20","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2329:15:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2748,"nodeType":"RevertStatement","src":"2322:22:20"}]}},{"expression":{"id":2751,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2701,"src":"2372:10:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2702,"id":2752,"nodeType":"Return","src":"2365:17:20"}]},"id":2754,"implemented":true,"kind":"function","modifiers":[],"name":"getSingleInputIndex","nameLocation":"1844:19:20","nodeType":"FunctionDefinition","parameters":{"id":2699,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2698,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"1881:12:20","nodeType":"VariableDeclaration","scope":2754,"src":"1864:29:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2696,"name":"uint256","nodeType":"ElementaryTypeName","src":"1864:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2697,"nodeType":"ArrayTypeName","src":"1864:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1863:31:20"},"returnParameters":{"id":2702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2701,"mutability":"mutable","name":"inputIndex","nameLocation":"1926:10:20","nodeType":"VariableDeclaration","scope":2754,"src":"1918:18:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2700,"name":"uint256","nodeType":"ElementaryTypeName","src":"1918:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1917:20:20"},"scope":2881,"src":"1835:554:20","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2831,"nodeType":"Block","src":"3138:376:20","statements":[{"body":{"id":2827,"nodeType":"Block","src":"3196:288:20","statements":[{"body":{"id":2825,"nodeType":"Block","src":"3262:212:20","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"id":2802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":2794,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2759,"src":"3284:6:20","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2796,"indexExpression":{"id":2795,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2780,"src":"3291:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3284:9:20","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"id":2797,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2759,"src":"3296:6:20","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2801,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2798,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2780,"src":"3303:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3307:1:20","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3303:5:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3296:13:20","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"src":"3284:25:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2824,"nodeType":"IfStatement","src":"3280:180:20","trueBody":{"id":2823,"nodeType":"Block","src":"3311:149:20","statements":[{"expression":{"id":2821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":2803,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2759,"src":"3387:6:20","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2805,"indexExpression":{"id":2804,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2780,"src":"3394:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3387:9:20","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"baseExpression":{"id":2806,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2759,"src":"3398:6:20","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2810,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2807,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2780,"src":"3405:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2808,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3409:1:20","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3405:5:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3398:13:20","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}}],"id":2811,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3386:26:20","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$6980_$_t_contract$_IERC20_$6980_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"baseExpression":{"id":2812,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2759,"src":"3416:6:20","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2816,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2813,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2780,"src":"3423:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2814,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3427:1:20","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3423:5:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3416:13:20","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"baseExpression":{"id":2817,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2759,"src":"3431:6:20","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2819,"indexExpression":{"id":2818,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2780,"src":"3438:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3431:9:20","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}}],"id":2820,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3415:26:20","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$6980_$_t_contract$_IERC20_$6980_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"src":"3386:55:20","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2822,"nodeType":"ExpressionStatement","src":"3386:55:20"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2783,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2780,"src":"3230:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2784,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2759,"src":"3234:6:20","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3241:6:20","memberName":"length","nodeType":"MemberAccess","src":"3234:13:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":2786,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2767,"src":"3250:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3234:17:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2788,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3254:1:20","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3234:21:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3230:25:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2826,"initializationExpression":{"assignments":[2780],"declarations":[{"constant":false,"id":2780,"mutability":"mutable","name":"j","nameLocation":"3223:1:20","nodeType":"VariableDeclaration","scope":2826,"src":"3215:9:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2779,"name":"uint256","nodeType":"ElementaryTypeName","src":"3215:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2782,"initialValue":{"hexValue":"30","id":2781,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3227:1:20","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3215:13:20"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3257:3:20","subExpression":{"id":2791,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2780,"src":"3259:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2793,"nodeType":"ExpressionStatement","src":"3257:3:20"},"nodeType":"ForStatement","src":"3210:264:20"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2770,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2767,"src":"3168:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2771,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2759,"src":"3172:6:20","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3179:6:20","memberName":"length","nodeType":"MemberAccess","src":"3172:13:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2773,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3188:1:20","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3172:17:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3168:21:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2828,"initializationExpression":{"assignments":[2767],"declarations":[{"constant":false,"id":2767,"mutability":"mutable","name":"i","nameLocation":"3161:1:20","nodeType":"VariableDeclaration","scope":2828,"src":"3153:9:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2766,"name":"uint256","nodeType":"ElementaryTypeName","src":"3153:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2769,"initialValue":{"hexValue":"30","id":2768,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3165:1:20","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3153:13:20"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3191:3:20","subExpression":{"id":2776,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2767,"src":"3193:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2778,"nodeType":"ExpressionStatement","src":"3191:3:20"},"nodeType":"ForStatement","src":"3148:336:20"},{"expression":{"id":2829,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2759,"src":"3501:6:20","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"functionReturnParameters":2765,"id":2830,"nodeType":"Return","src":"3494:13:20"}]},"documentation":{"id":2755,"nodeType":"StructuredDocumentation","src":"2395:654:20","text":" @dev Sort an array of tokens, mutating in place (and also returning them).\n This assumes the tokens have been (or will be) validated elsewhere for length\n and non-duplication. All this does is the sorting.\n A bubble sort should be gas- and bytecode-efficient enough for such small arrays.\n Could have also done \"manual\" comparisons for each of the cases, but this is\n about the same number of operations, and more concise.\n This is less efficient for larger token count (i.e., above 4), but such pools should\n be rare. And in any case, sorting is only done on-chain in test code."},"id":2832,"implemented":true,"kind":"function","modifiers":[],"name":"sortTokens","nameLocation":"3063:10:20","nodeType":"FunctionDefinition","parameters":{"id":2760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2759,"mutability":"mutable","name":"tokens","nameLocation":"3090:6:20","nodeType":"VariableDeclaration","scope":2832,"src":"3074:22:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2757,"nodeType":"UserDefinedTypeName","pathNode":{"id":2756,"name":"IERC20","nameLocations":["3074:6:20"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"3074:6:20"},"referencedDeclaration":6980,"src":"3074:6:20","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":2758,"nodeType":"ArrayTypeName","src":"3074:8:20","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3073:24:20"},"returnParameters":{"id":2765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2764,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2832,"src":"3121:15:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2762,"nodeType":"UserDefinedTypeName","pathNode":{"id":2761,"name":"IERC20","nameLocations":["3121:6:20"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"3121:6:20"},"referencedDeclaration":6980,"src":"3121:6:20","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":2763,"nodeType":"ArrayTypeName","src":"3121:8:20","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3120:17:20"},"scope":2881,"src":"3054:460:20","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2879,"nodeType":"Block","src":"3686:277:20","statements":[{"assignments":[2842],"declarations":[{"constant":false,"id":2842,"mutability":"mutable","name":"previous","nameLocation":"3703:8:20","nodeType":"VariableDeclaration","scope":2879,"src":"3696:15:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":2841,"nodeType":"UserDefinedTypeName","pathNode":{"id":2840,"name":"IERC20","nameLocations":["3696:6:20"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"3696:6:20"},"referencedDeclaration":6980,"src":"3696:6:20","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"}],"id":2846,"initialValue":{"baseExpression":{"id":2843,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2837,"src":"3714:6:20","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2845,"indexExpression":{"hexValue":"30","id":2844,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3721:1:20","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3714:9:20","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3696:27:20"},{"body":{"id":2877,"nodeType":"Block","src":"3778:179:20","statements":[{"assignments":[2860],"declarations":[{"constant":false,"id":2860,"mutability":"mutable","name":"current","nameLocation":"3799:7:20","nodeType":"VariableDeclaration","scope":2877,"src":"3792:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":2859,"nodeType":"UserDefinedTypeName","pathNode":{"id":2858,"name":"IERC20","nameLocations":["3792:6:20"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"3792:6:20"},"referencedDeclaration":6980,"src":"3792:6:20","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"}],"id":2864,"initialValue":{"baseExpression":{"id":2861,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2837,"src":"3809:6:20","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2863,"indexExpression":{"id":2862,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2848,"src":"3816:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3809:9:20","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3792:26:20"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"id":2867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2865,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2842,"src":"3837:8:20","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":2866,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2860,"src":"3848:7:20","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"src":"3837:18:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2872,"nodeType":"IfStatement","src":"3833:81:20","trueBody":{"id":2871,"nodeType":"Block","src":"3857:57:20","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2868,"name":"TokensNotSorted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2657,"src":"3882:15:20","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3882:17:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2870,"nodeType":"RevertStatement","src":"3875:24:20"}]}},{"expression":{"id":2875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2873,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2842,"src":"3928:8:20","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2874,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2860,"src":"3939:7:20","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"src":"3928:18:20","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":2876,"nodeType":"ExpressionStatement","src":"3928:18:20"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2851,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2848,"src":"3754:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":2852,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2837,"src":"3758:6:20","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3765:6:20","memberName":"length","nodeType":"MemberAccess","src":"3758:13:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3754:17:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2878,"initializationExpression":{"assignments":[2848],"declarations":[{"constant":false,"id":2848,"mutability":"mutable","name":"i","nameLocation":"3747:1:20","nodeType":"VariableDeclaration","scope":2878,"src":"3739:9:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2847,"name":"uint256","nodeType":"ElementaryTypeName","src":"3739:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2850,"initialValue":{"hexValue":"31","id":2849,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3751:1:20","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"3739:13:20"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3773:3:20","subExpression":{"id":2855,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2848,"src":"3775:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2857,"nodeType":"ExpressionStatement","src":"3773:3:20"},"nodeType":"ForStatement","src":"3734:223:20"}]},"documentation":{"id":2833,"nodeType":"StructuredDocumentation","src":"3520:95:20","text":"@dev Ensure an array of tokens is sorted. As above, does not validate length or uniqueness."},"id":2880,"implemented":true,"kind":"function","modifiers":[],"name":"ensureSortedTokens","nameLocation":"3629:18:20","nodeType":"FunctionDefinition","parameters":{"id":2838,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2837,"mutability":"mutable","name":"tokens","nameLocation":"3664:6:20","nodeType":"VariableDeclaration","scope":2880,"src":"3648:22:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2835,"nodeType":"UserDefinedTypeName","pathNode":{"id":2834,"name":"IERC20","nameLocations":["3648:6:20"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"3648:6:20"},"referencedDeclaration":6980,"src":"3648:6:20","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":2836,"nodeType":"ArrayTypeName","src":"3648:8:20","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3647:24:20"},"returnParameters":{"id":2839,"nodeType":"ParameterList","parameters":[],"src":"3686:0:20"},"scope":2881,"src":"3620:343:20","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":2882,"src":"202:3763:20","usedErrors":[2648,2651,2654,2657],"usedEvents":[]}],"src":"46:3920:20"},"id":20},"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","exportedSymbols":{"PackedTokenBalance":[3032]},"id":3033,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2883,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:21"},{"abstract":false,"baseContracts":[],"canonicalName":"PackedTokenBalance","contractDependencies":[],"contractKind":"library","documentation":{"id":2884,"nodeType":"StructuredDocumentation","src":"72:909:21","text":" @notice This library represents a data structure for packing a token's current raw and derived balances. A derived\n balance can be the \"last\" live balance scaled18 of the raw token, or the balance of the wrapped version of the\n token in a vault buffer, among others.\n @dev We could use a Solidity struct to pack balance values together in a single storage slot, but unfortunately\n Solidity only allows for structs to live in either storage, calldata or memory. Because a memory struct still takes\n up a slot in the stack (to store its memory location), and because the entire balance fits in a single stack slot\n (two 128 bit values), using memory is strictly less gas performant. Therefore, we do manual packing and unpacking.\n We could also use custom types now, but given the simplicity here, and the existing EnumerableMap type, it seemed\n easier to leave it as a bytes32."},"fullyImplemented":true,"id":3032,"linearizedBaseContracts":[3032],"name":"PackedTokenBalance","nameLocation":"990:18:21","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":2892,"mutability":"constant","name":"_MAX_BALANCE","nameLocation":"1222:12:21","nodeType":"VariableDeclaration","scope":3032,"src":"1197:54:21","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2885,"name":"uint256","nodeType":"ElementaryTypeName","src":"1197:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"},"id":2891,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"},"id":2889,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":2886,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1237:1:21","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"hexValue":"313238","id":2887,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1243:3:21","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"}],"id":2888,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1242:5:21","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"}},"src":"1237:10:21","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2890,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1250:1:21","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1237:14:21","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"}},"visibility":"private"},{"documentation":{"id":2893,"nodeType":"StructuredDocumentation","src":"1258:78:21","text":"@notice One of the balances is above the maximum value that can be stored."},"errorSelector":"89560ca1","id":2895,"name":"BalanceOverflow","nameLocation":"1347:15:21","nodeType":"ErrorDefinition","parameters":{"id":2894,"nodeType":"ParameterList","parameters":[],"src":"1362:2:21"},"src":"1341:24:21"},{"body":{"id":2909,"nodeType":"Block","src":"1443:55:21","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":2904,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2897,"src":"1468:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":2903,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1460:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2902,"name":"uint256","nodeType":"ElementaryTypeName","src":"1460:7:21","typeDescriptions":{}}},"id":2905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1460:16:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":2906,"name":"_MAX_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2892,"src":"1479:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1460:31:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2901,"id":2908,"nodeType":"Return","src":"1453:38:21"}]},"id":2910,"implemented":true,"kind":"function","modifiers":[],"name":"getBalanceRaw","nameLocation":"1380:13:21","nodeType":"FunctionDefinition","parameters":{"id":2898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2897,"mutability":"mutable","name":"balance","nameLocation":"1402:7:21","nodeType":"VariableDeclaration","scope":2910,"src":"1394:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2896,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1394:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1393:17:21"},"returnParameters":{"id":2901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2900,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2910,"src":"1434:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2899,"name":"uint256","nodeType":"ElementaryTypeName","src":"1434:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1433:9:21"},"scope":3032,"src":"1371:127:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2926,"nodeType":"Block","src":"1580:62:21","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":2921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2919,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2912,"src":"1605:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"313238","id":2920,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1616:3:21","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"1605:14:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":2918,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1597:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2917,"name":"uint256","nodeType":"ElementaryTypeName","src":"1597:7:21","typeDescriptions":{}}},"id":2922,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1597:23:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":2923,"name":"_MAX_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2892,"src":"1623:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1597:38:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2916,"id":2925,"nodeType":"Return","src":"1590:45:21"}]},"id":2927,"implemented":true,"kind":"function","modifiers":[],"name":"getBalanceDerived","nameLocation":"1513:17:21","nodeType":"FunctionDefinition","parameters":{"id":2913,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2912,"mutability":"mutable","name":"balance","nameLocation":"1539:7:21","nodeType":"VariableDeclaration","scope":2927,"src":"1531:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2911,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1531:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1530:17:21"},"returnParameters":{"id":2916,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2915,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2927,"src":"1571:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2914,"name":"uint256","nodeType":"ElementaryTypeName","src":"1571:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1570:9:21"},"scope":3032,"src":"1504:138:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2944,"nodeType":"Block","src":"1831:82:21","statements":[{"expression":{"arguments":[{"id":2938,"name":"newBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2932,"src":"1864:13:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":2940,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2930,"src":"1897:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":2939,"name":"getBalanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2927,"src":"1879:17:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":2941,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1879:26:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2937,"name":"toPackedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2991,"src":"1848:15:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":2942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1848:58:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":2936,"id":2943,"nodeType":"Return","src":"1841:65:21"}]},"documentation":{"id":2928,"nodeType":"StructuredDocumentation","src":"1648:83:21","text":"@dev Sets only the raw balance of balances and returns the new bytes32 balance."},"id":2945,"implemented":true,"kind":"function","modifiers":[],"name":"setBalanceRaw","nameLocation":"1745:13:21","nodeType":"FunctionDefinition","parameters":{"id":2933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2930,"mutability":"mutable","name":"balance","nameLocation":"1767:7:21","nodeType":"VariableDeclaration","scope":2945,"src":"1759:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2929,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1759:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2932,"mutability":"mutable","name":"newBalanceRaw","nameLocation":"1784:13:21","nodeType":"VariableDeclaration","scope":2945,"src":"1776:21:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2931,"name":"uint256","nodeType":"ElementaryTypeName","src":"1776:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1758:40:21"},"returnParameters":{"id":2936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2935,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2945,"src":"1822:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2934,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1822:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1821:9:21"},"scope":3032,"src":"1736:177:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2962,"nodeType":"Block","src":"2114:82:21","statements":[{"expression":{"arguments":[{"arguments":[{"id":2957,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2948,"src":"2161:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":2956,"name":"getBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2910,"src":"2147:13:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":2958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2147:22:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2959,"name":"newBalanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2950,"src":"2171:17:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2955,"name":"toPackedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2991,"src":"2131:15:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":2960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2131:58:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":2954,"id":2961,"nodeType":"Return","src":"2124:65:21"}]},"documentation":{"id":2946,"nodeType":"StructuredDocumentation","src":"1919:87:21","text":"@dev Sets only the derived balance of balances and returns the new bytes32 balance."},"id":2963,"implemented":true,"kind":"function","modifiers":[],"name":"setBalanceDerived","nameLocation":"2020:17:21","nodeType":"FunctionDefinition","parameters":{"id":2951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2948,"mutability":"mutable","name":"balance","nameLocation":"2046:7:21","nodeType":"VariableDeclaration","scope":2963,"src":"2038:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2947,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2038:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2950,"mutability":"mutable","name":"newBalanceDerived","nameLocation":"2063:17:21","nodeType":"VariableDeclaration","scope":2963,"src":"2055:25:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2949,"name":"uint256","nodeType":"ElementaryTypeName","src":"2055:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2037:44:21"},"returnParameters":{"id":2954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2953,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2963,"src":"2105:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2952,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2105:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2104:9:21"},"scope":3032,"src":"2011:185:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2990,"nodeType":"Block","src":"2412:180:21","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2973,"name":"balanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2966,"src":"2426:10:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":2974,"name":"_MAX_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2892,"src":"2439:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2426:25:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2976,"name":"balanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2968,"src":"2455:14:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":2977,"name":"_MAX_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2892,"src":"2472:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2455:29:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2426:58:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2984,"nodeType":"IfStatement","src":"2422:113:21","trueBody":{"id":2983,"nodeType":"Block","src":"2486:49:21","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2980,"name":"BalanceOverflow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2895,"src":"2507:15:21","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2507:17:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2982,"nodeType":"RevertStatement","src":"2500:24:21"}]}},{"expression":{"arguments":[{"id":2986,"name":"balanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2966,"src":"2558:10:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2987,"name":"balanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2968,"src":"2570:14:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2985,"name":"_pack","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3031,"src":"2552:5:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":2988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2552:33:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":2972,"id":2989,"nodeType":"Return","src":"2545:40:21"}]},"documentation":{"id":2964,"nodeType":"StructuredDocumentation","src":"2202:104:21","text":"@dev Validates the size of `balanceRaw` and `balanceDerived`, then returns a packed balance bytes32."},"id":2991,"implemented":true,"kind":"function","modifiers":[],"name":"toPackedBalance","nameLocation":"2320:15:21","nodeType":"FunctionDefinition","parameters":{"id":2969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2966,"mutability":"mutable","name":"balanceRaw","nameLocation":"2344:10:21","nodeType":"VariableDeclaration","scope":2991,"src":"2336:18:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2965,"name":"uint256","nodeType":"ElementaryTypeName","src":"2336:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2968,"mutability":"mutable","name":"balanceDerived","nameLocation":"2364:14:21","nodeType":"VariableDeclaration","scope":2991,"src":"2356:22:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2967,"name":"uint256","nodeType":"ElementaryTypeName","src":"2356:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2335:44:21"},"returnParameters":{"id":2972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2971,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2991,"src":"2403:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2970,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2403:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2402:9:21"},"scope":3032,"src":"2311:281:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3009,"nodeType":"Block","src":"2754:76:21","statements":[{"expression":{"components":[{"arguments":[{"id":3002,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2994,"src":"2786:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":3001,"name":"getBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2910,"src":"2772:13:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":3003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2772:22:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":3005,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2994,"src":"2814:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":3004,"name":"getBalanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2927,"src":"2796:17:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":3006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2796:26:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3007,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2771:52:21","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":3000,"id":3008,"nodeType":"Return","src":"2764:59:21"}]},"documentation":{"id":2992,"nodeType":"StructuredDocumentation","src":"2598:40:21","text":"@dev Decode and fetch both balances."},"id":3010,"implemented":true,"kind":"function","modifiers":[],"name":"fromPackedBalance","nameLocation":"2652:17:21","nodeType":"FunctionDefinition","parameters":{"id":2995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2994,"mutability":"mutable","name":"balance","nameLocation":"2678:7:21","nodeType":"VariableDeclaration","scope":3010,"src":"2670:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2993,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2670:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2669:17:21"},"returnParameters":{"id":3000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2997,"mutability":"mutable","name":"balanceRaw","nameLocation":"2718:10:21","nodeType":"VariableDeclaration","scope":3010,"src":"2710:18:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2996,"name":"uint256","nodeType":"ElementaryTypeName","src":"2710:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2999,"mutability":"mutable","name":"balanceDerived","nameLocation":"2738:14:21","nodeType":"VariableDeclaration","scope":3010,"src":"2730:22:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2998,"name":"uint256","nodeType":"ElementaryTypeName","src":"2730:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2709:44:21"},"scope":3032,"src":"2643:187:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3030,"nodeType":"Block","src":"3035:76:21","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3022,"name":"mostSignificant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3015,"src":"3061:15:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"313238","id":3023,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3080:3:21","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"3061:22:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3025,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3060:24:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":3026,"name":"leastSignificant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3013,"src":"3087:16:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3060:43:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3021,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3052:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":3020,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3052:7:21","typeDescriptions":{}}},"id":3028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3052:52:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":3019,"id":3029,"nodeType":"Return","src":"3045:59:21"}]},"documentation":{"id":3011,"nodeType":"StructuredDocumentation","src":"2836:97:21","text":"@dev Packs two uint128 values into a packed balance bytes32. It does not check balance sizes."},"id":3031,"implemented":true,"kind":"function","modifiers":[],"name":"_pack","nameLocation":"2947:5:21","nodeType":"FunctionDefinition","parameters":{"id":3016,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3013,"mutability":"mutable","name":"leastSignificant","nameLocation":"2961:16:21","nodeType":"VariableDeclaration","scope":3031,"src":"2953:24:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3012,"name":"uint256","nodeType":"ElementaryTypeName","src":"2953:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3015,"mutability":"mutable","name":"mostSignificant","nameLocation":"2987:15:21","nodeType":"VariableDeclaration","scope":3031,"src":"2979:23:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3014,"name":"uint256","nodeType":"ElementaryTypeName","src":"2979:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2952:51:21"},"returnParameters":{"id":3019,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3018,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3031,"src":"3026:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3017,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3026:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3025:9:21"},"scope":3032,"src":"2938:173:21","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":3033,"src":"982:2131:21","usedErrors":[2895],"usedEvents":[]}],"src":"46:3068:21"},"id":21},"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","exportedSymbols":{"FixedPoint":[4766],"InputHelpers":[2881],"ScalingHelpers":[3446]},"id":3447,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3034,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:22"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"../math/FixedPoint.sol","id":3036,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3447,"sourceUnit":4767,"src":"72:52:22","symbolAliases":[{"foreign":{"id":3035,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4766,"src":"81:10:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","file":"./InputHelpers.sol","id":3038,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3447,"sourceUnit":2882,"src":"125:50:22","symbolAliases":[{"foreign":{"id":3037,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2881,"src":"134:12:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ScalingHelpers","contractDependencies":[],"contractKind":"library","documentation":{"id":3039,"nodeType":"StructuredDocumentation","src":"177:760:22","text":" @notice Helper functions to apply/undo token decimal and rate adjustments, rounding in the direction indicated.\n @dev To simplify Pool logic, all token balances and amounts are normalized to behave as if the token had\n 18 decimals. When comparing DAI (18 decimals) and USDC (6 decimals), 1 USDC and 1 DAI would both be\n represented as 1e18. This allows us to not consider differences in token decimals in the internal Pool\n math, simplifying it greatly.\n The Vault does not support tokens with more than 18 decimals (see `_MAX_TOKEN_DECIMALS` in `VaultStorage`),\n or tokens that do not implement `IERC20Metadata.decimals`.\n These helpers can also be used to scale amounts by other 18-decimal floating point values, such as rates."},"fullyImplemented":true,"id":3446,"linearizedBaseContracts":[3446],"name":"ScalingHelpers","nameLocation":"946:14:22","nodeType":"ContractDefinition","nodes":[{"global":false,"id":3041,"libraryName":{"id":3040,"name":"FixedPoint","nameLocations":["973:10:22"],"nodeType":"IdentifierPath","referencedDeclaration":4766,"src":"973:10:22"},"nodeType":"UsingForDirective","src":"967:23:22"},{"global":false,"id":3044,"libraryName":{"id":3042,"name":"ScalingHelpers","nameLocations":["1001:14:22"],"nodeType":"IdentifierPath","referencedDeclaration":3446,"src":"1001:14:22"},"nodeType":"UsingForDirective","src":"995:33:22","typeName":{"id":3043,"name":"uint256","nodeType":"ElementaryTypeName","src":"1020:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"body":{"id":3064,"nodeType":"Block","src":"1928:67:22","statements":[{"expression":{"arguments":[{"id":3061,"name":"tokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3051,"src":"1978:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3056,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3047,"src":"1946:6:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3057,"name":"scalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3049,"src":"1955:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1946:22:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3059,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1945:24:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1970:7:22","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4511,"src":"1945:32:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1945:43:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3055,"id":3063,"nodeType":"Return","src":"1938:50:22"}]},"documentation":{"id":3045,"nodeType":"StructuredDocumentation","src":"1252:513:22","text":" @notice Applies `scalingFactor` and `tokenRate` to `amount`.\n @dev This may result in a larger or equal value, depending on whether it needed scaling/rate adjustment or not.\n The result is rounded down.\n @param amount Amount to be scaled up to 18 decimals\n @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n @param tokenRate The token rate scaling factor\n @return result The final 18-decimal precision result, rounded down"},"id":3065,"implemented":true,"kind":"function","modifiers":[],"name":"toScaled18ApplyRateRoundDown","nameLocation":"1779:28:22","nodeType":"FunctionDefinition","parameters":{"id":3052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3047,"mutability":"mutable","name":"amount","nameLocation":"1825:6:22","nodeType":"VariableDeclaration","scope":3065,"src":"1817:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3046,"name":"uint256","nodeType":"ElementaryTypeName","src":"1817:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3049,"mutability":"mutable","name":"scalingFactor","nameLocation":"1849:13:22","nodeType":"VariableDeclaration","scope":3065,"src":"1841:21:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3048,"name":"uint256","nodeType":"ElementaryTypeName","src":"1841:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3051,"mutability":"mutable","name":"tokenRate","nameLocation":"1880:9:22","nodeType":"VariableDeclaration","scope":3065,"src":"1872:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3050,"name":"uint256","nodeType":"ElementaryTypeName","src":"1872:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1807:88:22"},"returnParameters":{"id":3055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3054,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3065,"src":"1919:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3053,"name":"uint256","nodeType":"ElementaryTypeName","src":"1919:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1918:9:22"},"scope":3446,"src":"1770:225:22","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3085,"nodeType":"Block","src":"2671:65:22","statements":[{"expression":{"arguments":[{"id":3082,"name":"tokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3072,"src":"2719:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3077,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3068,"src":"2689:6:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3078,"name":"scalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3070,"src":"2698:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2689:22:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3080,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2688:24:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2713:5:22","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":4528,"src":"2688:30:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2688:41:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3076,"id":3084,"nodeType":"Return","src":"2681:48:22"}]},"documentation":{"id":3066,"nodeType":"StructuredDocumentation","src":"2001:509:22","text":" @notice Applies `scalingFactor` and `tokenRate` to `amount`.\n @dev This may result in a larger or equal value, depending on whether it needed scaling/rate adjustment or not.\n The result is rounded up.\n @param amount Amount to be scaled up to 18 decimals\n @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n @param tokenRate The token rate scaling factor\n @return result The final 18-decimal precision result, rounded up"},"id":3086,"implemented":true,"kind":"function","modifiers":[],"name":"toScaled18ApplyRateRoundUp","nameLocation":"2524:26:22","nodeType":"FunctionDefinition","parameters":{"id":3073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3068,"mutability":"mutable","name":"amount","nameLocation":"2568:6:22","nodeType":"VariableDeclaration","scope":3086,"src":"2560:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3067,"name":"uint256","nodeType":"ElementaryTypeName","src":"2560:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3070,"mutability":"mutable","name":"scalingFactor","nameLocation":"2592:13:22","nodeType":"VariableDeclaration","scope":3086,"src":"2584:21:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3069,"name":"uint256","nodeType":"ElementaryTypeName","src":"2584:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3072,"mutability":"mutable","name":"tokenRate","nameLocation":"2623:9:22","nodeType":"VariableDeclaration","scope":3086,"src":"2615:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3071,"name":"uint256","nodeType":"ElementaryTypeName","src":"2615:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2550:88:22"},"returnParameters":{"id":3076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3075,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3086,"src":"2662:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3074,"name":"uint256","nodeType":"ElementaryTypeName","src":"2662:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2661:9:22"},"scope":3446,"src":"2515:221:22","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3106,"nodeType":"Block","src":"3432:266:22","statements":[{"expression":{"arguments":[{"id":3100,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3089,"src":"3657:6:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3101,"name":"scalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"3665:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3102,"name":"tokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3093,"src":"3681:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3665:25:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3098,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4766,"src":"3638:10:22","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4766_$","typeString":"type(library FixedPoint)"}},"id":3099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3649:7:22","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4548,"src":"3638:18:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3638:53:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3097,"id":3105,"nodeType":"Return","src":"3631:60:22"}]},"documentation":{"id":3087,"nodeType":"StructuredDocumentation","src":"2742:533:22","text":" @notice Reverses the `scalingFactor` and `tokenRate` applied to `amount`.\n @dev This may result in a smaller or equal value, depending on whether it needed scaling/rate adjustment or not.\n The result is rounded down.\n @param amount Amount to be scaled down to native token decimals\n @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n @param tokenRate The token rate scaling factor\n @return result The final native decimal result, rounded down"},"id":3107,"implemented":true,"kind":"function","modifiers":[],"name":"toRawUndoRateRoundDown","nameLocation":"3289:22:22","nodeType":"FunctionDefinition","parameters":{"id":3094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3089,"mutability":"mutable","name":"amount","nameLocation":"3329:6:22","nodeType":"VariableDeclaration","scope":3107,"src":"3321:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3088,"name":"uint256","nodeType":"ElementaryTypeName","src":"3321:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3091,"mutability":"mutable","name":"scalingFactor","nameLocation":"3353:13:22","nodeType":"VariableDeclaration","scope":3107,"src":"3345:21:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3090,"name":"uint256","nodeType":"ElementaryTypeName","src":"3345:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3093,"mutability":"mutable","name":"tokenRate","nameLocation":"3384:9:22","nodeType":"VariableDeclaration","scope":3107,"src":"3376:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3092,"name":"uint256","nodeType":"ElementaryTypeName","src":"3376:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3311:88:22"},"returnParameters":{"id":3097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3096,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3107,"src":"3423:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3095,"name":"uint256","nodeType":"ElementaryTypeName","src":"3423:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3422:9:22"},"scope":3446,"src":"3280:418:22","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3127,"nodeType":"Block","src":"4388:264:22","statements":[{"expression":{"arguments":[{"id":3121,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3110,"src":"4611:6:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3122,"name":"scalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3112,"src":"4619:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3123,"name":"tokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3114,"src":"4635:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4619:25:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3119,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4766,"src":"4594:10:22","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4766_$","typeString":"type(library FixedPoint)"}},"id":3120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4605:5:22","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":4564,"src":"4594:16:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4594:51:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3118,"id":3126,"nodeType":"Return","src":"4587:58:22"}]},"documentation":{"id":3108,"nodeType":"StructuredDocumentation","src":"3704:529:22","text":" @notice Reverses the `scalingFactor` and `tokenRate` applied to `amount`.\n @dev This may result in a smaller or equal value, depending on whether it needed scaling/rate adjustment or not.\n The result is rounded up.\n @param amount Amount to be scaled down to native token decimals\n @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n @param tokenRate The token rate scaling factor\n @return result The final native decimal result, rounded up"},"id":3128,"implemented":true,"kind":"function","modifiers":[],"name":"toRawUndoRateRoundUp","nameLocation":"4247:20:22","nodeType":"FunctionDefinition","parameters":{"id":3115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3110,"mutability":"mutable","name":"amount","nameLocation":"4285:6:22","nodeType":"VariableDeclaration","scope":3128,"src":"4277:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3109,"name":"uint256","nodeType":"ElementaryTypeName","src":"4277:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3112,"mutability":"mutable","name":"scalingFactor","nameLocation":"4309:13:22","nodeType":"VariableDeclaration","scope":3128,"src":"4301:21:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3111,"name":"uint256","nodeType":"ElementaryTypeName","src":"4301:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3114,"mutability":"mutable","name":"tokenRate","nameLocation":"4340:9:22","nodeType":"VariableDeclaration","scope":3128,"src":"4332:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3113,"name":"uint256","nodeType":"ElementaryTypeName","src":"4332:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4267:88:22"},"returnParameters":{"id":3118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3117,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3128,"src":"4379:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3116,"name":"uint256","nodeType":"ElementaryTypeName","src":"4379:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4378:9:22"},"scope":3446,"src":"4238:414:22","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3151,"nodeType":"Block","src":"4952:280:22","statements":[{"assignments":[3138],"declarations":[{"constant":false,"id":3138,"mutability":"mutable","name":"length","nameLocation":"4970:6:22","nodeType":"VariableDeclaration","scope":3151,"src":"4962:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3137,"name":"uint256","nodeType":"ElementaryTypeName","src":"4962:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3141,"initialValue":{"expression":{"id":3139,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3131,"src":"4979:4:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4984:6:22","memberName":"length","nodeType":"MemberAccess","src":"4979:11:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4962:28:22"},{"expression":{"arguments":[{"id":3145,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3138,"src":"5036:6:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3146,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3134,"src":"5044:2:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5047:6:22","memberName":"length","nodeType":"MemberAccess","src":"5044:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3142,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2881,"src":"5000:12:22","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$2881_$","typeString":"type(library InputHelpers)"}},"id":3144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5013:22:22","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":2673,"src":"5000:35:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":3148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5000:54:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3149,"nodeType":"ExpressionStatement","src":"5000:54:22"},{"AST":{"nativeSrc":"5146:80:22","nodeType":"YulBlock","src":"5146:80:22","statements":[{"expression":{"arguments":[{"arguments":[{"name":"to","nativeSrc":"5170:2:22","nodeType":"YulIdentifier","src":"5170:2:22"},{"kind":"number","nativeSrc":"5174:4:22","nodeType":"YulLiteral","src":"5174:4:22","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5166:3:22","nodeType":"YulIdentifier","src":"5166:3:22"},"nativeSrc":"5166:13:22","nodeType":"YulFunctionCall","src":"5166:13:22"},{"arguments":[{"name":"from","nativeSrc":"5185:4:22","nodeType":"YulIdentifier","src":"5185:4:22"},{"kind":"number","nativeSrc":"5191:4:22","nodeType":"YulLiteral","src":"5191:4:22","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5181:3:22","nodeType":"YulIdentifier","src":"5181:3:22"},"nativeSrc":"5181:15:22","nodeType":"YulFunctionCall","src":"5181:15:22"},{"arguments":[{"name":"length","nativeSrc":"5202:6:22","nodeType":"YulIdentifier","src":"5202:6:22"},{"kind":"number","nativeSrc":"5210:4:22","nodeType":"YulLiteral","src":"5210:4:22","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"5198:3:22","nodeType":"YulIdentifier","src":"5198:3:22"},"nativeSrc":"5198:17:22","nodeType":"YulFunctionCall","src":"5198:17:22"}],"functionName":{"name":"mcopy","nativeSrc":"5160:5:22","nodeType":"YulIdentifier","src":"5160:5:22"},"nativeSrc":"5160:56:22","nodeType":"YulFunctionCall","src":"5160:56:22"},"nativeSrc":"5160:56:22","nodeType":"YulExpressionStatement","src":"5160:56:22"}]},"evmVersion":"cancun","externalReferences":[{"declaration":3131,"isOffset":false,"isSlot":false,"src":"5185:4:22","valueSize":1},{"declaration":3138,"isOffset":false,"isSlot":false,"src":"5202:6:22","valueSize":1},{"declaration":3134,"isOffset":false,"isSlot":false,"src":"5170:2:22","valueSize":1}],"flags":["memory-safe"],"id":3150,"nodeType":"InlineAssembly","src":"5121:105:22"}]},"id":3152,"implemented":true,"kind":"function","modifiers":[],"name":"copyToArray","nameLocation":"4882:11:22","nodeType":"FunctionDefinition","parameters":{"id":3135,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3131,"mutability":"mutable","name":"from","nameLocation":"4911:4:22","nodeType":"VariableDeclaration","scope":3152,"src":"4894:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3129,"name":"uint256","nodeType":"ElementaryTypeName","src":"4894:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3130,"nodeType":"ArrayTypeName","src":"4894:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3134,"mutability":"mutable","name":"to","nameLocation":"4934:2:22","nodeType":"VariableDeclaration","scope":3152,"src":"4917:19:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3132,"name":"uint256","nodeType":"ElementaryTypeName","src":"4917:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3133,"nodeType":"ArrayTypeName","src":"4917:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4893:44:22"},"returnParameters":{"id":3136,"nodeType":"ParameterList","parameters":[],"src":"4952:0:22"},"scope":3446,"src":"4873:359:22","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3208,"nodeType":"Block","src":"5892:301:22","statements":[{"assignments":[3166],"declarations":[{"constant":false,"id":3166,"mutability":"mutable","name":"length","nameLocation":"5910:6:22","nodeType":"VariableDeclaration","scope":3208,"src":"5902:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3165,"name":"uint256","nodeType":"ElementaryTypeName","src":"5902:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3169,"initialValue":{"expression":{"id":3167,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3156,"src":"5919:7:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5927:6:22","memberName":"length","nodeType":"MemberAccess","src":"5919:14:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5902:31:22"},{"expression":{"arguments":[{"id":3173,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3166,"src":"5979:6:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3174,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3159,"src":"5987:14:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6002:6:22","memberName":"length","nodeType":"MemberAccess","src":"5987:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3176,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3162,"src":"6010:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6021:6:22","memberName":"length","nodeType":"MemberAccess","src":"6010:17:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3170,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2881,"src":"5943:12:22","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$2881_$","typeString":"type(library InputHelpers)"}},"id":3172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5956:22:22","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":2695,"src":"5943:35:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":3178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5943:85:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3179,"nodeType":"ExpressionStatement","src":"5943:85:22"},{"body":{"id":3206,"nodeType":"Block","src":"6076:111:22","statements":[{"expression":{"id":3204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3190,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3156,"src":"6090:7:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3192,"indexExpression":{"id":3191,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"6098:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6090:10:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":3197,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3159,"src":"6143:14:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3199,"indexExpression":{"id":3198,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"6158:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6143:17:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":3200,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3162,"src":"6162:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3202,"indexExpression":{"id":3201,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"6173:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6162:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":3193,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3156,"src":"6103:7:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3195,"indexExpression":{"id":3194,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"6111:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6103:10:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6114:28:22","memberName":"toScaled18ApplyRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":3065,"src":"6103:39:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":3203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6103:73:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6090:86:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3205,"nodeType":"ExpressionStatement","src":"6090:86:22"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3184,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"6059:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3185,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3166,"src":"6063:6:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6059:10:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3207,"initializationExpression":{"assignments":[3181],"declarations":[{"constant":false,"id":3181,"mutability":"mutable","name":"i","nameLocation":"6052:1:22","nodeType":"VariableDeclaration","scope":3207,"src":"6044:9:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3180,"name":"uint256","nodeType":"ElementaryTypeName","src":"6044:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3183,"initialValue":{"hexValue":"30","id":3182,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6056:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6044:13:22"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":3188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"6071:3:22","subExpression":{"id":3187,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"6073:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3189,"nodeType":"ExpressionStatement","src":"6071:3:22"},"nodeType":"ForStatement","src":"6039:148:22"}]},"documentation":{"id":3153,"nodeType":"StructuredDocumentation","src":"5238:474:22","text":" @notice Same as `toScaled18ApplyRateRoundDown`, but for an entire array.\n @dev This function does not return anything, but instead *mutates* the `amounts` array.\n @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n @param scalingFactors The token decimal scaling factors, sorted in token registration order\n @param tokenRates The token rate scaling factors, sorted in token registration order"},"id":3209,"implemented":true,"kind":"function","modifiers":[],"name":"toScaled18ApplyRateRoundDownArray","nameLocation":"5726:33:22","nodeType":"FunctionDefinition","parameters":{"id":3163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3156,"mutability":"mutable","name":"amounts","nameLocation":"5786:7:22","nodeType":"VariableDeclaration","scope":3209,"src":"5769:24:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3154,"name":"uint256","nodeType":"ElementaryTypeName","src":"5769:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3155,"nodeType":"ArrayTypeName","src":"5769:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3159,"mutability":"mutable","name":"scalingFactors","nameLocation":"5820:14:22","nodeType":"VariableDeclaration","scope":3209,"src":"5803:31:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3157,"name":"uint256","nodeType":"ElementaryTypeName","src":"5803:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3158,"nodeType":"ArrayTypeName","src":"5803:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3162,"mutability":"mutable","name":"tokenRates","nameLocation":"5861:10:22","nodeType":"VariableDeclaration","scope":3209,"src":"5844:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3160,"name":"uint256","nodeType":"ElementaryTypeName","src":"5844:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3161,"nodeType":"ArrayTypeName","src":"5844:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"5759:118:22"},"returnParameters":{"id":3164,"nodeType":"ParameterList","parameters":[],"src":"5892:0:22"},"scope":3446,"src":"5717:476:22","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3281,"nodeType":"Block","src":"6920:408:22","statements":[{"assignments":[3226],"declarations":[{"constant":false,"id":3226,"mutability":"mutable","name":"length","nameLocation":"6938:6:22","nodeType":"VariableDeclaration","scope":3281,"src":"6930:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3225,"name":"uint256","nodeType":"ElementaryTypeName","src":"6930:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3229,"initialValue":{"expression":{"id":3227,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3213,"src":"6947:7:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6955:6:22","memberName":"length","nodeType":"MemberAccess","src":"6947:14:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6930:31:22"},{"expression":{"arguments":[{"id":3233,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3226,"src":"7007:6:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3234,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3216,"src":"7015:14:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7030:6:22","memberName":"length","nodeType":"MemberAccess","src":"7015:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3236,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3219,"src":"7038:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7049:6:22","memberName":"length","nodeType":"MemberAccess","src":"7038:17:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3230,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2881,"src":"6971:12:22","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$2881_$","typeString":"type(library InputHelpers)"}},"id":3232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6984:22:22","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":2695,"src":"6971:35:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":3238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6971:85:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3239,"nodeType":"ExpressionStatement","src":"6971:85:22"},{"assignments":[3244],"declarations":[{"constant":false,"id":3244,"mutability":"mutable","name":"amountsScaled18","nameLocation":"7083:15:22","nodeType":"VariableDeclaration","scope":3281,"src":"7066:32:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3242,"name":"uint256","nodeType":"ElementaryTypeName","src":"7066:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3243,"nodeType":"ArrayTypeName","src":"7066:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":3250,"initialValue":{"arguments":[{"id":3248,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3226,"src":"7115:6:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3247,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"7101:13:22","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":3245,"name":"uint256","nodeType":"ElementaryTypeName","src":"7105:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3246,"nodeType":"ArrayTypeName","src":"7105:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":3249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7101:21:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"7066:56:22"},{"body":{"id":3277,"nodeType":"Block","src":"7170:119:22","statements":[{"expression":{"id":3275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3261,"name":"amountsScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3244,"src":"7184:15:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3263,"indexExpression":{"id":3262,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3252,"src":"7200:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7184:18:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":3268,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3216,"src":"7245:14:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3270,"indexExpression":{"id":3269,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3252,"src":"7260:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7245:17:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":3271,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3219,"src":"7264:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3273,"indexExpression":{"id":3272,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3252,"src":"7275:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7264:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":3264,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3213,"src":"7205:7:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3266,"indexExpression":{"id":3265,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3252,"src":"7213:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7205:10:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7216:28:22","memberName":"toScaled18ApplyRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":3065,"src":"7205:39:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":3274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7205:73:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7184:94:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3276,"nodeType":"ExpressionStatement","src":"7184:94:22"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3255,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3252,"src":"7153:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3256,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3226,"src":"7157:6:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7153:10:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3278,"initializationExpression":{"assignments":[3252],"declarations":[{"constant":false,"id":3252,"mutability":"mutable","name":"i","nameLocation":"7146:1:22","nodeType":"VariableDeclaration","scope":3278,"src":"7138:9:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3251,"name":"uint256","nodeType":"ElementaryTypeName","src":"7138:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3254,"initialValue":{"hexValue":"30","id":3253,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7150:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7138:13:22"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":3259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7165:3:22","subExpression":{"id":3258,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3252,"src":"7167:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3260,"nodeType":"ExpressionStatement","src":"7165:3:22"},"nodeType":"ForStatement","src":"7133:156:22"},{"expression":{"id":3279,"name":"amountsScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3244,"src":"7306:15:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":3224,"id":3280,"nodeType":"Return","src":"7299:22:22"}]},"documentation":{"id":3210,"nodeType":"StructuredDocumentation","src":"6199:510:22","text":" @notice Same as `toScaled18ApplyRateRoundDown`, but returns a new array, leaving the original intact.\n @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n @param scalingFactors The token decimal scaling factors, sorted in token registration order\n @param tokenRates The token rate scaling factors, sorted in token registration order\n @return results The final 18 decimal results, sorted in token registration order, rounded down"},"id":3282,"implemented":true,"kind":"function","modifiers":[],"name":"copyToScaled18ApplyRateRoundDownArray","nameLocation":"6723:37:22","nodeType":"FunctionDefinition","parameters":{"id":3220,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3213,"mutability":"mutable","name":"amounts","nameLocation":"6787:7:22","nodeType":"VariableDeclaration","scope":3282,"src":"6770:24:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3211,"name":"uint256","nodeType":"ElementaryTypeName","src":"6770:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3212,"nodeType":"ArrayTypeName","src":"6770:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3216,"mutability":"mutable","name":"scalingFactors","nameLocation":"6821:14:22","nodeType":"VariableDeclaration","scope":3282,"src":"6804:31:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3214,"name":"uint256","nodeType":"ElementaryTypeName","src":"6804:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3215,"nodeType":"ArrayTypeName","src":"6804:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3219,"mutability":"mutable","name":"tokenRates","nameLocation":"6862:10:22","nodeType":"VariableDeclaration","scope":3282,"src":"6845:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3217,"name":"uint256","nodeType":"ElementaryTypeName","src":"6845:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3218,"nodeType":"ArrayTypeName","src":"6845:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"6760:118:22"},"returnParameters":{"id":3224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3223,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3282,"src":"6902:16:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3221,"name":"uint256","nodeType":"ElementaryTypeName","src":"6902:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3222,"nodeType":"ArrayTypeName","src":"6902:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"6901:18:22"},"scope":3446,"src":"6714:614:22","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3338,"nodeType":"Block","src":"7984:299:22","statements":[{"assignments":[3296],"declarations":[{"constant":false,"id":3296,"mutability":"mutable","name":"length","nameLocation":"8002:6:22","nodeType":"VariableDeclaration","scope":3338,"src":"7994:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3295,"name":"uint256","nodeType":"ElementaryTypeName","src":"7994:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3299,"initialValue":{"expression":{"id":3297,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3286,"src":"8011:7:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8019:6:22","memberName":"length","nodeType":"MemberAccess","src":"8011:14:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7994:31:22"},{"expression":{"arguments":[{"id":3303,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3296,"src":"8071:6:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3304,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3289,"src":"8079:14:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8094:6:22","memberName":"length","nodeType":"MemberAccess","src":"8079:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3306,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3292,"src":"8102:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8113:6:22","memberName":"length","nodeType":"MemberAccess","src":"8102:17:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3300,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2881,"src":"8035:12:22","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$2881_$","typeString":"type(library InputHelpers)"}},"id":3302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8048:22:22","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":2695,"src":"8035:35:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":3308,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8035:85:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3309,"nodeType":"ExpressionStatement","src":"8035:85:22"},{"body":{"id":3336,"nodeType":"Block","src":"8168:109:22","statements":[{"expression":{"id":3334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3320,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3286,"src":"8182:7:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3322,"indexExpression":{"id":3321,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3311,"src":"8190:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8182:10:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":3327,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3289,"src":"8233:14:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3329,"indexExpression":{"id":3328,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3311,"src":"8248:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8233:17:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":3330,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3292,"src":"8252:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3332,"indexExpression":{"id":3331,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3311,"src":"8263:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8252:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":3323,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3286,"src":"8195:7:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3325,"indexExpression":{"id":3324,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3311,"src":"8203:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8195:10:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8206:26:22","memberName":"toScaled18ApplyRateRoundUp","nodeType":"MemberAccess","referencedDeclaration":3086,"src":"8195:37:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":3333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8195:71:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8182:84:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3335,"nodeType":"ExpressionStatement","src":"8182:84:22"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3314,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3311,"src":"8151:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3315,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3296,"src":"8155:6:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8151:10:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3337,"initializationExpression":{"assignments":[3311],"declarations":[{"constant":false,"id":3311,"mutability":"mutable","name":"i","nameLocation":"8144:1:22","nodeType":"VariableDeclaration","scope":3337,"src":"8136:9:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3310,"name":"uint256","nodeType":"ElementaryTypeName","src":"8136:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3313,"initialValue":{"hexValue":"30","id":3312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8148:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8136:13:22"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":3318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"8163:3:22","subExpression":{"id":3317,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3311,"src":"8165:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3319,"nodeType":"ExpressionStatement","src":"8163:3:22"},"nodeType":"ForStatement","src":"8131:146:22"}]},"documentation":{"id":3283,"nodeType":"StructuredDocumentation","src":"7334:472:22","text":" @notice Same as `toScaled18ApplyRateRoundUp`, but for an entire array.\n @dev This function does not return anything, but instead *mutates* the `amounts` array.\n @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n @param scalingFactors The token decimal scaling factors, sorted in token registration order\n @param tokenRates The token rate scaling factors, sorted in token registration order"},"id":3339,"implemented":true,"kind":"function","modifiers":[],"name":"toScaled18ApplyRateRoundUpArray","nameLocation":"7820:31:22","nodeType":"FunctionDefinition","parameters":{"id":3293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3286,"mutability":"mutable","name":"amounts","nameLocation":"7878:7:22","nodeType":"VariableDeclaration","scope":3339,"src":"7861:24:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3284,"name":"uint256","nodeType":"ElementaryTypeName","src":"7861:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3285,"nodeType":"ArrayTypeName","src":"7861:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3289,"mutability":"mutable","name":"scalingFactors","nameLocation":"7912:14:22","nodeType":"VariableDeclaration","scope":3339,"src":"7895:31:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3287,"name":"uint256","nodeType":"ElementaryTypeName","src":"7895:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3288,"nodeType":"ArrayTypeName","src":"7895:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3292,"mutability":"mutable","name":"tokenRates","nameLocation":"7953:10:22","nodeType":"VariableDeclaration","scope":3339,"src":"7936:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3290,"name":"uint256","nodeType":"ElementaryTypeName","src":"7936:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3291,"nodeType":"ArrayTypeName","src":"7936:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7851:118:22"},"returnParameters":{"id":3294,"nodeType":"ParameterList","parameters":[],"src":"7984:0:22"},"scope":3446,"src":"7811:472:22","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3411,"nodeType":"Block","src":"9004:406:22","statements":[{"assignments":[3356],"declarations":[{"constant":false,"id":3356,"mutability":"mutable","name":"length","nameLocation":"9022:6:22","nodeType":"VariableDeclaration","scope":3411,"src":"9014:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3355,"name":"uint256","nodeType":"ElementaryTypeName","src":"9014:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3359,"initialValue":{"expression":{"id":3357,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3343,"src":"9031:7:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9039:6:22","memberName":"length","nodeType":"MemberAccess","src":"9031:14:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9014:31:22"},{"expression":{"arguments":[{"id":3363,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3356,"src":"9091:6:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3364,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3346,"src":"9099:14:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9114:6:22","memberName":"length","nodeType":"MemberAccess","src":"9099:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3366,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3349,"src":"9122:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9133:6:22","memberName":"length","nodeType":"MemberAccess","src":"9122:17:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3360,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2881,"src":"9055:12:22","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$2881_$","typeString":"type(library InputHelpers)"}},"id":3362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9068:22:22","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":2695,"src":"9055:35:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":3368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9055:85:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3369,"nodeType":"ExpressionStatement","src":"9055:85:22"},{"assignments":[3374],"declarations":[{"constant":false,"id":3374,"mutability":"mutable","name":"amountsScaled18","nameLocation":"9167:15:22","nodeType":"VariableDeclaration","scope":3411,"src":"9150:32:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3372,"name":"uint256","nodeType":"ElementaryTypeName","src":"9150:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3373,"nodeType":"ArrayTypeName","src":"9150:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":3380,"initialValue":{"arguments":[{"id":3378,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3356,"src":"9199:6:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3377,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"9185:13:22","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":3375,"name":"uint256","nodeType":"ElementaryTypeName","src":"9189:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3376,"nodeType":"ArrayTypeName","src":"9189:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":3379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9185:21:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"9150:56:22"},{"body":{"id":3407,"nodeType":"Block","src":"9254:117:22","statements":[{"expression":{"id":3405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3391,"name":"amountsScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3374,"src":"9268:15:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3393,"indexExpression":{"id":3392,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3382,"src":"9284:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9268:18:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":3398,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3346,"src":"9327:14:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3400,"indexExpression":{"id":3399,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3382,"src":"9342:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9327:17:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":3401,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3349,"src":"9346:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3403,"indexExpression":{"id":3402,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3382,"src":"9357:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9346:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":3394,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3343,"src":"9289:7:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3396,"indexExpression":{"id":3395,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3382,"src":"9297:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9289:10:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9300:26:22","memberName":"toScaled18ApplyRateRoundUp","nodeType":"MemberAccess","referencedDeclaration":3086,"src":"9289:37:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":3404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9289:71:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9268:92:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3406,"nodeType":"ExpressionStatement","src":"9268:92:22"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3385,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3382,"src":"9237:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3386,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3356,"src":"9241:6:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9237:10:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3408,"initializationExpression":{"assignments":[3382],"declarations":[{"constant":false,"id":3382,"mutability":"mutable","name":"i","nameLocation":"9230:1:22","nodeType":"VariableDeclaration","scope":3408,"src":"9222:9:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3381,"name":"uint256","nodeType":"ElementaryTypeName","src":"9222:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3384,"initialValue":{"hexValue":"30","id":3383,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9234:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9222:13:22"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":3389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"9249:3:22","subExpression":{"id":3388,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3382,"src":"9251:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3390,"nodeType":"ExpressionStatement","src":"9249:3:22"},"nodeType":"ForStatement","src":"9217:154:22"},{"expression":{"id":3409,"name":"amountsScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3374,"src":"9388:15:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":3354,"id":3410,"nodeType":"Return","src":"9381:22:22"}]},"documentation":{"id":3340,"nodeType":"StructuredDocumentation","src":"8289:506:22","text":" @notice Same as `toScaled18ApplyRateRoundUp`, but returns a new array, leaving the original intact.\n @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n @param scalingFactors The token decimal scaling factors, sorted in token registration order\n @param tokenRates The token rate scaling factors, sorted in token registration order\n @return results The final 18 decimal results, sorted in token registration order, rounded up"},"id":3412,"implemented":true,"kind":"function","modifiers":[],"name":"copyToScaled18ApplyRateRoundUpArray","nameLocation":"8809:35:22","nodeType":"FunctionDefinition","parameters":{"id":3350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3343,"mutability":"mutable","name":"amounts","nameLocation":"8871:7:22","nodeType":"VariableDeclaration","scope":3412,"src":"8854:24:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3341,"name":"uint256","nodeType":"ElementaryTypeName","src":"8854:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3342,"nodeType":"ArrayTypeName","src":"8854:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3346,"mutability":"mutable","name":"scalingFactors","nameLocation":"8905:14:22","nodeType":"VariableDeclaration","scope":3412,"src":"8888:31:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3344,"name":"uint256","nodeType":"ElementaryTypeName","src":"8888:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3345,"nodeType":"ArrayTypeName","src":"8888:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3349,"mutability":"mutable","name":"tokenRates","nameLocation":"8946:10:22","nodeType":"VariableDeclaration","scope":3412,"src":"8929:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3347,"name":"uint256","nodeType":"ElementaryTypeName","src":"8929:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3348,"nodeType":"ArrayTypeName","src":"8929:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8844:118:22"},"returnParameters":{"id":3354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3353,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3412,"src":"8986:16:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3351,"name":"uint256","nodeType":"ElementaryTypeName","src":"8986:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3352,"nodeType":"ArrayTypeName","src":"8986:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8985:18:22"},"scope":3446,"src":"8800:610:22","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3444,"nodeType":"Block","src":"10004:387:22","statements":[{"assignments":[3421],"declarations":[{"constant":false,"id":3421,"mutability":"mutable","name":"roundedRate","nameLocation":"10022:11:22","nodeType":"VariableDeclaration","scope":3444,"src":"10014:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3420,"name":"uint256","nodeType":"ElementaryTypeName","src":"10014:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3422,"nodeType":"VariableDeclarationStatement","src":"10014:19:22"},{"id":3434,"nodeType":"UncheckedBlock","src":"10242:89:22","statements":[{"expression":{"id":3432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3423,"name":"roundedRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3421,"src":"10266:11:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3424,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3415,"src":"10281:4:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":3425,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4766,"src":"10288:10:22","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4766_$","typeString":"type(library FixedPoint)"}},"id":3426,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10299:3:22","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4478,"src":"10288:14:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10281:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3428,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10280:23:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":3429,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4766,"src":"10306:10:22","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4766_$","typeString":"type(library FixedPoint)"}},"id":3430,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10317:3:22","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4478,"src":"10306:14:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10280:40:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10266:54:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3433,"nodeType":"ExpressionStatement","src":"10266:54:22"}]},{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3435,"name":"roundedRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3421,"src":"10347:11:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3436,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3415,"src":"10362:4:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10347:19:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3439,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3415,"src":"10376:4:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":3440,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10383:1:22","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10376:8:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"10347:37:22","trueExpression":{"id":3438,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3415,"src":"10369:4:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3419,"id":3443,"nodeType":"Return","src":"10340:44:22"}]},"documentation":{"id":3413,"nodeType":"StructuredDocumentation","src":"9416:509:22","text":" @notice Rounds up a rate informed by a rate provider.\n @dev Rates calculated by an external rate provider have rounding errors. Intuitively, a rate provider\n rounds the rate down so the pool math is executed with conservative amounts. However, when upscaling or\n downscaling the amount out, the rate should be rounded up to make sure the amounts scaled are conservative.\n @param rate The original rate\n @return roundedRate The final rate, with rounding applied"},"id":3445,"implemented":true,"kind":"function","modifiers":[],"name":"computeRateRoundUp","nameLocation":"9939:18:22","nodeType":"FunctionDefinition","parameters":{"id":3416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3415,"mutability":"mutable","name":"rate","nameLocation":"9966:4:22","nodeType":"VariableDeclaration","scope":3445,"src":"9958:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3414,"name":"uint256","nodeType":"ElementaryTypeName","src":"9958:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9957:14:22"},"returnParameters":{"id":3419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3418,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3445,"src":"9995:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3417,"name":"uint256","nodeType":"ElementaryTypeName","src":"9995:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9994:9:22"},"scope":3446,"src":"9930:461:22","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":3447,"src":"938:9455:22","usedErrors":[],"usedEvents":[]}],"src":"46:10348:22"},"id":22},"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","exportedSymbols":{"AddressArraySlotType":[3462],"AddressToUintMappingSlot":[3458],"IERC20":[6980],"SlotDerivation":[6321],"StorageSlotExtension":[6534],"TokenDeltaMappingSlotType":[3456],"TransientStorageHelpers":[4040],"UintToAddressToBooleanMappingSlot":[3460]},"id":4041,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3448,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:23"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3450,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4041,"sourceUnit":6981,"src":"72:72:23","symbolAliases":[{"foreign":{"id":3449,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"81:6:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"../openzeppelin/StorageSlotExtension.sol","id":3452,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4041,"sourceUnit":6535,"src":"146:80:23","symbolAliases":[{"foreign":{"id":3451,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6534,"src":"155:20:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol","file":"../openzeppelin/SlotDerivation.sol","id":3454,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4041,"sourceUnit":6322,"src":"227:68:23","symbolAliases":[{"foreign":{"id":3453,"name":"SlotDerivation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6321,"src":"236:14:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"TokenDeltaMappingSlotType","id":3456,"name":"TokenDeltaMappingSlotType","nameLocation":"302:25:23","nodeType":"UserDefinedValueTypeDefinition","src":"297:42:23","underlyingType":{"id":3455,"name":"bytes32","nodeType":"ElementaryTypeName","src":"331:7:23","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"canonicalName":"AddressToUintMappingSlot","id":3458,"name":"AddressToUintMappingSlot","nameLocation":"345:24:23","nodeType":"UserDefinedValueTypeDefinition","src":"340:41:23","underlyingType":{"id":3457,"name":"bytes32","nodeType":"ElementaryTypeName","src":"373:7:23","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"canonicalName":"UintToAddressToBooleanMappingSlot","id":3460,"name":"UintToAddressToBooleanMappingSlot","nameLocation":"387:33:23","nodeType":"UserDefinedValueTypeDefinition","src":"382:50:23","underlyingType":{"id":3459,"name":"bytes32","nodeType":"ElementaryTypeName","src":"424:7:23","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"canonicalName":"AddressArraySlotType","id":3462,"name":"AddressArraySlotType","nameLocation":"438:20:23","nodeType":"UserDefinedValueTypeDefinition","src":"433:37:23","underlyingType":{"id":3461,"name":"bytes32","nodeType":"ElementaryTypeName","src":"462:7:23","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"abstract":false,"baseContracts":[],"canonicalName":"TransientStorageHelpers","contractDependencies":[],"contractKind":"library","documentation":{"id":3463,"nodeType":"StructuredDocumentation","src":"472:518:23","text":" @notice Helper functions to read and write values from transient storage, including support for arrays and mappings.\n @dev This is temporary, based on Open Zeppelin's partially released library. When the final version is published, we\n should be able to remove our copies and import directly from OZ. When Solidity catches up and puts direct support\n for transient storage in the language, we should be able to get rid of this altogether.\n This only works on networks where EIP-1153 is supported."},"fullyImplemented":true,"id":4040,"linearizedBaseContracts":[4040],"name":"TransientStorageHelpers","nameLocation":"999:23:23","nodeType":"ContractDefinition","nodes":[{"global":false,"id":3465,"libraryName":{"id":3464,"name":"SlotDerivation","nameLocations":["1035:14:23"],"nodeType":"IdentifierPath","referencedDeclaration":6321,"src":"1035:14:23"},"nodeType":"UsingForDirective","src":"1029:27:23"},{"global":false,"id":3467,"libraryName":{"id":3466,"name":"StorageSlotExtension","nameLocations":["1067:20:23"],"nodeType":"IdentifierPath","referencedDeclaration":6534,"src":"1067:20:23"},"nodeType":"UsingForDirective","src":"1061:33:23"},{"documentation":{"id":3468,"nodeType":"StructuredDocumentation","src":"1100:71:23","text":"@notice An index is out of bounds on an array operation (e.g., at)."},"errorSelector":"0f4ae0e4","id":3470,"name":"TransientIndexOutOfBounds","nameLocation":"1182:25:23","nodeType":"ErrorDefinition","parameters":{"id":3469,"nodeType":"ParameterList","parameters":[],"src":"1207:2:23"},"src":"1176:34:23"},{"body":{"id":3508,"nodeType":"Block","src":"1376:206:23","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"hexValue":"62616c616e6365722d6c6162732e76332e73746f726167652e","id":3487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1478:27:23","typeDescriptions":{"typeIdentifier":"t_stringliteral_8857a2dfd119cac85e8d882459e5ce77774c99d694ba0ba60adafcc29f806768","typeString":"literal_string \"balancer-labs.v3.storage.\""},"value":"balancer-labs.v3.storage."},{"id":3488,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3472,"src":"1507:6:23","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"2e","id":3489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1515:3:23","typeDescriptions":{"typeIdentifier":"t_stringliteral_6f010af653ebe3cb07d297a4ef13366103d392ceffa68dd48232e6e9ff2187bf","typeString":"literal_string \".\""},"value":"."},{"id":3490,"name":"varName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3474,"src":"1520:7:23","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_8857a2dfd119cac85e8d882459e5ce77774c99d694ba0ba60adafcc29f806768","typeString":"literal_string \"balancer-labs.v3.storage.\""},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_stringliteral_6f010af653ebe3cb07d297a4ef13366103d392ceffa68dd48232e6e9ff2187bf","typeString":"literal_string \".\""},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":3485,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1461:3:23","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":3486,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1465:12:23","memberName":"encodePacked","nodeType":"MemberAccess","src":"1461:16:23","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":3491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1461:67:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":3484,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1451:9:23","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":3492,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1451:78:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":3483,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1443:7:23","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3482,"name":"uint256","nodeType":"ElementaryTypeName","src":"1443:7:23","typeDescriptions":{}}},"id":3493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1443:87:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":3494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1533:1:23","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1443:91:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3480,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1432:3:23","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":3481,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1436:6:23","memberName":"encode","nodeType":"MemberAccess","src":"1432:10:23","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":3496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1432:103:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":3479,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1405:9:23","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":3497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1405:144:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":3505,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"1552:23:23","subExpression":{"arguments":[{"arguments":[{"hexValue":"30786666","id":3502,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1569:4:23","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"}],"id":3501,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1561:7:23","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3500,"name":"uint256","nodeType":"ElementaryTypeName","src":"1561:7:23","typeDescriptions":{}}},"id":3503,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1561:13:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3499,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1553:7:23","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":3498,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1553:7:23","typeDescriptions":{}}},"id":3504,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1553:22:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1405:170:23","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":3478,"id":3507,"nodeType":"Return","src":"1386:189:23"}]},"id":3509,"implemented":true,"kind":"function","modifiers":[],"name":"calculateSlot","nameLocation":"1285:13:23","nodeType":"FunctionDefinition","parameters":{"id":3475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3472,"mutability":"mutable","name":"domain","nameLocation":"1313:6:23","nodeType":"VariableDeclaration","scope":3509,"src":"1299:20:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3471,"name":"string","nodeType":"ElementaryTypeName","src":"1299:6:23","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":3474,"mutability":"mutable","name":"varName","nameLocation":"1335:7:23","nodeType":"VariableDeclaration","scope":3509,"src":"1321:21:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3473,"name":"string","nodeType":"ElementaryTypeName","src":"1321:6:23","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1298:45:23"},"returnParameters":{"id":3478,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3477,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3509,"src":"1367:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3476,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1367:7:23","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1366:9:23"},"scope":4040,"src":"1276:306:23","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3535,"nodeType":"Block","src":"1884:108:23","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":3527,"name":"k1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"1962:2:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}],"id":3526,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1954:7:23","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3525,"name":"address","nodeType":"ElementaryTypeName","src":"1954:7:23","typeDescriptions":{}}},"id":3528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1954:11:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":3522,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3512,"src":"1934:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456","typeString":"TokenDeltaMappingSlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456","typeString":"TokenDeltaMappingSlotType"}],"expression":{"id":3520,"name":"TokenDeltaMappingSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3456,"src":"1901:25:23","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456_$","typeString":"type(TokenDeltaMappingSlotType)"}},"id":3521,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1927:6:23","memberName":"unwrap","nodeType":"MemberAccess","src":"1901:32:23","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456_$returns$_t_bytes32_$","typeString":"function (TokenDeltaMappingSlotType) pure returns (bytes32)"}},"id":3523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1901:38:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1940:13:23","memberName":"deriveMapping","nodeType":"MemberAccess","referencedDeclaration":6248,"src":"1901:52:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_address_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,address) pure returns (bytes32)"}},"id":3529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1901:65:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1967:8:23","memberName":"asInt256","nodeType":"MemberAccess","referencedDeclaration":6423,"src":"1901:74:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Int256SlotType_$6408_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Int256SlotType)"}},"id":3531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1901:76:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$6408","typeString":"StorageSlotExtension.Int256SlotType"}},"id":3532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1978:5:23","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":6522,"src":"1901:82:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Int256SlotType_$6408_$returns$_t_int256_$attached_to$_t_userDefinedValueType$_Int256SlotType_$6408_$","typeString":"function (StorageSlotExtension.Int256SlotType) view returns (int256)"}},"id":3533,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1901:84:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":3519,"id":3534,"nodeType":"Return","src":"1894:91:23"}]},"id":3536,"implemented":true,"kind":"function","modifiers":[],"name":"tGet","nameLocation":"1805:4:23","nodeType":"FunctionDefinition","parameters":{"id":3516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3512,"mutability":"mutable","name":"slot","nameLocation":"1836:4:23","nodeType":"VariableDeclaration","scope":3536,"src":"1810:30:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456","typeString":"TokenDeltaMappingSlotType"},"typeName":{"id":3511,"nodeType":"UserDefinedTypeName","pathNode":{"id":3510,"name":"TokenDeltaMappingSlotType","nameLocations":["1810:25:23"],"nodeType":"IdentifierPath","referencedDeclaration":3456,"src":"1810:25:23"},"referencedDeclaration":3456,"src":"1810:25:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456","typeString":"TokenDeltaMappingSlotType"}},"visibility":"internal"},{"constant":false,"id":3515,"mutability":"mutable","name":"k1","nameLocation":"1849:2:23","nodeType":"VariableDeclaration","scope":3536,"src":"1842:9:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":3514,"nodeType":"UserDefinedTypeName","pathNode":{"id":3513,"name":"IERC20","nameLocations":["1842:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"1842:6:23"},"referencedDeclaration":6980,"src":"1842:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1809:43:23"},"returnParameters":{"id":3519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3518,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3536,"src":"1876:6:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3517,"name":"int256","nodeType":"ElementaryTypeName","src":"1876:6:23","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1875:8:23"},"scope":4040,"src":"1796:196:23","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":3564,"nodeType":"Block","src":"2078:107:23","statements":[{"expression":{"arguments":[{"id":3561,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3544,"src":"2172:5:23","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":3555,"name":"k1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3542,"src":"2149:2:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}],"id":3554,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2141:7:23","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3553,"name":"address","nodeType":"ElementaryTypeName","src":"2141:7:23","typeDescriptions":{}}},"id":3556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2141:11:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":3550,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3539,"src":"2121:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456","typeString":"TokenDeltaMappingSlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456","typeString":"TokenDeltaMappingSlotType"}],"expression":{"id":3547,"name":"TokenDeltaMappingSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3456,"src":"2088:25:23","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456_$","typeString":"type(TokenDeltaMappingSlotType)"}},"id":3549,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2114:6:23","memberName":"unwrap","nodeType":"MemberAccess","src":"2088:32:23","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456_$returns$_t_bytes32_$","typeString":"function (TokenDeltaMappingSlotType) pure returns (bytes32)"}},"id":3551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2088:38:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2127:13:23","memberName":"deriveMapping","nodeType":"MemberAccess","referencedDeclaration":6248,"src":"2088:52:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_address_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,address) pure returns (bytes32)"}},"id":3557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2088:65:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2154:8:23","memberName":"asInt256","nodeType":"MemberAccess","referencedDeclaration":6423,"src":"2088:74:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Int256SlotType_$6408_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Int256SlotType)"}},"id":3559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2088:76:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$6408","typeString":"StorageSlotExtension.Int256SlotType"}},"id":3560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2165:6:23","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":6533,"src":"2088:83:23","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Int256SlotType_$6408_$_t_int256_$returns$__$attached_to$_t_userDefinedValueType$_Int256SlotType_$6408_$","typeString":"function (StorageSlotExtension.Int256SlotType,int256)"}},"id":3562,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2088:90:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3563,"nodeType":"ExpressionStatement","src":"2088:90:23"}]},"id":3565,"implemented":true,"kind":"function","modifiers":[],"name":"tSet","nameLocation":"2007:4:23","nodeType":"FunctionDefinition","parameters":{"id":3545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3539,"mutability":"mutable","name":"slot","nameLocation":"2038:4:23","nodeType":"VariableDeclaration","scope":3565,"src":"2012:30:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456","typeString":"TokenDeltaMappingSlotType"},"typeName":{"id":3538,"nodeType":"UserDefinedTypeName","pathNode":{"id":3537,"name":"TokenDeltaMappingSlotType","nameLocations":["2012:25:23"],"nodeType":"IdentifierPath","referencedDeclaration":3456,"src":"2012:25:23"},"referencedDeclaration":3456,"src":"2012:25:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456","typeString":"TokenDeltaMappingSlotType"}},"visibility":"internal"},{"constant":false,"id":3542,"mutability":"mutable","name":"k1","nameLocation":"2051:2:23","nodeType":"VariableDeclaration","scope":3565,"src":"2044:9:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":3541,"nodeType":"UserDefinedTypeName","pathNode":{"id":3540,"name":"IERC20","nameLocations":["2044:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"2044:6:23"},"referencedDeclaration":6980,"src":"2044:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3544,"mutability":"mutable","name":"value","nameLocation":"2062:5:23","nodeType":"VariableDeclaration","scope":3565,"src":"2055:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3543,"name":"int256","nodeType":"ElementaryTypeName","src":"2055:6:23","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"2011:57:23"},"returnParameters":{"id":3546,"nodeType":"ParameterList","parameters":[],"src":"2078:0:23"},"scope":4040,"src":"1998:187:23","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3587,"nodeType":"Block","src":"2281:100:23","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3580,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3570,"src":"2350:3:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":3577,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3568,"src":"2330:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$3458","typeString":"AddressToUintMappingSlot"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$3458","typeString":"AddressToUintMappingSlot"}],"expression":{"id":3575,"name":"AddressToUintMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3458,"src":"2298:24:23","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressToUintMappingSlot_$3458_$","typeString":"type(AddressToUintMappingSlot)"}},"id":3576,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2323:6:23","memberName":"unwrap","nodeType":"MemberAccess","src":"2298:31:23","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressToUintMappingSlot_$3458_$returns$_t_bytes32_$","typeString":"function (AddressToUintMappingSlot) pure returns (bytes32)"}},"id":3578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2298:37:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2336:13:23","memberName":"deriveMapping","nodeType":"MemberAccess","referencedDeclaration":6248,"src":"2298:51:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_address_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,address) pure returns (bytes32)"}},"id":3581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2298:56:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2355:9:23","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":6406,"src":"2298:66:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$6391_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":3583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2298:68:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":3584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2367:5:23","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":6500,"src":"2298:74:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$6391_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":3585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2298:76:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3574,"id":3586,"nodeType":"Return","src":"2291:83:23"}]},"id":3588,"implemented":true,"kind":"function","modifiers":[],"name":"tGet","nameLocation":"2200:4:23","nodeType":"FunctionDefinition","parameters":{"id":3571,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3568,"mutability":"mutable","name":"slot","nameLocation":"2230:4:23","nodeType":"VariableDeclaration","scope":3588,"src":"2205:29:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$3458","typeString":"AddressToUintMappingSlot"},"typeName":{"id":3567,"nodeType":"UserDefinedTypeName","pathNode":{"id":3566,"name":"AddressToUintMappingSlot","nameLocations":["2205:24:23"],"nodeType":"IdentifierPath","referencedDeclaration":3458,"src":"2205:24:23"},"referencedDeclaration":3458,"src":"2205:24:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$3458","typeString":"AddressToUintMappingSlot"}},"visibility":"internal"},{"constant":false,"id":3570,"mutability":"mutable","name":"key","nameLocation":"2244:3:23","nodeType":"VariableDeclaration","scope":3588,"src":"2236:11:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3569,"name":"address","nodeType":"ElementaryTypeName","src":"2236:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2204:44:23"},"returnParameters":{"id":3574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3573,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3588,"src":"2272:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3572,"name":"uint256","nodeType":"ElementaryTypeName","src":"2272:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2271:9:23"},"scope":4040,"src":"2191:190:23","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":3612,"nodeType":"Block","src":"2469:99:23","statements":[{"expression":{"arguments":[{"id":3609,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3595,"src":"2555:5:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3604,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3593,"src":"2531:3:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":3601,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3591,"src":"2511:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$3458","typeString":"AddressToUintMappingSlot"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$3458","typeString":"AddressToUintMappingSlot"}],"expression":{"id":3598,"name":"AddressToUintMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3458,"src":"2479:24:23","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressToUintMappingSlot_$3458_$","typeString":"type(AddressToUintMappingSlot)"}},"id":3600,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2504:6:23","memberName":"unwrap","nodeType":"MemberAccess","src":"2479:31:23","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressToUintMappingSlot_$3458_$returns$_t_bytes32_$","typeString":"function (AddressToUintMappingSlot) pure returns (bytes32)"}},"id":3602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2479:37:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2517:13:23","memberName":"deriveMapping","nodeType":"MemberAccess","referencedDeclaration":6248,"src":"2479:51:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_address_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,address) pure returns (bytes32)"}},"id":3605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2479:56:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2536:9:23","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":6406,"src":"2479:66:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$6391_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":3607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2479:68:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":3608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2548:6:23","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":6511,"src":"2479:75:23","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$6391_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (StorageSlotExtension.Uint256SlotType,uint256)"}},"id":3610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2479:82:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3611,"nodeType":"ExpressionStatement","src":"2479:82:23"}]},"id":3613,"implemented":true,"kind":"function","modifiers":[],"name":"tSet","nameLocation":"2396:4:23","nodeType":"FunctionDefinition","parameters":{"id":3596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3591,"mutability":"mutable","name":"slot","nameLocation":"2426:4:23","nodeType":"VariableDeclaration","scope":3613,"src":"2401:29:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$3458","typeString":"AddressToUintMappingSlot"},"typeName":{"id":3590,"nodeType":"UserDefinedTypeName","pathNode":{"id":3589,"name":"AddressToUintMappingSlot","nameLocations":["2401:24:23"],"nodeType":"IdentifierPath","referencedDeclaration":3458,"src":"2401:24:23"},"referencedDeclaration":3458,"src":"2401:24:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$3458","typeString":"AddressToUintMappingSlot"}},"visibility":"internal"},{"constant":false,"id":3593,"mutability":"mutable","name":"key","nameLocation":"2440:3:23","nodeType":"VariableDeclaration","scope":3613,"src":"2432:11:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3592,"name":"address","nodeType":"ElementaryTypeName","src":"2432:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3595,"mutability":"mutable","name":"value","nameLocation":"2453:5:23","nodeType":"VariableDeclaration","scope":3613,"src":"2445:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3594,"name":"uint256","nodeType":"ElementaryTypeName","src":"2445:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2400:59:23"},"returnParameters":{"id":3597,"nodeType":"ParameterList","parameters":[],"src":"2469:0:23"},"scope":4040,"src":"2387:181:23","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3640,"nodeType":"Block","src":"2724:236:23","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3633,"name":"addressKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3620,"src":"2888:10:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":3630,"name":"uintKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3618,"src":"2848:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3627,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3616,"src":"2811:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460","typeString":"UintToAddressToBooleanMappingSlot"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460","typeString":"UintToAddressToBooleanMappingSlot"}],"expression":{"id":3625,"name":"UintToAddressToBooleanMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3460,"src":"2753:33:23","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460_$","typeString":"type(UintToAddressToBooleanMappingSlot)"}},"id":3626,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2804:6:23","memberName":"unwrap","nodeType":"MemberAccess","src":"2753:57:23","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460_$returns$_t_bytes32_$","typeString":"function (UintToAddressToBooleanMappingSlot) pure returns (bytes32)"}},"id":3628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2753:63:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2834:13:23","memberName":"deriveMapping","nodeType":"MemberAccess","referencedDeclaration":6284,"src":"2753:94:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":3631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2753:103:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2874:13:23","memberName":"deriveMapping","nodeType":"MemberAccess","referencedDeclaration":6248,"src":"2753:134:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_address_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,address) pure returns (bytes32)"}},"id":3634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2753:146:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2917:9:23","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":6372,"src":"2753:173:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$6357_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":3636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2753:175:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6357","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":3637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2946:5:23","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":6456,"src":"2753:198:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_BooleanSlotType_$6357_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_BooleanSlotType_$6357_$","typeString":"function (StorageSlotExtension.BooleanSlotType) view returns (bool)"}},"id":3638,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2753:200:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3624,"id":3639,"nodeType":"Return","src":"2734:219:23"}]},"id":3641,"implemented":true,"kind":"function","modifiers":[],"name":"tGet","nameLocation":"2583:4:23","nodeType":"FunctionDefinition","parameters":{"id":3621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3616,"mutability":"mutable","name":"slot","nameLocation":"2631:4:23","nodeType":"VariableDeclaration","scope":3641,"src":"2597:38:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460","typeString":"UintToAddressToBooleanMappingSlot"},"typeName":{"id":3615,"nodeType":"UserDefinedTypeName","pathNode":{"id":3614,"name":"UintToAddressToBooleanMappingSlot","nameLocations":["2597:33:23"],"nodeType":"IdentifierPath","referencedDeclaration":3460,"src":"2597:33:23"},"referencedDeclaration":3460,"src":"2597:33:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460","typeString":"UintToAddressToBooleanMappingSlot"}},"visibility":"internal"},{"constant":false,"id":3618,"mutability":"mutable","name":"uintKey","nameLocation":"2653:7:23","nodeType":"VariableDeclaration","scope":3641,"src":"2645:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3617,"name":"uint256","nodeType":"ElementaryTypeName","src":"2645:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3620,"mutability":"mutable","name":"addressKey","nameLocation":"2678:10:23","nodeType":"VariableDeclaration","scope":3641,"src":"2670:18:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3619,"name":"address","nodeType":"ElementaryTypeName","src":"2670:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2587:107:23"},"returnParameters":{"id":3624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3623,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3641,"src":"2718:4:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3622,"name":"bool","nodeType":"ElementaryTypeName","src":"2718:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2717:6:23"},"scope":4040,"src":"2574:386:23","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":3670,"nodeType":"Block","src":"3078:203:23","statements":[{"expression":{"arguments":[{"id":3667,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3650,"src":"3268:5:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3662,"name":"addressKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3648,"src":"3211:10:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":3659,"name":"uintKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3646,"src":"3175:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3656,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3644,"src":"3142:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460","typeString":"UintToAddressToBooleanMappingSlot"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460","typeString":"UintToAddressToBooleanMappingSlot"}],"expression":{"id":3653,"name":"UintToAddressToBooleanMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3460,"src":"3088:33:23","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460_$","typeString":"type(UintToAddressToBooleanMappingSlot)"}},"id":3655,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3135:6:23","memberName":"unwrap","nodeType":"MemberAccess","src":"3088:53:23","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460_$returns$_t_bytes32_$","typeString":"function (UintToAddressToBooleanMappingSlot) pure returns (bytes32)"}},"id":3657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3088:59:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3161:13:23","memberName":"deriveMapping","nodeType":"MemberAccess","referencedDeclaration":6284,"src":"3088:86:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":3660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3088:95:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3197:13:23","memberName":"deriveMapping","nodeType":"MemberAccess","referencedDeclaration":6248,"src":"3088:122:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_address_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,address) pure returns (bytes32)"}},"id":3663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3088:134:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3236:9:23","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":6372,"src":"3088:157:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$6357_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":3665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3088:159:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6357","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":3666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3261:6:23","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":6467,"src":"3088:179:23","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$6357_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$6357_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":3668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3088:186:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3669,"nodeType":"ExpressionStatement","src":"3088:186:23"}]},"id":3671,"implemented":true,"kind":"function","modifiers":[],"name":"tSet","nameLocation":"2975:4:23","nodeType":"FunctionDefinition","parameters":{"id":3651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3644,"mutability":"mutable","name":"slot","nameLocation":"3014:4:23","nodeType":"VariableDeclaration","scope":3671,"src":"2980:38:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460","typeString":"UintToAddressToBooleanMappingSlot"},"typeName":{"id":3643,"nodeType":"UserDefinedTypeName","pathNode":{"id":3642,"name":"UintToAddressToBooleanMappingSlot","nameLocations":["2980:33:23"],"nodeType":"IdentifierPath","referencedDeclaration":3460,"src":"2980:33:23"},"referencedDeclaration":3460,"src":"2980:33:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460","typeString":"UintToAddressToBooleanMappingSlot"}},"visibility":"internal"},{"constant":false,"id":3646,"mutability":"mutable","name":"uintKey","nameLocation":"3028:7:23","nodeType":"VariableDeclaration","scope":3671,"src":"3020:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3645,"name":"uint256","nodeType":"ElementaryTypeName","src":"3020:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3648,"mutability":"mutable","name":"addressKey","nameLocation":"3045:10:23","nodeType":"VariableDeclaration","scope":3671,"src":"3037:18:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3647,"name":"address","nodeType":"ElementaryTypeName","src":"3037:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3650,"mutability":"mutable","name":"value","nameLocation":"3062:5:23","nodeType":"VariableDeclaration","scope":3671,"src":"3057:10:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3649,"name":"bool","nodeType":"ElementaryTypeName","src":"3057:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2979:89:23"},"returnParameters":{"id":3652,"nodeType":"ParameterList","parameters":[],"src":"3078:0:23"},"scope":4040,"src":"2966:315:23","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3700,"nodeType":"Block","src":"3432:117:23","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3693,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3674,"src":"3523:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$3458","typeString":"AddressToUintMappingSlot"}},{"id":3694,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3676,"src":"3529:3:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$3458","typeString":"AddressToUintMappingSlot"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3692,"name":"tGet","nodeType":"Identifier","overloadedDeclarations":[3536,3588,3641],"referencedDeclaration":3588,"src":"3518:4:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressToUintMappingSlot_$3458_$_t_address_$returns$_t_uint256_$","typeString":"function (AddressToUintMappingSlot,address) view returns (uint256)"}},"id":3695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3518:15:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":3696,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3678,"src":"3536:5:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3518:23:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3687,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3676,"src":"3494:3:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":3684,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3674,"src":"3474:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$3458","typeString":"AddressToUintMappingSlot"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$3458","typeString":"AddressToUintMappingSlot"}],"expression":{"id":3681,"name":"AddressToUintMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3458,"src":"3442:24:23","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressToUintMappingSlot_$3458_$","typeString":"type(AddressToUintMappingSlot)"}},"id":3683,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3467:6:23","memberName":"unwrap","nodeType":"MemberAccess","src":"3442:31:23","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressToUintMappingSlot_$3458_$returns$_t_bytes32_$","typeString":"function (AddressToUintMappingSlot) pure returns (bytes32)"}},"id":3685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3442:37:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3480:13:23","memberName":"deriveMapping","nodeType":"MemberAccess","referencedDeclaration":6248,"src":"3442:51:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_address_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,address) pure returns (bytes32)"}},"id":3688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3442:56:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3499:9:23","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":6406,"src":"3442:66:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$6391_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":3690,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3442:68:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":3691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3511:6:23","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":6511,"src":"3442:75:23","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$6391_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (StorageSlotExtension.Uint256SlotType,uint256)"}},"id":3698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3442:100:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3699,"nodeType":"ExpressionStatement","src":"3442:100:23"}]},"id":3701,"implemented":true,"kind":"function","modifiers":[],"name":"tAdd","nameLocation":"3359:4:23","nodeType":"FunctionDefinition","parameters":{"id":3679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3674,"mutability":"mutable","name":"slot","nameLocation":"3389:4:23","nodeType":"VariableDeclaration","scope":3701,"src":"3364:29:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$3458","typeString":"AddressToUintMappingSlot"},"typeName":{"id":3673,"nodeType":"UserDefinedTypeName","pathNode":{"id":3672,"name":"AddressToUintMappingSlot","nameLocations":["3364:24:23"],"nodeType":"IdentifierPath","referencedDeclaration":3458,"src":"3364:24:23"},"referencedDeclaration":3458,"src":"3364:24:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$3458","typeString":"AddressToUintMappingSlot"}},"visibility":"internal"},{"constant":false,"id":3676,"mutability":"mutable","name":"key","nameLocation":"3403:3:23","nodeType":"VariableDeclaration","scope":3701,"src":"3395:11:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3675,"name":"address","nodeType":"ElementaryTypeName","src":"3395:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3678,"mutability":"mutable","name":"value","nameLocation":"3416:5:23","nodeType":"VariableDeclaration","scope":3701,"src":"3408:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3677,"name":"uint256","nodeType":"ElementaryTypeName","src":"3408:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3363:59:23"},"returnParameters":{"id":3680,"nodeType":"ParameterList","parameters":[],"src":"3432:0:23"},"scope":4040,"src":"3350:199:23","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3730,"nodeType":"Block","src":"3637:117:23","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3723,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3704,"src":"3728:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$3458","typeString":"AddressToUintMappingSlot"}},{"id":3724,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3706,"src":"3734:3:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$3458","typeString":"AddressToUintMappingSlot"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3722,"name":"tGet","nodeType":"Identifier","overloadedDeclarations":[3536,3588,3641],"referencedDeclaration":3588,"src":"3723:4:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressToUintMappingSlot_$3458_$_t_address_$returns$_t_uint256_$","typeString":"function (AddressToUintMappingSlot,address) view returns (uint256)"}},"id":3725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3723:15:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3726,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3708,"src":"3741:5:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3723:23:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3717,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3706,"src":"3699:3:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":3714,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3704,"src":"3679:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$3458","typeString":"AddressToUintMappingSlot"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$3458","typeString":"AddressToUintMappingSlot"}],"expression":{"id":3711,"name":"AddressToUintMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3458,"src":"3647:24:23","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressToUintMappingSlot_$3458_$","typeString":"type(AddressToUintMappingSlot)"}},"id":3713,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3672:6:23","memberName":"unwrap","nodeType":"MemberAccess","src":"3647:31:23","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressToUintMappingSlot_$3458_$returns$_t_bytes32_$","typeString":"function (AddressToUintMappingSlot) pure returns (bytes32)"}},"id":3715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3647:37:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3685:13:23","memberName":"deriveMapping","nodeType":"MemberAccess","referencedDeclaration":6248,"src":"3647:51:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_address_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,address) pure returns (bytes32)"}},"id":3718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3647:56:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3704:9:23","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":6406,"src":"3647:66:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$6391_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":3720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3647:68:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":3721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3716:6:23","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":6511,"src":"3647:75:23","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$6391_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (StorageSlotExtension.Uint256SlotType,uint256)"}},"id":3728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3647:100:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3729,"nodeType":"ExpressionStatement","src":"3647:100:23"}]},"id":3731,"implemented":true,"kind":"function","modifiers":[],"name":"tSub","nameLocation":"3564:4:23","nodeType":"FunctionDefinition","parameters":{"id":3709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3704,"mutability":"mutable","name":"slot","nameLocation":"3594:4:23","nodeType":"VariableDeclaration","scope":3731,"src":"3569:29:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$3458","typeString":"AddressToUintMappingSlot"},"typeName":{"id":3703,"nodeType":"UserDefinedTypeName","pathNode":{"id":3702,"name":"AddressToUintMappingSlot","nameLocations":["3569:24:23"],"nodeType":"IdentifierPath","referencedDeclaration":3458,"src":"3569:24:23"},"referencedDeclaration":3458,"src":"3569:24:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$3458","typeString":"AddressToUintMappingSlot"}},"visibility":"internal"},{"constant":false,"id":3706,"mutability":"mutable","name":"key","nameLocation":"3608:3:23","nodeType":"VariableDeclaration","scope":3731,"src":"3600:11:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3705,"name":"address","nodeType":"ElementaryTypeName","src":"3600:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3708,"mutability":"mutable","name":"value","nameLocation":"3621:5:23","nodeType":"VariableDeclaration","scope":3731,"src":"3613:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3707,"name":"uint256","nodeType":"ElementaryTypeName","src":"3613:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3568:59:23"},"returnParameters":{"id":3710,"nodeType":"ParameterList","parameters":[],"src":"3637:0:23"},"scope":4040,"src":"3555:199:23","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3748,"nodeType":"Block","src":"4044:77:23","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3741,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3734,"src":"4089:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}],"expression":{"id":3739,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3462,"src":"4061:20:23","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$3462_$","typeString":"type(AddressArraySlotType)"}},"id":3740,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4082:6:23","memberName":"unwrap","nodeType":"MemberAccess","src":"4061:27:23","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$3462_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":3742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4061:33:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4095:9:23","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":6406,"src":"4061:43:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$6391_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":3744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4061:45:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":3745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4107:5:23","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":6500,"src":"4061:51:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$6391_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":3746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4061:53:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3738,"id":3747,"nodeType":"Return","src":"4054:60:23"}]},"id":3749,"implemented":true,"kind":"function","modifiers":[],"name":"tLength","nameLocation":"3977:7:23","nodeType":"FunctionDefinition","parameters":{"id":3735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3734,"mutability":"mutable","name":"slot","nameLocation":"4006:4:23","nodeType":"VariableDeclaration","scope":3749,"src":"3985:25:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"},"typeName":{"id":3733,"nodeType":"UserDefinedTypeName","pathNode":{"id":3732,"name":"AddressArraySlotType","nameLocations":["3985:20:23"],"nodeType":"IdentifierPath","referencedDeclaration":3462,"src":"3985:20:23"},"referencedDeclaration":3462,"src":"3985:20:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}},"visibility":"internal"}],"src":"3984:27:23"},"returnParameters":{"id":3738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3737,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3749,"src":"4035:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3736,"name":"uint256","nodeType":"ElementaryTypeName","src":"4035:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4034:9:23"},"scope":4040,"src":"3968:153:23","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":3778,"nodeType":"Block","src":"4214:152:23","statements":[{"expression":{"arguments":[{"id":3760,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3752,"src":"4249:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}},{"id":3761,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3754,"src":"4255:5:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3759,"name":"_ensureIndexWithinBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3839,"src":"4224:24:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressArraySlotType_$3462_$_t_uint256_$returns$__$","typeString":"function (AddressArraySlotType,uint256) view"}},"id":3762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4224:37:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3763,"nodeType":"ExpressionStatement","src":"4224:37:23"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3771,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3754,"src":"4333:5:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3766,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3752,"src":"4306:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}],"expression":{"id":3764,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3462,"src":"4278:20:23","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$3462_$","typeString":"type(AddressArraySlotType)"}},"id":3765,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4299:6:23","memberName":"unwrap","nodeType":"MemberAccess","src":"4278:27:23","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$3462_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":3767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4278:33:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4312:11:23","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":6236,"src":"4278:45:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":3769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4278:47:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4326:6:23","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":6226,"src":"4278:54:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":3772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4278:61:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4340:9:23","memberName":"asAddress","nodeType":"MemberAccess","referencedDeclaration":6355,"src":"4278:71:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$6340_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":3774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4278:73:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6340","typeString":"StorageSlotExtension.AddressSlotType"}},"id":3775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4352:5:23","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":6434,"src":"4278:79:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressSlotType_$6340_$returns$_t_address_$attached_to$_t_userDefinedValueType$_AddressSlotType_$6340_$","typeString":"function (StorageSlotExtension.AddressSlotType) view returns (address)"}},"id":3776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4278:81:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":3758,"id":3777,"nodeType":"Return","src":"4271:88:23"}]},"id":3779,"implemented":true,"kind":"function","modifiers":[],"name":"tAt","nameLocation":"4136:3:23","nodeType":"FunctionDefinition","parameters":{"id":3755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3752,"mutability":"mutable","name":"slot","nameLocation":"4161:4:23","nodeType":"VariableDeclaration","scope":3779,"src":"4140:25:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"},"typeName":{"id":3751,"nodeType":"UserDefinedTypeName","pathNode":{"id":3750,"name":"AddressArraySlotType","nameLocations":["4140:20:23"],"nodeType":"IdentifierPath","referencedDeclaration":3462,"src":"4140:20:23"},"referencedDeclaration":3462,"src":"4140:20:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}},"visibility":"internal"},{"constant":false,"id":3754,"mutability":"mutable","name":"index","nameLocation":"4175:5:23","nodeType":"VariableDeclaration","scope":3779,"src":"4167:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3753,"name":"uint256","nodeType":"ElementaryTypeName","src":"4167:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4139:42:23"},"returnParameters":{"id":3758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3757,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3779,"src":"4205:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3756,"name":"address","nodeType":"ElementaryTypeName","src":"4205:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4204:9:23"},"scope":4040,"src":"4127:239:23","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":3810,"nodeType":"Block","src":"4452:151:23","statements":[{"expression":{"arguments":[{"id":3790,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3782,"src":"4487:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}},{"id":3791,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3784,"src":"4493:5:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3789,"name":"_ensureIndexWithinBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3839,"src":"4462:24:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressArraySlotType_$3462_$_t_uint256_$returns$__$","typeString":"function (AddressArraySlotType,uint256) view"}},"id":3792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4462:37:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3793,"nodeType":"ExpressionStatement","src":"4462:37:23"},{"expression":{"arguments":[{"id":3807,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3786,"src":"4590:5:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3802,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3784,"src":"4564:5:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3797,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3782,"src":"4537:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}],"expression":{"id":3794,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3462,"src":"4509:20:23","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$3462_$","typeString":"type(AddressArraySlotType)"}},"id":3796,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4530:6:23","memberName":"unwrap","nodeType":"MemberAccess","src":"4509:27:23","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$3462_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":3798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4509:33:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4543:11:23","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":6236,"src":"4509:45:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":3800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4509:47:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4557:6:23","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":6226,"src":"4509:54:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":3803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4509:61:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4571:9:23","memberName":"asAddress","nodeType":"MemberAccess","referencedDeclaration":6355,"src":"4509:71:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$6340_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":3805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4509:73:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6340","typeString":"StorageSlotExtension.AddressSlotType"}},"id":3806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4583:6:23","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":6445,"src":"4509:80:23","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressSlotType_$6340_$_t_address_$returns$__$attached_to$_t_userDefinedValueType$_AddressSlotType_$6340_$","typeString":"function (StorageSlotExtension.AddressSlotType,address)"}},"id":3808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4509:87:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3809,"nodeType":"ExpressionStatement","src":"4509:87:23"}]},"id":3811,"implemented":true,"kind":"function","modifiers":[],"name":"tSet","nameLocation":"4381:4:23","nodeType":"FunctionDefinition","parameters":{"id":3787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3782,"mutability":"mutable","name":"slot","nameLocation":"4407:4:23","nodeType":"VariableDeclaration","scope":3811,"src":"4386:25:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"},"typeName":{"id":3781,"nodeType":"UserDefinedTypeName","pathNode":{"id":3780,"name":"AddressArraySlotType","nameLocations":["4386:20:23"],"nodeType":"IdentifierPath","referencedDeclaration":3462,"src":"4386:20:23"},"referencedDeclaration":3462,"src":"4386:20:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}},"visibility":"internal"},{"constant":false,"id":3784,"mutability":"mutable","name":"index","nameLocation":"4421:5:23","nodeType":"VariableDeclaration","scope":3811,"src":"4413:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3783,"name":"uint256","nodeType":"ElementaryTypeName","src":"4413:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3786,"mutability":"mutable","name":"value","nameLocation":"4436:5:23","nodeType":"VariableDeclaration","scope":3811,"src":"4428:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3785,"name":"address","nodeType":"ElementaryTypeName","src":"4428:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4385:57:23"},"returnParameters":{"id":3788,"nodeType":"ParameterList","parameters":[],"src":"4452:0:23"},"scope":4040,"src":"4372:231:23","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3838,"nodeType":"Block","src":"4698:176:23","statements":[{"assignments":[3820],"declarations":[{"constant":false,"id":3820,"mutability":"mutable","name":"length","nameLocation":"4716:6:23","nodeType":"VariableDeclaration","scope":3838,"src":"4708:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3819,"name":"uint256","nodeType":"ElementaryTypeName","src":"4708:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3829,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3823,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3814,"src":"4753:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}],"expression":{"id":3821,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3462,"src":"4725:20:23","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$3462_$","typeString":"type(AddressArraySlotType)"}},"id":3822,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4746:6:23","memberName":"unwrap","nodeType":"MemberAccess","src":"4725:27:23","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$3462_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":3824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4725:33:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4759:9:23","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":6406,"src":"4725:43:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$6391_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":3826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4725:45:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":3827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4771:5:23","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":6500,"src":"4725:51:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$6391_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":3828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4725:53:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4708:70:23"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3830,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3816,"src":"4792:5:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3831,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3820,"src":"4801:6:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4792:15:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3837,"nodeType":"IfStatement","src":"4788:80:23","trueBody":{"id":3836,"nodeType":"Block","src":"4809:59:23","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3833,"name":"TransientIndexOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3470,"src":"4830:25:23","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4830:27:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3835,"nodeType":"RevertStatement","src":"4823:34:23"}]}}]},"id":3839,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureIndexWithinBounds","nameLocation":"4618:24:23","nodeType":"FunctionDefinition","parameters":{"id":3817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3814,"mutability":"mutable","name":"slot","nameLocation":"4664:4:23","nodeType":"VariableDeclaration","scope":3839,"src":"4643:25:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"},"typeName":{"id":3813,"nodeType":"UserDefinedTypeName","pathNode":{"id":3812,"name":"AddressArraySlotType","nameLocations":["4643:20:23"],"nodeType":"IdentifierPath","referencedDeclaration":3462,"src":"4643:20:23"},"referencedDeclaration":3462,"src":"4643:20:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}},"visibility":"internal"},{"constant":false,"id":3816,"mutability":"mutable","name":"index","nameLocation":"4678:5:23","nodeType":"VariableDeclaration","scope":3839,"src":"4670:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3815,"name":"uint256","nodeType":"ElementaryTypeName","src":"4670:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4642:42:23"},"returnParameters":{"id":3818,"nodeType":"ParameterList","parameters":[],"src":"4698:0:23"},"scope":4040,"src":"4609:265:23","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":3863,"nodeType":"Block","src":"4976:105:23","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3856,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3844,"src":"5048:5:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3851,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"5021:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}],"expression":{"id":3849,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3462,"src":"4993:20:23","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$3462_$","typeString":"type(AddressArraySlotType)"}},"id":3850,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5014:6:23","memberName":"unwrap","nodeType":"MemberAccess","src":"4993:27:23","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$3462_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":3852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4993:33:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5027:11:23","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":6236,"src":"4993:45:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":3854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4993:47:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5041:6:23","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":6226,"src":"4993:54:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":3857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4993:61:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5055:9:23","memberName":"asAddress","nodeType":"MemberAccess","referencedDeclaration":6355,"src":"4993:71:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$6340_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":3859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4993:73:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6340","typeString":"StorageSlotExtension.AddressSlotType"}},"id":3860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5067:5:23","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":6434,"src":"4993:79:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressSlotType_$6340_$returns$_t_address_$attached_to$_t_userDefinedValueType$_AddressSlotType_$6340_$","typeString":"function (StorageSlotExtension.AddressSlotType) view returns (address)"}},"id":3861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4993:81:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":3848,"id":3862,"nodeType":"Return","src":"4986:88:23"}]},"id":3864,"implemented":true,"kind":"function","modifiers":[],"name":"tUncheckedAt","nameLocation":"4889:12:23","nodeType":"FunctionDefinition","parameters":{"id":3845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3842,"mutability":"mutable","name":"slot","nameLocation":"4923:4:23","nodeType":"VariableDeclaration","scope":3864,"src":"4902:25:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"},"typeName":{"id":3841,"nodeType":"UserDefinedTypeName","pathNode":{"id":3840,"name":"AddressArraySlotType","nameLocations":["4902:20:23"],"nodeType":"IdentifierPath","referencedDeclaration":3462,"src":"4902:20:23"},"referencedDeclaration":3462,"src":"4902:20:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}},"visibility":"internal"},{"constant":false,"id":3844,"mutability":"mutable","name":"index","nameLocation":"4937:5:23","nodeType":"VariableDeclaration","scope":3864,"src":"4929:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3843,"name":"uint256","nodeType":"ElementaryTypeName","src":"4929:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4901:42:23"},"returnParameters":{"id":3848,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3847,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3864,"src":"4967:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3846,"name":"address","nodeType":"ElementaryTypeName","src":"4967:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4966:9:23"},"scope":4040,"src":"4880:201:23","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":3890,"nodeType":"Block","src":"5176:104:23","statements":[{"expression":{"arguments":[{"id":3887,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3871,"src":"5267:5:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3882,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3869,"src":"5241:5:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3877,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3867,"src":"5214:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}],"expression":{"id":3874,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3462,"src":"5186:20:23","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$3462_$","typeString":"type(AddressArraySlotType)"}},"id":3876,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5207:6:23","memberName":"unwrap","nodeType":"MemberAccess","src":"5186:27:23","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$3462_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":3878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5186:33:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5220:11:23","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":6236,"src":"5186:45:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":3880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5186:47:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5234:6:23","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":6226,"src":"5186:54:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":3883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5186:61:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5248:9:23","memberName":"asAddress","nodeType":"MemberAccess","referencedDeclaration":6355,"src":"5186:71:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$6340_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":3885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5186:73:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6340","typeString":"StorageSlotExtension.AddressSlotType"}},"id":3886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5260:6:23","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":6445,"src":"5186:80:23","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressSlotType_$6340_$_t_address_$returns$__$attached_to$_t_userDefinedValueType$_AddressSlotType_$6340_$","typeString":"function (StorageSlotExtension.AddressSlotType,address)"}},"id":3888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5186:87:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3889,"nodeType":"ExpressionStatement","src":"5186:87:23"}]},"id":3891,"implemented":true,"kind":"function","modifiers":[],"name":"tUncheckedSet","nameLocation":"5096:13:23","nodeType":"FunctionDefinition","parameters":{"id":3872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3867,"mutability":"mutable","name":"slot","nameLocation":"5131:4:23","nodeType":"VariableDeclaration","scope":3891,"src":"5110:25:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"},"typeName":{"id":3866,"nodeType":"UserDefinedTypeName","pathNode":{"id":3865,"name":"AddressArraySlotType","nameLocations":["5110:20:23"],"nodeType":"IdentifierPath","referencedDeclaration":3462,"src":"5110:20:23"},"referencedDeclaration":3462,"src":"5110:20:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}},"visibility":"internal"},{"constant":false,"id":3869,"mutability":"mutable","name":"index","nameLocation":"5145:5:23","nodeType":"VariableDeclaration","scope":3891,"src":"5137:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3868,"name":"uint256","nodeType":"ElementaryTypeName","src":"5137:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3871,"mutability":"mutable","name":"value","nameLocation":"5160:5:23","nodeType":"VariableDeclaration","scope":3891,"src":"5152:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3870,"name":"address","nodeType":"ElementaryTypeName","src":"5152:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5109:57:23"},"returnParameters":{"id":3873,"nodeType":"ParameterList","parameters":[],"src":"5176:0:23"},"scope":4040,"src":"5087:193:23","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3939,"nodeType":"Block","src":"5352:393:23","statements":[{"assignments":[3900],"declarations":[{"constant":false,"id":3900,"mutability":"mutable","name":"length","nameLocation":"5444:6:23","nodeType":"VariableDeclaration","scope":3939,"src":"5436:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3899,"name":"uint256","nodeType":"ElementaryTypeName","src":"5436:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3909,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3903,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3894,"src":"5481:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}],"expression":{"id":3901,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3462,"src":"5453:20:23","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$3462_$","typeString":"type(AddressArraySlotType)"}},"id":3902,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5474:6:23","memberName":"unwrap","nodeType":"MemberAccess","src":"5453:27:23","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$3462_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":3904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5453:33:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5487:9:23","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":6406,"src":"5453:43:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$6391_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":3906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5453:45:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":3907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5499:5:23","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":6500,"src":"5453:51:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$6391_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":3908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5453:53:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5436:70:23"},{"expression":{"arguments":[{"id":3923,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3896,"src":"5598:5:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3918,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3900,"src":"5571:6:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3913,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3894,"src":"5544:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}],"expression":{"id":3910,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3462,"src":"5516:20:23","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$3462_$","typeString":"type(AddressArraySlotType)"}},"id":3912,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5537:6:23","memberName":"unwrap","nodeType":"MemberAccess","src":"5516:27:23","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$3462_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":3914,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5516:33:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5550:11:23","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":6236,"src":"5516:45:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":3916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5516:47:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5564:6:23","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":6226,"src":"5516:54:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":3919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5516:62:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5579:9:23","memberName":"asAddress","nodeType":"MemberAccess","referencedDeclaration":6355,"src":"5516:72:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$6340_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":3921,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5516:74:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6340","typeString":"StorageSlotExtension.AddressSlotType"}},"id":3922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5591:6:23","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":6445,"src":"5516:81:23","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressSlotType_$6340_$_t_address_$returns$__$attached_to$_t_userDefinedValueType$_AddressSlotType_$6340_$","typeString":"function (StorageSlotExtension.AddressSlotType,address)"}},"id":3924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5516:88:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3925,"nodeType":"ExpressionStatement","src":"5516:88:23"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3934,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3900,"src":"5727:6:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":3935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5736:1:23","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5727:10:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3929,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3894,"src":"5702:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}],"expression":{"id":3926,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3462,"src":"5674:20:23","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$3462_$","typeString":"type(AddressArraySlotType)"}},"id":3928,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5695:6:23","memberName":"unwrap","nodeType":"MemberAccess","src":"5674:27:23","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$3462_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":3930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5674:33:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5708:9:23","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":6406,"src":"5674:43:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$6391_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":3932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5674:45:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":3933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5720:6:23","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":6511,"src":"5674:52:23","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$6391_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (StorageSlotExtension.Uint256SlotType,uint256)"}},"id":3937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5674:64:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3938,"nodeType":"ExpressionStatement","src":"5674:64:23"}]},"id":3940,"implemented":true,"kind":"function","modifiers":[],"name":"tPush","nameLocation":"5295:5:23","nodeType":"FunctionDefinition","parameters":{"id":3897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3894,"mutability":"mutable","name":"slot","nameLocation":"5322:4:23","nodeType":"VariableDeclaration","scope":3940,"src":"5301:25:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"},"typeName":{"id":3893,"nodeType":"UserDefinedTypeName","pathNode":{"id":3892,"name":"AddressArraySlotType","nameLocations":["5301:20:23"],"nodeType":"IdentifierPath","referencedDeclaration":3462,"src":"5301:20:23"},"referencedDeclaration":3462,"src":"5301:20:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}},"visibility":"internal"},{"constant":false,"id":3896,"mutability":"mutable","name":"value","nameLocation":"5336:5:23","nodeType":"VariableDeclaration","scope":3940,"src":"5328:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3895,"name":"address","nodeType":"ElementaryTypeName","src":"5328:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5300:42:23"},"returnParameters":{"id":3898,"nodeType":"ParameterList","parameters":[],"src":"5352:0:23"},"scope":4040,"src":"5286:459:23","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4004,"nodeType":"Block","src":"5825:654:23","statements":[{"assignments":[3949],"declarations":[{"constant":false,"id":3949,"mutability":"mutable","name":"lastElementIndex","nameLocation":"5843:16:23","nodeType":"VariableDeclaration","scope":4004,"src":"5835:24:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3948,"name":"uint256","nodeType":"ElementaryTypeName","src":"5835:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3960,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3952,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3943,"src":"5890:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}],"expression":{"id":3950,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3462,"src":"5862:20:23","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$3462_$","typeString":"type(AddressArraySlotType)"}},"id":3951,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5883:6:23","memberName":"unwrap","nodeType":"MemberAccess","src":"5862:27:23","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$3462_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":3953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5862:33:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5896:9:23","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":6406,"src":"5862:43:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$6391_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":3955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5862:45:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":3956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5908:5:23","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":6500,"src":"5862:51:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$6391_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":3957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5862:53:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":3958,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5918:1:23","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5862:57:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5835:84:23"},{"expression":{"arguments":[{"id":3969,"name":"lastElementIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3949,"src":"6092:16:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3964,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3943,"src":"6067:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}],"expression":{"id":3961,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3462,"src":"6039:20:23","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$3462_$","typeString":"type(AddressArraySlotType)"}},"id":3963,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6060:6:23","memberName":"unwrap","nodeType":"MemberAccess","src":"6039:27:23","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$3462_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":3965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6039:33:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6073:9:23","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":6406,"src":"6039:43:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$6391_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":3967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6039:45:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":3968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6085:6:23","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":6511,"src":"6039:52:23","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$6391_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (StorageSlotExtension.Uint256SlotType,uint256)"}},"id":3970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6039:70:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3971,"nodeType":"ExpressionStatement","src":"6039:70:23"},{"assignments":[3976],"declarations":[{"constant":false,"id":3976,"mutability":"mutable","name":"lastElementSlot","nameLocation":"6156:15:23","nodeType":"VariableDeclaration","scope":4004,"src":"6119:52:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6340","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":3975,"nodeType":"UserDefinedTypeName","pathNode":{"id":3974,"name":"StorageSlotExtension.AddressSlotType","nameLocations":["6119:20:23","6140:15:23"],"nodeType":"IdentifierPath","referencedDeclaration":6340,"src":"6119:36:23"},"referencedDeclaration":6340,"src":"6119:36:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6340","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"id":3988,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3984,"name":"lastElementIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3949,"src":"6268:16:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3979,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3943,"src":"6215:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}],"expression":{"id":3977,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3462,"src":"6174:20:23","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$3462_$","typeString":"type(AddressArraySlotType)"}},"id":3978,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6208:6:23","memberName":"unwrap","nodeType":"MemberAccess","src":"6174:40:23","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$3462_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":3980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6174:46:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6234:11:23","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":6236,"src":"6174:71:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":3982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6174:73:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6261:6:23","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":6226,"src":"6174:93:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":3985,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6174:111:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6299:9:23","memberName":"asAddress","nodeType":"MemberAccess","referencedDeclaration":6355,"src":"6174:134:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$6340_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":3987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6174:136:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6340","typeString":"StorageSlotExtension.AddressSlotType"}},"nodeType":"VariableDeclarationStatement","src":"6119:191:23"},{"expression":{"id":3993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3989,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3946,"src":"6352:5:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3990,"name":"lastElementSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3976,"src":"6360:15:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6340","typeString":"StorageSlotExtension.AddressSlotType"}},"id":3991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6376:5:23","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":6434,"src":"6360:21:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressSlotType_$6340_$returns$_t_address_$attached_to$_t_userDefinedValueType$_AddressSlotType_$6340_$","typeString":"function (StorageSlotExtension.AddressSlotType) view returns (address)"}},"id":3992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6360:23:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6352:31:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3994,"nodeType":"ExpressionStatement","src":"6352:31:23"},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":4000,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6469:1:23","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":3999,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6461:7:23","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3998,"name":"address","nodeType":"ElementaryTypeName","src":"6461:7:23","typeDescriptions":{}}},"id":4001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6461:10:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3995,"name":"lastElementSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3976,"src":"6438:15:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6340","typeString":"StorageSlotExtension.AddressSlotType"}},"id":3997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6454:6:23","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":6445,"src":"6438:22:23","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressSlotType_$6340_$_t_address_$returns$__$attached_to$_t_userDefinedValueType$_AddressSlotType_$6340_$","typeString":"function (StorageSlotExtension.AddressSlotType,address)"}},"id":4002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6438:34:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4003,"nodeType":"ExpressionStatement","src":"6438:34:23"}]},"id":4005,"implemented":true,"kind":"function","modifiers":[],"name":"tPop","nameLocation":"5760:4:23","nodeType":"FunctionDefinition","parameters":{"id":3944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3943,"mutability":"mutable","name":"slot","nameLocation":"5786:4:23","nodeType":"VariableDeclaration","scope":4005,"src":"5765:25:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"},"typeName":{"id":3942,"nodeType":"UserDefinedTypeName","pathNode":{"id":3941,"name":"AddressArraySlotType","nameLocations":["5765:20:23"],"nodeType":"IdentifierPath","referencedDeclaration":3462,"src":"5765:20:23"},"referencedDeclaration":3462,"src":"5765:20:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$3462","typeString":"AddressArraySlotType"}},"visibility":"internal"}],"src":"5764:27:23"},"returnParameters":{"id":3947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3946,"mutability":"mutable","name":"value","nameLocation":"5818:5:23","nodeType":"VariableDeclaration","scope":4005,"src":"5810:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3945,"name":"address","nodeType":"ElementaryTypeName","src":"5810:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5809:15:23"},"scope":4040,"src":"5751:728:23","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4021,"nodeType":"Block","src":"6769:46:23","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4014,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4008,"src":"6791:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":4015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6796:5:23","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":6500,"src":"6791:10:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$6391_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":4016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6791:12:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4017,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6806:1:23","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6791:16:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4011,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4008,"src":"6779:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":4013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6784:6:23","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":6511,"src":"6779:11:23","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$6391_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (StorageSlotExtension.Uint256SlotType,uint256)"}},"id":4019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6779:29:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4020,"nodeType":"ExpressionStatement","src":"6779:29:23"}]},"id":4022,"implemented":true,"kind":"function","modifiers":[],"name":"tIncrement","nameLocation":"6706:10:23","nodeType":"FunctionDefinition","parameters":{"id":4009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4008,"mutability":"mutable","name":"slot","nameLocation":"6754:4:23","nodeType":"VariableDeclaration","scope":4022,"src":"6717:41:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":4007,"nodeType":"UserDefinedTypeName","pathNode":{"id":4006,"name":"StorageSlotExtension.Uint256SlotType","nameLocations":["6717:20:23","6738:15:23"],"nodeType":"IdentifierPath","referencedDeclaration":6391,"src":"6717:36:23"},"referencedDeclaration":6391,"src":"6717:36:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"6716:43:23"},"returnParameters":{"id":4010,"nodeType":"ParameterList","parameters":[],"src":"6769:0:23"},"scope":4040,"src":"6697:118:23","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4038,"nodeType":"Block","src":"6893:46:23","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4031,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4025,"src":"6915:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":4032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6920:5:23","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":6500,"src":"6915:10:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$6391_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":4033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6915:12:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":4034,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6930:1:23","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6915:16:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4028,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4025,"src":"6903:4:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":4030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6908:6:23","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":6511,"src":"6903:11:23","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$6391_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (StorageSlotExtension.Uint256SlotType,uint256)"}},"id":4036,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6903:29:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4037,"nodeType":"ExpressionStatement","src":"6903:29:23"}]},"id":4039,"implemented":true,"kind":"function","modifiers":[],"name":"tDecrement","nameLocation":"6830:10:23","nodeType":"FunctionDefinition","parameters":{"id":4026,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4025,"mutability":"mutable","name":"slot","nameLocation":"6878:4:23","nodeType":"VariableDeclaration","scope":4039,"src":"6841:41:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":4024,"nodeType":"UserDefinedTypeName","pathNode":{"id":4023,"name":"StorageSlotExtension.Uint256SlotType","nameLocations":["6841:20:23","6862:15:23"],"nodeType":"IdentifierPath","referencedDeclaration":6391,"src":"6841:36:23"},"referencedDeclaration":6391,"src":"6841:36:23","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"6840:43:23"},"returnParameters":{"id":4027,"nodeType":"ParameterList","parameters":[],"src":"6893:0:23"},"scope":4040,"src":"6821:118:23","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":4041,"src":"991:5950:23","usedErrors":[3470],"usedEvents":[]}],"src":"46:6896:23"},"id":23},"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol","exportedSymbols":{"Math":[9974],"SignedMath":[11834],"WordCodec":[4467]},"id":4468,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4042,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:24"},{"absolutePath":"@openzeppelin/contracts/utils/math/SignedMath.sol","file":"@openzeppelin/contracts/utils/math/SignedMath.sol","id":4044,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4468,"sourceUnit":11835,"src":"72:79:24","symbolAliases":[{"foreign":{"id":4043,"name":"SignedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11834,"src":"81:10:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","file":"@openzeppelin/contracts/utils/math/Math.sol","id":4046,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4468,"sourceUnit":9975,"src":"152:67:24","symbolAliases":[{"foreign":{"id":4045,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9974,"src":"161:4:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"WordCodec","contractDependencies":[],"contractKind":"library","documentation":{"id":4047,"nodeType":"StructuredDocumentation","src":"221:1186:24","text":" @notice Library for encoding and decoding values stored inside a 256 bit word.\n @dev Typically used to pack multiple values in a single slot, saving gas by performing fewer storage accesses.\n Each value is defined by its size and the least significant bit in the word, also known as offset. For example, two\n 128 bit values may be encoded in a word by assigning one an offset of 0, and the other an offset of 128.\n We could use Solidity structs to pack values together in a single storage slot instead of relying on a custom and\n error-prone library, but unfortunately Solidity only allows for structs to live in either storage, calldata or\n memory. Because a memory struct uses not just memory but also a slot in the stack (to store its memory location),\n using memory for word-sized values (i.e. of 256 bits or less) is strictly less gas performant, and doesn't even\n prevent stack-too-deep issues. This is compounded by the fact that Balancer contracts typically are memory-\n intensive, and the cost of accessing memory increases quadratically with the number of allocated words. Manual\n packing and unpacking is therefore the preferred approach."},"fullyImplemented":true,"id":4467,"linearizedBaseContracts":[4467],"name":"WordCodec","nameLocation":"1416:9:24","nodeType":"ContractDefinition","nodes":[{"global":false,"id":4050,"libraryName":{"id":4048,"name":"Math","nameLocations":["1438:4:24"],"nodeType":"IdentifierPath","referencedDeclaration":9974,"src":"1438:4:24"},"nodeType":"UsingForDirective","src":"1432:23:24","typeName":{"id":4049,"name":"uint256","nodeType":"ElementaryTypeName","src":"1447:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":4053,"libraryName":{"id":4051,"name":"SignedMath","nameLocations":["1466:10:24"],"nodeType":"IdentifierPath","referencedDeclaration":11834,"src":"1466:10:24"},"nodeType":"UsingForDirective","src":"1460:28:24","typeName":{"id":4052,"name":"int256","nodeType":"ElementaryTypeName","src":"1481:6:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}},{"documentation":{"id":4054,"nodeType":"StructuredDocumentation","src":"1537:50:24","text":"@notice Function called with an invalid value."},"errorSelector":"e4337c05","id":4056,"name":"CodecOverflow","nameLocation":"1598:13:24","nodeType":"ErrorDefinition","parameters":{"id":4055,"nodeType":"ParameterList","parameters":[],"src":"1611:2:24"},"src":"1592:22:24"},{"documentation":{"id":4057,"nodeType":"StructuredDocumentation","src":"1620:64:24","text":"@notice Function called with an invalid bitLength or offset."},"errorSelector":"b4120f14","id":4059,"name":"OutOfBounds","nameLocation":"1695:11:24","nodeType":"ErrorDefinition","parameters":{"id":4058,"nodeType":"ParameterList","parameters":[],"src":"1706:2:24"},"src":"1689:20:24"},{"body":{"id":4080,"nodeType":"Block","src":"2258:496:24","statements":[{"expression":{"arguments":[{"id":4074,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4064,"src":"2292:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4075,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4066,"src":"2299:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4076,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4068,"src":"2307:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4073,"name":"_validateEncodingParams","nodeType":"Identifier","overloadedDeclarations":[4391,4466],"referencedDeclaration":4391,"src":"2268:23:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":4077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2268:49:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4078,"nodeType":"ExpressionStatement","src":"2268:49:24"},{"AST":{"nativeSrc":"2564:184:24","nodeType":"YulBlock","src":"2564:184:24","statements":[{"nativeSrc":"2578:37:24","nodeType":"YulVariableDeclaration","src":"2578:37:24","value":{"arguments":[{"arguments":[{"name":"bitLength","nativeSrc":"2598:9:24","nodeType":"YulIdentifier","src":"2598:9:24"},{"kind":"number","nativeSrc":"2609:1:24","nodeType":"YulLiteral","src":"2609:1:24","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"2594:3:24","nodeType":"YulIdentifier","src":"2594:3:24"},"nativeSrc":"2594:17:24","nodeType":"YulFunctionCall","src":"2594:17:24"},{"kind":"number","nativeSrc":"2613:1:24","nodeType":"YulLiteral","src":"2613:1:24","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"2590:3:24","nodeType":"YulIdentifier","src":"2590:3:24"},"nativeSrc":"2590:25:24","nodeType":"YulFunctionCall","src":"2590:25:24"},"variables":[{"name":"mask","nativeSrc":"2582:4:24","nodeType":"YulTypedName","src":"2582:4:24","type":""}]},{"nativeSrc":"2628:52:24","nodeType":"YulVariableDeclaration","src":"2628:52:24","value":{"arguments":[{"name":"word","nativeSrc":"2651:4:24","nodeType":"YulIdentifier","src":"2651:4:24"},{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"2665:6:24","nodeType":"YulIdentifier","src":"2665:6:24"},{"name":"mask","nativeSrc":"2673:4:24","nodeType":"YulIdentifier","src":"2673:4:24"}],"functionName":{"name":"shl","nativeSrc":"2661:3:24","nodeType":"YulIdentifier","src":"2661:3:24"},"nativeSrc":"2661:17:24","nodeType":"YulFunctionCall","src":"2661:17:24"}],"functionName":{"name":"not","nativeSrc":"2657:3:24","nodeType":"YulIdentifier","src":"2657:3:24"},"nativeSrc":"2657:22:24","nodeType":"YulFunctionCall","src":"2657:22:24"}],"functionName":{"name":"and","nativeSrc":"2647:3:24","nodeType":"YulIdentifier","src":"2647:3:24"},"nativeSrc":"2647:33:24","nodeType":"YulFunctionCall","src":"2647:33:24"},"variables":[{"name":"clearedWord","nativeSrc":"2632:11:24","nodeType":"YulTypedName","src":"2632:11:24","type":""}]},{"nativeSrc":"2693:45:24","nodeType":"YulAssignment","src":"2693:45:24","value":{"arguments":[{"name":"clearedWord","nativeSrc":"2706:11:24","nodeType":"YulIdentifier","src":"2706:11:24"},{"arguments":[{"name":"offset","nativeSrc":"2723:6:24","nodeType":"YulIdentifier","src":"2723:6:24"},{"name":"value","nativeSrc":"2731:5:24","nodeType":"YulIdentifier","src":"2731:5:24"}],"functionName":{"name":"shl","nativeSrc":"2719:3:24","nodeType":"YulIdentifier","src":"2719:3:24"},"nativeSrc":"2719:18:24","nodeType":"YulFunctionCall","src":"2719:18:24"}],"functionName":{"name":"or","nativeSrc":"2703:2:24","nodeType":"YulIdentifier","src":"2703:2:24"},"nativeSrc":"2703:35:24","nodeType":"YulFunctionCall","src":"2703:35:24"},"variableNames":[{"name":"result","nativeSrc":"2693:6:24","nodeType":"YulIdentifier","src":"2693:6:24"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4068,"isOffset":false,"isSlot":false,"src":"2598:9:24","valueSize":1},{"declaration":4066,"isOffset":false,"isSlot":false,"src":"2665:6:24","valueSize":1},{"declaration":4066,"isOffset":false,"isSlot":false,"src":"2723:6:24","valueSize":1},{"declaration":4071,"isOffset":false,"isSlot":false,"src":"2693:6:24","valueSize":1},{"declaration":4064,"isOffset":false,"isSlot":false,"src":"2731:5:24","valueSize":1},{"declaration":4062,"isOffset":false,"isSlot":false,"src":"2651:4:24","valueSize":1}],"flags":["memory-safe"],"id":4079,"nodeType":"InlineAssembly","src":"2539:209:24"}]},"documentation":{"id":4060,"nodeType":"StructuredDocumentation","src":"1930:162:24","text":" @dev Inserts an unsigned integer of bitLength, shifted by an offset, into a 256 bit word,\n replacing the old value. Returns the new word."},"id":4081,"implemented":true,"kind":"function","modifiers":[],"name":"insertUint","nameLocation":"2106:10:24","nodeType":"FunctionDefinition","parameters":{"id":4069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4062,"mutability":"mutable","name":"word","nameLocation":"2134:4:24","nodeType":"VariableDeclaration","scope":4081,"src":"2126:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4061,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2126:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4064,"mutability":"mutable","name":"value","nameLocation":"2156:5:24","nodeType":"VariableDeclaration","scope":4081,"src":"2148:13:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4063,"name":"uint256","nodeType":"ElementaryTypeName","src":"2148:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4066,"mutability":"mutable","name":"offset","nameLocation":"2179:6:24","nodeType":"VariableDeclaration","scope":4081,"src":"2171:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4065,"name":"uint256","nodeType":"ElementaryTypeName","src":"2171:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4068,"mutability":"mutable","name":"bitLength","nameLocation":"2203:9:24","nodeType":"VariableDeclaration","scope":4081,"src":"2195:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4067,"name":"uint256","nodeType":"ElementaryTypeName","src":"2195:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2116:102:24"},"returnParameters":{"id":4072,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4071,"mutability":"mutable","name":"result","nameLocation":"2250:6:24","nodeType":"VariableDeclaration","scope":4081,"src":"2242:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4070,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2242:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2241:16:24"},"scope":4467,"src":"2097:657:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4110,"nodeType":"Block","src":"3023:568:24","statements":[{"assignments":[4094],"declarations":[{"constant":false,"id":4094,"mutability":"mutable","name":"addressBitLength","nameLocation":"3041:16:24","nodeType":"VariableDeclaration","scope":4110,"src":"3033:24:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4093,"name":"uint256","nodeType":"ElementaryTypeName","src":"3033:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4096,"initialValue":{"hexValue":"313630","id":4095,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3060:3:24","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},"nodeType":"VariableDeclarationStatement","src":"3033:30:24"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":4102,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4086,"src":"3113:5:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4101,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3105:7:24","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":4100,"name":"uint160","nodeType":"ElementaryTypeName","src":"3105:7:24","typeDescriptions":{}}},"id":4103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3105:14:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":4099,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3097:7:24","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4098,"name":"uint256","nodeType":"ElementaryTypeName","src":"3097:7:24","typeDescriptions":{}}},"id":4104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3097:23:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4105,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4088,"src":"3122:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4106,"name":"addressBitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4094,"src":"3130:16:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4097,"name":"_validateEncodingParams","nodeType":"Identifier","overloadedDeclarations":[4391,4466],"referencedDeclaration":4391,"src":"3073:23:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":4107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3073:74:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4108,"nodeType":"ExpressionStatement","src":"3073:74:24"},{"AST":{"nativeSrc":"3394:191:24","nodeType":"YulBlock","src":"3394:191:24","statements":[{"nativeSrc":"3408:44:24","nodeType":"YulVariableDeclaration","src":"3408:44:24","value":{"arguments":[{"arguments":[{"name":"addressBitLength","nativeSrc":"3428:16:24","nodeType":"YulIdentifier","src":"3428:16:24"},{"kind":"number","nativeSrc":"3446:1:24","nodeType":"YulLiteral","src":"3446:1:24","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"3424:3:24","nodeType":"YulIdentifier","src":"3424:3:24"},"nativeSrc":"3424:24:24","nodeType":"YulFunctionCall","src":"3424:24:24"},{"kind":"number","nativeSrc":"3450:1:24","nodeType":"YulLiteral","src":"3450:1:24","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"3420:3:24","nodeType":"YulIdentifier","src":"3420:3:24"},"nativeSrc":"3420:32:24","nodeType":"YulFunctionCall","src":"3420:32:24"},"variables":[{"name":"mask","nativeSrc":"3412:4:24","nodeType":"YulTypedName","src":"3412:4:24","type":""}]},{"nativeSrc":"3465:52:24","nodeType":"YulVariableDeclaration","src":"3465:52:24","value":{"arguments":[{"name":"word","nativeSrc":"3488:4:24","nodeType":"YulIdentifier","src":"3488:4:24"},{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"3502:6:24","nodeType":"YulIdentifier","src":"3502:6:24"},{"name":"mask","nativeSrc":"3510:4:24","nodeType":"YulIdentifier","src":"3510:4:24"}],"functionName":{"name":"shl","nativeSrc":"3498:3:24","nodeType":"YulIdentifier","src":"3498:3:24"},"nativeSrc":"3498:17:24","nodeType":"YulFunctionCall","src":"3498:17:24"}],"functionName":{"name":"not","nativeSrc":"3494:3:24","nodeType":"YulIdentifier","src":"3494:3:24"},"nativeSrc":"3494:22:24","nodeType":"YulFunctionCall","src":"3494:22:24"}],"functionName":{"name":"and","nativeSrc":"3484:3:24","nodeType":"YulIdentifier","src":"3484:3:24"},"nativeSrc":"3484:33:24","nodeType":"YulFunctionCall","src":"3484:33:24"},"variables":[{"name":"clearedWord","nativeSrc":"3469:11:24","nodeType":"YulTypedName","src":"3469:11:24","type":""}]},{"nativeSrc":"3530:45:24","nodeType":"YulAssignment","src":"3530:45:24","value":{"arguments":[{"name":"clearedWord","nativeSrc":"3543:11:24","nodeType":"YulIdentifier","src":"3543:11:24"},{"arguments":[{"name":"offset","nativeSrc":"3560:6:24","nodeType":"YulIdentifier","src":"3560:6:24"},{"name":"value","nativeSrc":"3568:5:24","nodeType":"YulIdentifier","src":"3568:5:24"}],"functionName":{"name":"shl","nativeSrc":"3556:3:24","nodeType":"YulIdentifier","src":"3556:3:24"},"nativeSrc":"3556:18:24","nodeType":"YulFunctionCall","src":"3556:18:24"}],"functionName":{"name":"or","nativeSrc":"3540:2:24","nodeType":"YulIdentifier","src":"3540:2:24"},"nativeSrc":"3540:35:24","nodeType":"YulFunctionCall","src":"3540:35:24"},"variableNames":[{"name":"result","nativeSrc":"3530:6:24","nodeType":"YulIdentifier","src":"3530:6:24"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4094,"isOffset":false,"isSlot":false,"src":"3428:16:24","valueSize":1},{"declaration":4088,"isOffset":false,"isSlot":false,"src":"3502:6:24","valueSize":1},{"declaration":4088,"isOffset":false,"isSlot":false,"src":"3560:6:24","valueSize":1},{"declaration":4091,"isOffset":false,"isSlot":false,"src":"3530:6:24","valueSize":1},{"declaration":4086,"isOffset":false,"isSlot":false,"src":"3568:5:24","valueSize":1},{"declaration":4084,"isOffset":false,"isSlot":false,"src":"3488:4:24","valueSize":1}],"flags":["memory-safe"],"id":4109,"nodeType":"InlineAssembly","src":"3369:216:24"}]},"documentation":{"id":4082,"nodeType":"StructuredDocumentation","src":"2760:151:24","text":" @dev Inserts an address (160 bits), shifted by an offset, into a 256 bit word,\n replacing the old value. Returns the new word."},"id":4111,"implemented":true,"kind":"function","modifiers":[],"name":"insertAddress","nameLocation":"2925:13:24","nodeType":"FunctionDefinition","parameters":{"id":4089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4084,"mutability":"mutable","name":"word","nameLocation":"2947:4:24","nodeType":"VariableDeclaration","scope":4111,"src":"2939:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4083,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2939:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4086,"mutability":"mutable","name":"value","nameLocation":"2961:5:24","nodeType":"VariableDeclaration","scope":4111,"src":"2953:13:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4085,"name":"address","nodeType":"ElementaryTypeName","src":"2953:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4088,"mutability":"mutable","name":"offset","nameLocation":"2976:6:24","nodeType":"VariableDeclaration","scope":4111,"src":"2968:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4087,"name":"uint256","nodeType":"ElementaryTypeName","src":"2968:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2938:45:24"},"returnParameters":{"id":4092,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4091,"mutability":"mutable","name":"result","nameLocation":"3015:6:24","nodeType":"VariableDeclaration","scope":4111,"src":"3007:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4090,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3007:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3006:16:24"},"scope":4467,"src":"2916:675:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4171,"nodeType":"Block","src":"3933:343:24","statements":[{"expression":{"arguments":[{"id":4126,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4116,"src":"3967:5:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"id":4127,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4118,"src":"3974:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4128,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4120,"src":"3982:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4125,"name":"_validateEncodingParams","nodeType":"Identifier","overloadedDeclarations":[4391,4466],"referencedDeclaration":4466,"src":"3943:23:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (int256,uint256,uint256) pure"}},"id":4129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3943:49:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4130,"nodeType":"ExpressionStatement","src":"3943:49:24"},{"assignments":[4132],"declarations":[{"constant":false,"id":4132,"mutability":"mutable","name":"mask","nameLocation":"4011:4:24","nodeType":"VariableDeclaration","scope":4171,"src":"4003:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4131,"name":"uint256","nodeType":"ElementaryTypeName","src":"4003:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4139,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":4133,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4019:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":4134,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4120,"src":"4024:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4019:14:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4136,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4018:16:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":4137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4037:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4018:20:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4003:35:24"},{"assignments":[4141],"declarations":[{"constant":false,"id":4141,"mutability":"mutable","name":"clearedWord","nameLocation":"4056:11:24","nodeType":"VariableDeclaration","scope":4171,"src":"4048:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4140,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4048:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":4155,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4146,"name":"word","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4114,"src":"4086:4:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4145,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4078:7:24","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4144,"name":"uint256","nodeType":"ElementaryTypeName","src":"4078:7:24","typeDescriptions":{}}},"id":4147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4078:13:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":4152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"4094:17:24","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4148,"name":"mask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4132,"src":"4096:4:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":4149,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4118,"src":"4104:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4096:14:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4151,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4095:16:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4078:33:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4143,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4070:7:24","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":4142,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4070:7:24","typeDescriptions":{}}},"id":4154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4070:42:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4048:64:24"},{"expression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":4169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4156,"name":"clearedWord","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4141,"src":"4213:11:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4161,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4116,"src":"4244:5:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":4160,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4236:7:24","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4159,"name":"uint256","nodeType":"ElementaryTypeName","src":"4236:7:24","typeDescriptions":{}}},"id":4162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4236:14:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":4163,"name":"mask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4132,"src":"4253:4:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4236:21:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4165,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4235:23:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":4166,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4118,"src":"4262:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4235:33:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4158,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4227:7:24","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":4157,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4227:7:24","typeDescriptions":{}}},"id":4168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4227:42:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4213:56:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4124,"id":4170,"nodeType":"Return","src":"4206:63:24"}]},"documentation":{"id":4112,"nodeType":"StructuredDocumentation","src":"3597:217:24","text":" @dev Inserts a signed integer shifted by an offset into a 256 bit word, replacing the old value. Returns\n the new word.\n Assumes `value` can be represented using `bitLength` bits."},"id":4172,"implemented":true,"kind":"function","modifiers":[],"name":"insertInt","nameLocation":"3828:9:24","nodeType":"FunctionDefinition","parameters":{"id":4121,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4114,"mutability":"mutable","name":"word","nameLocation":"3846:4:24","nodeType":"VariableDeclaration","scope":4172,"src":"3838:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4113,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3838:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4116,"mutability":"mutable","name":"value","nameLocation":"3859:5:24","nodeType":"VariableDeclaration","scope":4172,"src":"3852:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4115,"name":"int256","nodeType":"ElementaryTypeName","src":"3852:6:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":4118,"mutability":"mutable","name":"offset","nameLocation":"3874:6:24","nodeType":"VariableDeclaration","scope":4172,"src":"3866:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4117,"name":"uint256","nodeType":"ElementaryTypeName","src":"3866:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4120,"mutability":"mutable","name":"bitLength","nameLocation":"3890:9:24","nodeType":"VariableDeclaration","scope":4172,"src":"3882:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4119,"name":"uint256","nodeType":"ElementaryTypeName","src":"3882:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3837:63:24"},"returnParameters":{"id":4124,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4123,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4172,"src":"3924:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4122,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3924:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3923:9:24"},"scope":4467,"src":"3819:457:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4197,"nodeType":"Block","src":"4824:108:24","statements":[{"expression":{"arguments":[{"id":4185,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"4858:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4186,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4177,"src":"4865:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4187,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"4873:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4184,"name":"_validateEncodingParams","nodeType":"Identifier","overloadedDeclarations":[4391,4466],"referencedDeclaration":4391,"src":"4834:23:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":4188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4834:49:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4189,"nodeType":"ExpressionStatement","src":"4834:49:24"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4192,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"4909:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":4193,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4177,"src":"4918:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4909:15:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4191,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4901:7:24","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":4190,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4901:7:24","typeDescriptions":{}}},"id":4195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4901:24:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4183,"id":4196,"nodeType":"Return","src":"4894:31:24"}]},"documentation":{"id":4173,"nodeType":"StructuredDocumentation","src":"4492:225:24","text":" @dev Encodes an unsigned integer shifted by an offset. Ensures value fits within\n `bitLength` bits.\n The return value can be ORed bitwise with other encoded values to form a 256 bit word."},"id":4198,"implemented":true,"kind":"function","modifiers":[],"name":"encodeUint","nameLocation":"4731:10:24","nodeType":"FunctionDefinition","parameters":{"id":4180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4175,"mutability":"mutable","name":"value","nameLocation":"4750:5:24","nodeType":"VariableDeclaration","scope":4198,"src":"4742:13:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4174,"name":"uint256","nodeType":"ElementaryTypeName","src":"4742:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4177,"mutability":"mutable","name":"offset","nameLocation":"4765:6:24","nodeType":"VariableDeclaration","scope":4198,"src":"4757:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4176,"name":"uint256","nodeType":"ElementaryTypeName","src":"4757:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4179,"mutability":"mutable","name":"bitLength","nameLocation":"4781:9:24","nodeType":"VariableDeclaration","scope":4198,"src":"4773:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4178,"name":"uint256","nodeType":"ElementaryTypeName","src":"4773:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4741:50:24"},"returnParameters":{"id":4183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4182,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4198,"src":"4815:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4181,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4815:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4814:9:24"},"scope":4467,"src":"4722:210:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4238,"nodeType":"Block","src":"5214:255:24","statements":[{"expression":{"arguments":[{"id":4211,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4201,"src":"5248:5:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"id":4212,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4203,"src":"5255:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4213,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4205,"src":"5263:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4210,"name":"_validateEncodingParams","nodeType":"Identifier","overloadedDeclarations":[4391,4466],"referencedDeclaration":4466,"src":"5224:23:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (int256,uint256,uint256) pure"}},"id":4214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5224:49:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4215,"nodeType":"ExpressionStatement","src":"5224:49:24"},{"assignments":[4217],"declarations":[{"constant":false,"id":4217,"mutability":"mutable","name":"mask","nameLocation":"5292:4:24","nodeType":"VariableDeclaration","scope":4238,"src":"5284:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4216,"name":"uint256","nodeType":"ElementaryTypeName","src":"5284:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4224,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":4218,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5300:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":4219,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4205,"src":"5305:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5300:14:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4221,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5299:16:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":4222,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5318:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5299:20:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5284:35:24"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4229,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4201,"src":"5437:5:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":4228,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5429:7:24","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4227,"name":"uint256","nodeType":"ElementaryTypeName","src":"5429:7:24","typeDescriptions":{}}},"id":4230,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5429:14:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":4231,"name":"mask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4217,"src":"5446:4:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5429:21:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4233,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5428:23:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":4234,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4203,"src":"5455:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5428:33:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4226,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5420:7:24","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":4225,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5420:7:24","typeDescriptions":{}}},"id":4236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5420:42:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4209,"id":4237,"nodeType":"Return","src":"5413:49:24"}]},"documentation":{"id":4199,"nodeType":"StructuredDocumentation","src":"4938:171:24","text":" @dev Encodes a signed integer shifted by an offset.\n The return value can be ORed bitwise with other encoded values to form a 256 bit word."},"id":4239,"implemented":true,"kind":"function","modifiers":[],"name":"encodeInt","nameLocation":"5123:9:24","nodeType":"FunctionDefinition","parameters":{"id":4206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4201,"mutability":"mutable","name":"value","nameLocation":"5140:5:24","nodeType":"VariableDeclaration","scope":4239,"src":"5133:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4200,"name":"int256","nodeType":"ElementaryTypeName","src":"5133:6:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":4203,"mutability":"mutable","name":"offset","nameLocation":"5155:6:24","nodeType":"VariableDeclaration","scope":4239,"src":"5147:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4202,"name":"uint256","nodeType":"ElementaryTypeName","src":"5147:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4205,"mutability":"mutable","name":"bitLength","nameLocation":"5171:9:24","nodeType":"VariableDeclaration","scope":4239,"src":"5163:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4204,"name":"uint256","nodeType":"ElementaryTypeName","src":"5163:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5132:49:24"},"returnParameters":{"id":4209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4208,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4239,"src":"5205:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4207,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5205:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5204:9:24"},"scope":4467,"src":"5114:355:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4252,"nodeType":"Block","src":"5912:221:24","statements":[{"AST":{"nativeSrc":"6044:83:24","nodeType":"YulBlock","src":"6044:83:24","statements":[{"nativeSrc":"6058:59:24","nodeType":"YulAssignment","src":"6058:59:24","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"6076:6:24","nodeType":"YulIdentifier","src":"6076:6:24"},{"name":"word","nativeSrc":"6084:4:24","nodeType":"YulIdentifier","src":"6084:4:24"}],"functionName":{"name":"shr","nativeSrc":"6072:3:24","nodeType":"YulIdentifier","src":"6072:3:24"},"nativeSrc":"6072:17:24","nodeType":"YulFunctionCall","src":"6072:17:24"},{"arguments":[{"arguments":[{"name":"bitLength","nativeSrc":"6099:9:24","nodeType":"YulIdentifier","src":"6099:9:24"},{"kind":"number","nativeSrc":"6110:1:24","nodeType":"YulLiteral","src":"6110:1:24","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"6095:3:24","nodeType":"YulIdentifier","src":"6095:3:24"},"nativeSrc":"6095:17:24","nodeType":"YulFunctionCall","src":"6095:17:24"},{"kind":"number","nativeSrc":"6114:1:24","nodeType":"YulLiteral","src":"6114:1:24","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"6091:3:24","nodeType":"YulIdentifier","src":"6091:3:24"},"nativeSrc":"6091:25:24","nodeType":"YulFunctionCall","src":"6091:25:24"}],"functionName":{"name":"and","nativeSrc":"6068:3:24","nodeType":"YulIdentifier","src":"6068:3:24"},"nativeSrc":"6068:49:24","nodeType":"YulFunctionCall","src":"6068:49:24"},"variableNames":[{"name":"result","nativeSrc":"6058:6:24","nodeType":"YulIdentifier","src":"6058:6:24"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4246,"isOffset":false,"isSlot":false,"src":"6099:9:24","valueSize":1},{"declaration":4244,"isOffset":false,"isSlot":false,"src":"6076:6:24","valueSize":1},{"declaration":4249,"isOffset":false,"isSlot":false,"src":"6058:6:24","valueSize":1},{"declaration":4242,"isOffset":false,"isSlot":false,"src":"6084:4:24","valueSize":1}],"flags":["memory-safe"],"id":4251,"nodeType":"InlineAssembly","src":"6019:108:24"}]},"documentation":{"id":4240,"nodeType":"StructuredDocumentation","src":"5685:114:24","text":"@dev Decodes and returns an unsigned integer with `bitLength` bits, shifted by an offset, from a 256 bit word."},"id":4253,"implemented":true,"kind":"function","modifiers":[],"name":"decodeUint","nameLocation":"5813:10:24","nodeType":"FunctionDefinition","parameters":{"id":4247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4242,"mutability":"mutable","name":"word","nameLocation":"5832:4:24","nodeType":"VariableDeclaration","scope":4253,"src":"5824:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4241,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5824:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4244,"mutability":"mutable","name":"offset","nameLocation":"5846:6:24","nodeType":"VariableDeclaration","scope":4253,"src":"5838:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4243,"name":"uint256","nodeType":"ElementaryTypeName","src":"5838:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4246,"mutability":"mutable","name":"bitLength","nameLocation":"5862:9:24","nodeType":"VariableDeclaration","scope":4253,"src":"5854:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4245,"name":"uint256","nodeType":"ElementaryTypeName","src":"5854:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5823:49:24"},"returnParameters":{"id":4250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4249,"mutability":"mutable","name":"result","nameLocation":"5904:6:24","nodeType":"VariableDeclaration","scope":4253,"src":"5896:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4248,"name":"uint256","nodeType":"ElementaryTypeName","src":"5896:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5895:16:24"},"scope":4467,"src":"5804:329:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4304,"nodeType":"Block","src":"6361:660:24","statements":[{"assignments":[4266],"declarations":[{"constant":false,"id":4266,"mutability":"mutable","name":"maxInt","nameLocation":"6378:6:24","nodeType":"VariableDeclaration","scope":4304,"src":"6371:13:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4265,"name":"int256","nodeType":"ElementaryTypeName","src":"6371:6:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4279,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":4269,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6395:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4270,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4260,"src":"6401:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":4271,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6413:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6401:13:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4273,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6400:15:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6395:20:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4275,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6394:22:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":4276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6419:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6394:26:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4268,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6387:6:24","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":4267,"name":"int256","nodeType":"ElementaryTypeName","src":"6387:6:24","typeDescriptions":{}}},"id":4278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6387:34:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"6371:50:24"},{"assignments":[4281],"declarations":[{"constant":false,"id":4281,"mutability":"mutable","name":"mask","nameLocation":"6439:4:24","nodeType":"VariableDeclaration","scope":4304,"src":"6431:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4280,"name":"uint256","nodeType":"ElementaryTypeName","src":"6431:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4288,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":4282,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6447:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":4283,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4260,"src":"6452:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6447:14:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4285,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6446:16:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":4286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6465:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6446:20:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6431:35:24"},{"assignments":[4290],"declarations":[{"constant":false,"id":4290,"mutability":"mutable","name":"value","nameLocation":"6484:5:24","nodeType":"VariableDeclaration","scope":4304,"src":"6477:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4289,"name":"int256","nodeType":"ElementaryTypeName","src":"6477:6:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4302,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":4297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4295,"name":"word","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4256,"src":"6507:4:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":4296,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4258,"src":"6515:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6507:14:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4294,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6499:7:24","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4293,"name":"uint256","nodeType":"ElementaryTypeName","src":"6499:7:24","typeDescriptions":{}}},"id":4298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6499:23:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":4299,"name":"mask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4281,"src":"6525:4:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6499:30:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4292,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6492:6:24","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":4291,"name":"int256","nodeType":"ElementaryTypeName","src":"6492:6:24","typeDescriptions":{}}},"id":4301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6492:38:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"6477:53:24"},{"AST":{"nativeSrc":"6937:78:24","nodeType":"YulBlock","src":"6937:78:24","statements":[{"nativeSrc":"6951:54:24","nodeType":"YulAssignment","src":"6951:54:24","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"6971:5:24","nodeType":"YulIdentifier","src":"6971:5:24"},{"name":"maxInt","nativeSrc":"6978:6:24","nodeType":"YulIdentifier","src":"6978:6:24"}],"functionName":{"name":"gt","nativeSrc":"6968:2:24","nodeType":"YulIdentifier","src":"6968:2:24"},"nativeSrc":"6968:17:24","nodeType":"YulFunctionCall","src":"6968:17:24"},{"arguments":[{"name":"mask","nativeSrc":"6991:4:24","nodeType":"YulIdentifier","src":"6991:4:24"}],"functionName":{"name":"not","nativeSrc":"6987:3:24","nodeType":"YulIdentifier","src":"6987:3:24"},"nativeSrc":"6987:9:24","nodeType":"YulFunctionCall","src":"6987:9:24"}],"functionName":{"name":"mul","nativeSrc":"6964:3:24","nodeType":"YulIdentifier","src":"6964:3:24"},"nativeSrc":"6964:33:24","nodeType":"YulFunctionCall","src":"6964:33:24"},{"name":"value","nativeSrc":"6999:5:24","nodeType":"YulIdentifier","src":"6999:5:24"}],"functionName":{"name":"or","nativeSrc":"6961:2:24","nodeType":"YulIdentifier","src":"6961:2:24"},"nativeSrc":"6961:44:24","nodeType":"YulFunctionCall","src":"6961:44:24"},"variableNames":[{"name":"result","nativeSrc":"6951:6:24","nodeType":"YulIdentifier","src":"6951:6:24"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4281,"isOffset":false,"isSlot":false,"src":"6991:4:24","valueSize":1},{"declaration":4266,"isOffset":false,"isSlot":false,"src":"6978:6:24","valueSize":1},{"declaration":4263,"isOffset":false,"isSlot":false,"src":"6951:6:24","valueSize":1},{"declaration":4290,"isOffset":false,"isSlot":false,"src":"6971:5:24","valueSize":1},{"declaration":4290,"isOffset":false,"isSlot":false,"src":"6999:5:24","valueSize":1}],"flags":["memory-safe"],"id":4303,"nodeType":"InlineAssembly","src":"6912:103:24"}]},"documentation":{"id":4254,"nodeType":"StructuredDocumentation","src":"6139:111:24","text":"@dev Decodes and returns a signed integer with `bitLength` bits, shifted by an offset, from a 256 bit word."},"id":4305,"implemented":true,"kind":"function","modifiers":[],"name":"decodeInt","nameLocation":"6264:9:24","nodeType":"FunctionDefinition","parameters":{"id":4261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4256,"mutability":"mutable","name":"word","nameLocation":"6282:4:24","nodeType":"VariableDeclaration","scope":4305,"src":"6274:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4255,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6274:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4258,"mutability":"mutable","name":"offset","nameLocation":"6296:6:24","nodeType":"VariableDeclaration","scope":4305,"src":"6288:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4257,"name":"uint256","nodeType":"ElementaryTypeName","src":"6288:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4260,"mutability":"mutable","name":"bitLength","nameLocation":"6312:9:24","nodeType":"VariableDeclaration","scope":4305,"src":"6304:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4259,"name":"uint256","nodeType":"ElementaryTypeName","src":"6304:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6273:49:24"},"returnParameters":{"id":4264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4263,"mutability":"mutable","name":"result","nameLocation":"6353:6:24","nodeType":"VariableDeclaration","scope":4305,"src":"6346:13:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4262,"name":"int256","nodeType":"ElementaryTypeName","src":"6346:6:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"6345:15:24"},"scope":4467,"src":"6255:766:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4316,"nodeType":"Block","src":"7218:215:24","statements":[{"AST":{"nativeSrc":"7350:77:24","nodeType":"YulBlock","src":"7350:77:24","statements":[{"nativeSrc":"7364:53:24","nodeType":"YulAssignment","src":"7364:53:24","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"7382:6:24","nodeType":"YulIdentifier","src":"7382:6:24"},{"name":"word","nativeSrc":"7390:4:24","nodeType":"YulIdentifier","src":"7390:4:24"}],"functionName":{"name":"shr","nativeSrc":"7378:3:24","nodeType":"YulIdentifier","src":"7378:3:24"},"nativeSrc":"7378:17:24","nodeType":"YulFunctionCall","src":"7378:17:24"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"7405:3:24","nodeType":"YulLiteral","src":"7405:3:24","type":"","value":"160"},{"kind":"number","nativeSrc":"7410:1:24","nodeType":"YulLiteral","src":"7410:1:24","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"7401:3:24","nodeType":"YulIdentifier","src":"7401:3:24"},"nativeSrc":"7401:11:24","nodeType":"YulFunctionCall","src":"7401:11:24"},{"kind":"number","nativeSrc":"7414:1:24","nodeType":"YulLiteral","src":"7414:1:24","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"7397:3:24","nodeType":"YulIdentifier","src":"7397:3:24"},"nativeSrc":"7397:19:24","nodeType":"YulFunctionCall","src":"7397:19:24"}],"functionName":{"name":"and","nativeSrc":"7374:3:24","nodeType":"YulIdentifier","src":"7374:3:24"},"nativeSrc":"7374:43:24","nodeType":"YulFunctionCall","src":"7374:43:24"},"variableNames":[{"name":"result","nativeSrc":"7364:6:24","nodeType":"YulIdentifier","src":"7364:6:24"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4310,"isOffset":false,"isSlot":false,"src":"7382:6:24","valueSize":1},{"declaration":4313,"isOffset":false,"isSlot":false,"src":"7364:6:24","valueSize":1},{"declaration":4308,"isOffset":false,"isSlot":false,"src":"7390:4:24","valueSize":1}],"flags":["memory-safe"],"id":4315,"nodeType":"InlineAssembly","src":"7325:102:24"}]},"documentation":{"id":4306,"nodeType":"StructuredDocumentation","src":"7027:94:24","text":"@dev Decodes and returns an address (160 bits), shifted by an offset, from a 256 bit word."},"id":4317,"implemented":true,"kind":"function","modifiers":[],"name":"decodeAddress","nameLocation":"7135:13:24","nodeType":"FunctionDefinition","parameters":{"id":4311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4308,"mutability":"mutable","name":"word","nameLocation":"7157:4:24","nodeType":"VariableDeclaration","scope":4317,"src":"7149:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4307,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7149:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4310,"mutability":"mutable","name":"offset","nameLocation":"7171:6:24","nodeType":"VariableDeclaration","scope":4317,"src":"7163:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4309,"name":"uint256","nodeType":"ElementaryTypeName","src":"7163:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7148:30:24"},"returnParameters":{"id":4314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4313,"mutability":"mutable","name":"result","nameLocation":"7210:6:24","nodeType":"VariableDeclaration","scope":4317,"src":"7202:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4312,"name":"address","nodeType":"ElementaryTypeName","src":"7202:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7201:16:24"},"scope":4467,"src":"7126:307:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4328,"nodeType":"Block","src":"7823:183:24","statements":[{"AST":{"nativeSrc":"7941:59:24","nodeType":"YulBlock","src":"7941:59:24","statements":[{"nativeSrc":"7955:35:24","nodeType":"YulAssignment","src":"7955:35:24","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"7973:6:24","nodeType":"YulIdentifier","src":"7973:6:24"},{"name":"word","nativeSrc":"7981:4:24","nodeType":"YulIdentifier","src":"7981:4:24"}],"functionName":{"name":"shr","nativeSrc":"7969:3:24","nodeType":"YulIdentifier","src":"7969:3:24"},"nativeSrc":"7969:17:24","nodeType":"YulFunctionCall","src":"7969:17:24"},{"kind":"number","nativeSrc":"7988:1:24","nodeType":"YulLiteral","src":"7988:1:24","type":"","value":"1"}],"functionName":{"name":"and","nativeSrc":"7965:3:24","nodeType":"YulIdentifier","src":"7965:3:24"},"nativeSrc":"7965:25:24","nodeType":"YulFunctionCall","src":"7965:25:24"},"variableNames":[{"name":"result","nativeSrc":"7955:6:24","nodeType":"YulIdentifier","src":"7955:6:24"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4322,"isOffset":false,"isSlot":false,"src":"7973:6:24","valueSize":1},{"declaration":4325,"isOffset":false,"isSlot":false,"src":"7955:6:24","valueSize":1},{"declaration":4320,"isOffset":false,"isSlot":false,"src":"7981:4:24","valueSize":1}],"flags":["memory-safe"],"id":4327,"nodeType":"InlineAssembly","src":"7916:84:24"}]},"documentation":{"id":4318,"nodeType":"StructuredDocumentation","src":"7652:80:24","text":"@dev Decodes and returns a boolean shifted by an offset from a 256 bit word."},"id":4329,"implemented":true,"kind":"function","modifiers":[],"name":"decodeBool","nameLocation":"7746:10:24","nodeType":"FunctionDefinition","parameters":{"id":4323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4320,"mutability":"mutable","name":"word","nameLocation":"7765:4:24","nodeType":"VariableDeclaration","scope":4329,"src":"7757:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4319,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7757:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4322,"mutability":"mutable","name":"offset","nameLocation":"7779:6:24","nodeType":"VariableDeclaration","scope":4329,"src":"7771:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4321,"name":"uint256","nodeType":"ElementaryTypeName","src":"7771:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7756:30:24"},"returnParameters":{"id":4326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4325,"mutability":"mutable","name":"result","nameLocation":"7815:6:24","nodeType":"VariableDeclaration","scope":4329,"src":"7810:11:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4324,"name":"bool","nodeType":"ElementaryTypeName","src":"7810:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7809:13:24"},"scope":4467,"src":"7737:269:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4342,"nodeType":"Block","src":"8261:371:24","statements":[{"AST":{"nativeSrc":"8495:131:24","nodeType":"YulBlock","src":"8495:131:24","statements":[{"nativeSrc":"8509:49:24","nodeType":"YulVariableDeclaration","src":"8509:49:24","value":{"arguments":[{"name":"word","nativeSrc":"8532:4:24","nodeType":"YulIdentifier","src":"8532:4:24"},{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"8546:6:24","nodeType":"YulIdentifier","src":"8546:6:24"},{"kind":"number","nativeSrc":"8554:1:24","nodeType":"YulLiteral","src":"8554:1:24","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"8542:3:24","nodeType":"YulIdentifier","src":"8542:3:24"},"nativeSrc":"8542:14:24","nodeType":"YulFunctionCall","src":"8542:14:24"}],"functionName":{"name":"not","nativeSrc":"8538:3:24","nodeType":"YulIdentifier","src":"8538:3:24"},"nativeSrc":"8538:19:24","nodeType":"YulFunctionCall","src":"8538:19:24"}],"functionName":{"name":"and","nativeSrc":"8528:3:24","nodeType":"YulIdentifier","src":"8528:3:24"},"nativeSrc":"8528:30:24","nodeType":"YulFunctionCall","src":"8528:30:24"},"variables":[{"name":"clearedWord","nativeSrc":"8513:11:24","nodeType":"YulTypedName","src":"8513:11:24","type":""}]},{"nativeSrc":"8571:45:24","nodeType":"YulAssignment","src":"8571:45:24","value":{"arguments":[{"name":"clearedWord","nativeSrc":"8584:11:24","nodeType":"YulIdentifier","src":"8584:11:24"},{"arguments":[{"name":"offset","nativeSrc":"8601:6:24","nodeType":"YulIdentifier","src":"8601:6:24"},{"name":"value","nativeSrc":"8609:5:24","nodeType":"YulIdentifier","src":"8609:5:24"}],"functionName":{"name":"shl","nativeSrc":"8597:3:24","nodeType":"YulIdentifier","src":"8597:3:24"},"nativeSrc":"8597:18:24","nodeType":"YulFunctionCall","src":"8597:18:24"}],"functionName":{"name":"or","nativeSrc":"8581:2:24","nodeType":"YulIdentifier","src":"8581:2:24"},"nativeSrc":"8581:35:24","nodeType":"YulFunctionCall","src":"8581:35:24"},"variableNames":[{"name":"result","nativeSrc":"8571:6:24","nodeType":"YulIdentifier","src":"8571:6:24"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4336,"isOffset":false,"isSlot":false,"src":"8546:6:24","valueSize":1},{"declaration":4336,"isOffset":false,"isSlot":false,"src":"8601:6:24","valueSize":1},{"declaration":4339,"isOffset":false,"isSlot":false,"src":"8571:6:24","valueSize":1},{"declaration":4334,"isOffset":false,"isSlot":false,"src":"8609:5:24","valueSize":1},{"declaration":4332,"isOffset":false,"isSlot":false,"src":"8532:4:24","valueSize":1}],"flags":["memory-safe"],"id":4341,"nodeType":"InlineAssembly","src":"8470:156:24"}]},"documentation":{"id":4330,"nodeType":"StructuredDocumentation","src":"8012:143:24","text":" @dev Inserts a boolean value shifted by an offset into a 256 bit word, replacing the old value.\n Returns the new word."},"id":4343,"implemented":true,"kind":"function","modifiers":[],"name":"insertBool","nameLocation":"8169:10:24","nodeType":"FunctionDefinition","parameters":{"id":4337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4332,"mutability":"mutable","name":"word","nameLocation":"8188:4:24","nodeType":"VariableDeclaration","scope":4343,"src":"8180:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4331,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8180:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4334,"mutability":"mutable","name":"value","nameLocation":"8199:5:24","nodeType":"VariableDeclaration","scope":4343,"src":"8194:10:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4333,"name":"bool","nodeType":"ElementaryTypeName","src":"8194:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4336,"mutability":"mutable","name":"offset","nameLocation":"8214:6:24","nodeType":"VariableDeclaration","scope":4343,"src":"8206:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4335,"name":"uint256","nodeType":"ElementaryTypeName","src":"8206:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8179:42:24"},"returnParameters":{"id":4340,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4339,"mutability":"mutable","name":"result","nameLocation":"8253:6:24","nodeType":"VariableDeclaration","scope":4343,"src":"8245:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4338,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8245:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8244:16:24"},"scope":4467,"src":"8160:472:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4390,"nodeType":"Block","src":"8942:540:24","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4352,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4347,"src":"8956:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"323536","id":4353,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8966:3:24","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"src":"8956:13:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4359,"nodeType":"IfStatement","src":"8952:64:24","trueBody":{"id":4358,"nodeType":"Block","src":"8971:45:24","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4355,"name":"OutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4059,"src":"8992:11:24","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8992:13:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4357,"nodeType":"RevertStatement","src":"8985:20:24"}]}},{"condition":{"id":4374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"9184:61:24","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4360,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4349,"src":"9186:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"31","id":4361,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9199:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9186:14:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4363,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4349,"src":"9204:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"hexValue":"323535","id":4366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9226:3:24","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"323536","id":4367,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9231:3:24","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":4368,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4347,"src":"9237:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9231:12:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4364,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9974,"src":"9217:4:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$9974_$","typeString":"type(library Math)"}},"id":4365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9222:3:24","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":9125,"src":"9217:8:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9217:27:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9204:40:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9186:58:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":4373,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9185:60:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4379,"nodeType":"IfStatement","src":"9180:112:24","trueBody":{"id":4378,"nodeType":"Block","src":"9247:45:24","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4375,"name":"OutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4059,"src":"9268:11:24","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9268:13:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4377,"nodeType":"RevertStatement","src":"9261:20:24"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4380,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4345,"src":"9404:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":4381,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4349,"src":"9413:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9404:18:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4383,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9426:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9404:23:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4389,"nodeType":"IfStatement","src":"9400:76:24","trueBody":{"id":4388,"nodeType":"Block","src":"9429:47:24","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4385,"name":"CodecOverflow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4056,"src":"9450:13:24","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9450:15:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4387,"nodeType":"RevertStatement","src":"9443:22:24"}]}}]},"id":4391,"implemented":true,"kind":"function","modifiers":[],"name":"_validateEncodingParams","nameLocation":"8855:23:24","nodeType":"FunctionDefinition","parameters":{"id":4350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4345,"mutability":"mutable","name":"value","nameLocation":"8887:5:24","nodeType":"VariableDeclaration","scope":4391,"src":"8879:13:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4344,"name":"uint256","nodeType":"ElementaryTypeName","src":"8879:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4347,"mutability":"mutable","name":"offset","nameLocation":"8902:6:24","nodeType":"VariableDeclaration","scope":4391,"src":"8894:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4346,"name":"uint256","nodeType":"ElementaryTypeName","src":"8894:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4349,"mutability":"mutable","name":"bitLength","nameLocation":"8918:9:24","nodeType":"VariableDeclaration","scope":4391,"src":"8910:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4348,"name":"uint256","nodeType":"ElementaryTypeName","src":"8910:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8878:50:24"},"returnParameters":{"id":4351,"nodeType":"ParameterList","parameters":[],"src":"8942:0:24"},"scope":4467,"src":"8846:636:24","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":4465,"nodeType":"Block","src":"9583:1080:24","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4400,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4395,"src":"9597:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"323536","id":4401,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9607:3:24","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"src":"9597:13:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4407,"nodeType":"IfStatement","src":"9593:64:24","trueBody":{"id":4406,"nodeType":"Block","src":"9612:45:24","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4403,"name":"OutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4059,"src":"9633:11:24","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9633:13:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4405,"nodeType":"RevertStatement","src":"9626:20:24"}]}},{"condition":{"id":4422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"9825:61:24","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4408,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4397,"src":"9827:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"31","id":4409,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9840:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9827:14:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4411,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4397,"src":"9845:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"hexValue":"323535","id":4414,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9867:3:24","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"323536","id":4415,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9872:3:24","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":4416,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4395,"src":"9878:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9872:12:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4412,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9974,"src":"9858:4:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$9974_$","typeString":"type(library Math)"}},"id":4413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9863:3:24","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":9125,"src":"9858:8:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9858:27:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9845:40:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9827:58:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":4421,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9826:60:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4427,"nodeType":"IfStatement","src":"9821:112:24","trueBody":{"id":4426,"nodeType":"Block","src":"9888:45:24","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4423,"name":"OutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4059,"src":"9909:11:24","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9909:13:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4425,"nodeType":"RevertStatement","src":"9902:20:24"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4428,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4393,"src":"10013:5:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"30","id":4429,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10022:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10013:10:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4463,"nodeType":"Block","src":"10306:351:24","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4445,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4393,"src":"10550:5:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4446,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10558:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10550:9:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4448,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10549:11:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10561:3:24","memberName":"abs","nodeType":"MemberAccess","referencedDeclaration":11833,"src":"10549:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":4450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10549:17:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4451,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4397,"src":"10571:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":4452,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10583:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10571:13:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4454,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10570:15:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10549:36:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4456,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10589:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10549:41:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4462,"nodeType":"IfStatement","src":"10545:102:24","trueBody":{"id":4461,"nodeType":"Block","src":"10592:55:24","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4458,"name":"CodecOverflow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4056,"src":"10617:13:24","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10617:15:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4460,"nodeType":"RevertStatement","src":"10610:22:24"}]}}]},"id":4464,"nodeType":"IfStatement","src":"10009:648:24","trueBody":{"id":4444,"nodeType":"Block","src":"10025:275:24","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4431,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4393,"src":"10204:5:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4432,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4397,"src":"10214:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":4433,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10226:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10214:13:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4435,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10213:15:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10204:24:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4437,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10232:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10204:29:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4443,"nodeType":"IfStatement","src":"10200:90:24","trueBody":{"id":4442,"nodeType":"Block","src":"10235:55:24","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4439,"name":"CodecOverflow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4056,"src":"10260:13:24","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10260:15:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4441,"nodeType":"RevertStatement","src":"10253:22:24"}]}}]}}]},"id":4466,"implemented":true,"kind":"function","modifiers":[],"name":"_validateEncodingParams","nameLocation":"9497:23:24","nodeType":"FunctionDefinition","parameters":{"id":4398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4393,"mutability":"mutable","name":"value","nameLocation":"9528:5:24","nodeType":"VariableDeclaration","scope":4466,"src":"9521:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4392,"name":"int256","nodeType":"ElementaryTypeName","src":"9521:6:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":4395,"mutability":"mutable","name":"offset","nameLocation":"9543:6:24","nodeType":"VariableDeclaration","scope":4466,"src":"9535:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4394,"name":"uint256","nodeType":"ElementaryTypeName","src":"9535:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4397,"mutability":"mutable","name":"bitLength","nameLocation":"9559:9:24","nodeType":"VariableDeclaration","scope":4466,"src":"9551:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4396,"name":"uint256","nodeType":"ElementaryTypeName","src":"9551:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9520:49:24"},"returnParameters":{"id":4399,"nodeType":"ParameterList","parameters":[],"src":"9583:0:24"},"scope":4467,"src":"9488:1175:24","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":4468,"src":"1408:9257:24","usedErrors":[4056,4059],"usedEvents":[]}],"src":"46:10620:24"},"id":24},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","exportedSymbols":{"FixedPoint":[4766],"LogExpMath":[6122]},"id":4767,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4469,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:25"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","file":"./LogExpMath.sol","id":4471,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4767,"sourceUnit":6123,"src":"72:46:25","symbolAliases":[{"foreign":{"id":4470,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6122,"src":"81:10:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"FixedPoint","contractDependencies":[],"contractKind":"library","documentation":{"id":4472,"nodeType":"StructuredDocumentation","src":"120:119:25","text":"@notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision."},"fullyImplemented":true,"id":4766,"linearizedBaseContracts":[4766],"name":"FixedPoint","nameLocation":"247:10:25","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4473,"nodeType":"StructuredDocumentation","src":"264:39:25","text":"@notice Attempted division by zero."},"errorSelector":"0a0c22c7","id":4475,"name":"ZeroDivision","nameLocation":"314:12:25","nodeType":"ErrorDefinition","parameters":{"id":4474,"nodeType":"ParameterList","parameters":[],"src":"326:2:25"},"src":"308:21:25"},{"constant":true,"id":4478,"mutability":"constant","name":"ONE","nameLocation":"459:3:25","nodeType":"VariableDeclaration","scope":4766,"src":"433:36:25","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4476,"name":"uint256","nodeType":"ElementaryTypeName","src":"433:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653138","id":4477,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"465:4:25","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":4483,"mutability":"constant","name":"TWO","nameLocation":"522:3:25","nodeType":"VariableDeclaration","scope":4766,"src":"496:39:25","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4479,"name":"uint256","nodeType":"ElementaryTypeName","src":"496:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4482,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":4480,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"528:1:25","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4481,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4478,"src":"532:3:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"528:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":4488,"mutability":"constant","name":"FOUR","nameLocation":"567:4:25","nodeType":"VariableDeclaration","scope":4766,"src":"541:40:25","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4484,"name":"uint256","nodeType":"ElementaryTypeName","src":"541:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4487,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":4485,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"574:1:25","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4486,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4478,"src":"578:3:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"574:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":4491,"mutability":"constant","name":"MAX_POW_RELATIVE_ERROR","nameLocation":"613:22:25","nodeType":"VariableDeclaration","scope":4766,"src":"587:56:25","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4489,"name":"uint256","nodeType":"ElementaryTypeName","src":"587:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3130303030","id":4490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"638:5:25","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10000"},"visibility":"internal"},{"body":{"id":4510,"nodeType":"Block","src":"733:148:25","statements":[{"assignments":[4501],"declarations":[{"constant":false,"id":4501,"mutability":"mutable","name":"product","nameLocation":"828:7:25","nodeType":"VariableDeclaration","scope":4510,"src":"820:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4500,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4505,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4502,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4493,"src":"838:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4503,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4495,"src":"842:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"838:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"820:23:25"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4506,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4501,"src":"861:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4507,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4478,"src":"871:3:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"861:13:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4499,"id":4509,"nodeType":"Return","src":"854:20:25"}]},"id":4511,"implemented":true,"kind":"function","modifiers":[],"name":"mulDown","nameLocation":"671:7:25","nodeType":"FunctionDefinition","parameters":{"id":4496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4493,"mutability":"mutable","name":"a","nameLocation":"687:1:25","nodeType":"VariableDeclaration","scope":4511,"src":"679:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4492,"name":"uint256","nodeType":"ElementaryTypeName","src":"679:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4495,"mutability":"mutable","name":"b","nameLocation":"698:1:25","nodeType":"VariableDeclaration","scope":4511,"src":"690:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4494,"name":"uint256","nodeType":"ElementaryTypeName","src":"690:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"678:22:25"},"returnParameters":{"id":4499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4498,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4511,"src":"724:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4497,"name":"uint256","nodeType":"ElementaryTypeName","src":"724:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"723:9:25"},"scope":4766,"src":"662:219:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4527,"nodeType":"Block","src":"963:351:25","statements":[{"assignments":[4521],"declarations":[{"constant":false,"id":4521,"mutability":"mutable","name":"product","nameLocation":"1058:7:25","nodeType":"VariableDeclaration","scope":4527,"src":"1050:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4520,"name":"uint256","nodeType":"ElementaryTypeName","src":"1050:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4525,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4522,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4513,"src":"1068:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4523,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4515,"src":"1072:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1068:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1050:23:25"},{"AST":{"nativeSrc":"1211:97:25","nodeType":"YulBlock","src":"1211:97:25","statements":[{"nativeSrc":"1225:73:25","nodeType":"YulAssignment","src":"1225:73:25","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1253:7:25","nodeType":"YulIdentifier","src":"1253:7:25"}],"functionName":{"name":"iszero","nativeSrc":"1246:6:25","nodeType":"YulIdentifier","src":"1246:6:25"},"nativeSrc":"1246:15:25","nodeType":"YulFunctionCall","src":"1246:15:25"}],"functionName":{"name":"iszero","nativeSrc":"1239:6:25","nodeType":"YulIdentifier","src":"1239:6:25"},"nativeSrc":"1239:23:25","nodeType":"YulFunctionCall","src":"1239:23:25"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1276:7:25","nodeType":"YulIdentifier","src":"1276:7:25"},{"kind":"number","nativeSrc":"1285:1:25","nodeType":"YulLiteral","src":"1285:1:25","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1272:3:25","nodeType":"YulIdentifier","src":"1272:3:25"},"nativeSrc":"1272:15:25","nodeType":"YulFunctionCall","src":"1272:15:25"},{"name":"ONE","nativeSrc":"1289:3:25","nodeType":"YulIdentifier","src":"1289:3:25"}],"functionName":{"name":"div","nativeSrc":"1268:3:25","nodeType":"YulIdentifier","src":"1268:3:25"},"nativeSrc":"1268:25:25","nodeType":"YulFunctionCall","src":"1268:25:25"},{"kind":"number","nativeSrc":"1295:1:25","nodeType":"YulLiteral","src":"1295:1:25","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"1264:3:25","nodeType":"YulIdentifier","src":"1264:3:25"},"nativeSrc":"1264:33:25","nodeType":"YulFunctionCall","src":"1264:33:25"}],"functionName":{"name":"mul","nativeSrc":"1235:3:25","nodeType":"YulIdentifier","src":"1235:3:25"},"nativeSrc":"1235:63:25","nodeType":"YulFunctionCall","src":"1235:63:25"},"variableNames":[{"name":"result","nativeSrc":"1225:6:25","nodeType":"YulIdentifier","src":"1225:6:25"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4478,"isOffset":false,"isSlot":false,"src":"1289:3:25","valueSize":1},{"declaration":4521,"isOffset":false,"isSlot":false,"src":"1253:7:25","valueSize":1},{"declaration":4521,"isOffset":false,"isSlot":false,"src":"1276:7:25","valueSize":1},{"declaration":4518,"isOffset":false,"isSlot":false,"src":"1225:6:25","valueSize":1}],"flags":["memory-safe"],"id":4526,"nodeType":"InlineAssembly","src":"1186:122:25"}]},"id":4528,"implemented":true,"kind":"function","modifiers":[],"name":"mulUp","nameLocation":"896:5:25","nodeType":"FunctionDefinition","parameters":{"id":4516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4513,"mutability":"mutable","name":"a","nameLocation":"910:1:25","nodeType":"VariableDeclaration","scope":4528,"src":"902:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4512,"name":"uint256","nodeType":"ElementaryTypeName","src":"902:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4515,"mutability":"mutable","name":"b","nameLocation":"921:1:25","nodeType":"VariableDeclaration","scope":4528,"src":"913:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4514,"name":"uint256","nodeType":"ElementaryTypeName","src":"913:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"901:22:25"},"returnParameters":{"id":4519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4518,"mutability":"mutable","name":"result","nameLocation":"955:6:25","nodeType":"VariableDeclaration","scope":4528,"src":"947:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4517,"name":"uint256","nodeType":"ElementaryTypeName","src":"947:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"946:16:25"},"scope":4766,"src":"887:427:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4547,"nodeType":"Block","src":"1391:254:25","statements":[{"assignments":[4538],"declarations":[{"constant":false,"id":4538,"mutability":"mutable","name":"aInflated","nameLocation":"1499:9:25","nodeType":"VariableDeclaration","scope":4547,"src":"1491:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4537,"name":"uint256","nodeType":"ElementaryTypeName","src":"1491:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4542,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4539,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4530,"src":"1511:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4540,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4478,"src":"1515:3:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1511:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1491:27:25"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4543,"name":"aInflated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"1625:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4544,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4532,"src":"1637:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1625:13:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4536,"id":4546,"nodeType":"Return","src":"1618:20:25"}]},"id":4548,"implemented":true,"kind":"function","modifiers":[],"name":"divDown","nameLocation":"1329:7:25","nodeType":"FunctionDefinition","parameters":{"id":4533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4530,"mutability":"mutable","name":"a","nameLocation":"1345:1:25","nodeType":"VariableDeclaration","scope":4548,"src":"1337:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4529,"name":"uint256","nodeType":"ElementaryTypeName","src":"1337:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4532,"mutability":"mutable","name":"b","nameLocation":"1356:1:25","nodeType":"VariableDeclaration","scope":4548,"src":"1348:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4531,"name":"uint256","nodeType":"ElementaryTypeName","src":"1348:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1336:22:25"},"returnParameters":{"id":4536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4535,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4548,"src":"1382:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4534,"name":"uint256","nodeType":"ElementaryTypeName","src":"1382:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1381:9:25"},"scope":4766,"src":"1320:325:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4563,"nodeType":"Block","src":"1727:43:25","statements":[{"expression":{"arguments":[{"id":4558,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4550,"src":"1753:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4559,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4478,"src":"1756:3:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4560,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4552,"src":"1761:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4557,"name":"mulDivUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4592,"src":"1744:8:25","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":4561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1744:19:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4556,"id":4562,"nodeType":"Return","src":"1737:26:25"}]},"id":4564,"implemented":true,"kind":"function","modifiers":[],"name":"divUp","nameLocation":"1660:5:25","nodeType":"FunctionDefinition","parameters":{"id":4553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4550,"mutability":"mutable","name":"a","nameLocation":"1674:1:25","nodeType":"VariableDeclaration","scope":4564,"src":"1666:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4549,"name":"uint256","nodeType":"ElementaryTypeName","src":"1666:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4552,"mutability":"mutable","name":"b","nameLocation":"1685:1:25","nodeType":"VariableDeclaration","scope":4564,"src":"1677:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4551,"name":"uint256","nodeType":"ElementaryTypeName","src":"1677:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1665:22:25"},"returnParameters":{"id":4556,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4555,"mutability":"mutable","name":"result","nameLocation":"1719:6:25","nodeType":"VariableDeclaration","scope":4564,"src":"1711:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4554,"name":"uint256","nodeType":"ElementaryTypeName","src":"1711:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1710:16:25"},"scope":4766,"src":"1651:119:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4591,"nodeType":"Block","src":"1912:774:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4576,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4571,"src":"2004:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4577,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2009:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2004:6:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4583,"nodeType":"IfStatement","src":"2000:58:25","trueBody":{"id":4582,"nodeType":"Block","src":"2012:46:25","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4579,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"2033:12:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2033:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4581,"nodeType":"RevertStatement","src":"2026:21:25"}]}},{"assignments":[4585],"declarations":[{"constant":false,"id":4585,"mutability":"mutable","name":"product","nameLocation":"2143:7:25","nodeType":"VariableDeclaration","scope":4591,"src":"2135:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4584,"name":"uint256","nodeType":"ElementaryTypeName","src":"2135:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4589,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4586,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4567,"src":"2153:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4587,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4569,"src":"2157:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2153:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2135:23:25"},{"AST":{"nativeSrc":"2585:95:25","nodeType":"YulBlock","src":"2585:95:25","statements":[{"nativeSrc":"2599:71:25","nodeType":"YulAssignment","src":"2599:71:25","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2627:7:25","nodeType":"YulIdentifier","src":"2627:7:25"}],"functionName":{"name":"iszero","nativeSrc":"2620:6:25","nodeType":"YulIdentifier","src":"2620:6:25"},"nativeSrc":"2620:15:25","nodeType":"YulFunctionCall","src":"2620:15:25"}],"functionName":{"name":"iszero","nativeSrc":"2613:6:25","nodeType":"YulIdentifier","src":"2613:6:25"},"nativeSrc":"2613:23:25","nodeType":"YulFunctionCall","src":"2613:23:25"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2650:7:25","nodeType":"YulIdentifier","src":"2650:7:25"},{"kind":"number","nativeSrc":"2659:1:25","nodeType":"YulLiteral","src":"2659:1:25","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"2646:3:25","nodeType":"YulIdentifier","src":"2646:3:25"},"nativeSrc":"2646:15:25","nodeType":"YulFunctionCall","src":"2646:15:25"},{"name":"c","nativeSrc":"2663:1:25","nodeType":"YulIdentifier","src":"2663:1:25"}],"functionName":{"name":"div","nativeSrc":"2642:3:25","nodeType":"YulIdentifier","src":"2642:3:25"},"nativeSrc":"2642:23:25","nodeType":"YulFunctionCall","src":"2642:23:25"},{"kind":"number","nativeSrc":"2667:1:25","nodeType":"YulLiteral","src":"2667:1:25","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"2638:3:25","nodeType":"YulIdentifier","src":"2638:3:25"},"nativeSrc":"2638:31:25","nodeType":"YulFunctionCall","src":"2638:31:25"}],"functionName":{"name":"mul","nativeSrc":"2609:3:25","nodeType":"YulIdentifier","src":"2609:3:25"},"nativeSrc":"2609:61:25","nodeType":"YulFunctionCall","src":"2609:61:25"},"variableNames":[{"name":"result","nativeSrc":"2599:6:25","nodeType":"YulIdentifier","src":"2599:6:25"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4571,"isOffset":false,"isSlot":false,"src":"2663:1:25","valueSize":1},{"declaration":4585,"isOffset":false,"isSlot":false,"src":"2627:7:25","valueSize":1},{"declaration":4585,"isOffset":false,"isSlot":false,"src":"2650:7:25","valueSize":1},{"declaration":4574,"isOffset":false,"isSlot":false,"src":"2599:6:25","valueSize":1}],"flags":["memory-safe"],"id":4590,"nodeType":"InlineAssembly","src":"2560:120:25"}]},"documentation":{"id":4565,"nodeType":"StructuredDocumentation","src":"1776:41:25","text":"@dev Return (a * b) / c, rounding up."},"id":4592,"implemented":true,"kind":"function","modifiers":[],"name":"mulDivUp","nameLocation":"1831:8:25","nodeType":"FunctionDefinition","parameters":{"id":4572,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4567,"mutability":"mutable","name":"a","nameLocation":"1848:1:25","nodeType":"VariableDeclaration","scope":4592,"src":"1840:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4566,"name":"uint256","nodeType":"ElementaryTypeName","src":"1840:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4569,"mutability":"mutable","name":"b","nameLocation":"1859:1:25","nodeType":"VariableDeclaration","scope":4592,"src":"1851:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4568,"name":"uint256","nodeType":"ElementaryTypeName","src":"1851:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4571,"mutability":"mutable","name":"c","nameLocation":"1870:1:25","nodeType":"VariableDeclaration","scope":4592,"src":"1862:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4570,"name":"uint256","nodeType":"ElementaryTypeName","src":"1862:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1839:33:25"},"returnParameters":{"id":4575,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4574,"mutability":"mutable","name":"result","nameLocation":"1904:6:25","nodeType":"VariableDeclaration","scope":4592,"src":"1896:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4573,"name":"uint256","nodeType":"ElementaryTypeName","src":"1896:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1895:16:25"},"scope":4766,"src":"1822:864:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4611,"nodeType":"Block","src":"3159:345:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4602,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4597,"src":"3251:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4603,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3256:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3251:6:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4609,"nodeType":"IfStatement","src":"3247:58:25","trueBody":{"id":4608,"nodeType":"Block","src":"3259:46:25","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4605,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"3280:12:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3280:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4607,"nodeType":"RevertStatement","src":"3273:21:25"}]}},{"AST":{"nativeSrc":"3415:83:25","nodeType":"YulBlock","src":"3415:83:25","statements":[{"nativeSrc":"3429:59:25","nodeType":"YulAssignment","src":"3429:59:25","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3457:1:25","nodeType":"YulIdentifier","src":"3457:1:25"}],"functionName":{"name":"iszero","nativeSrc":"3450:6:25","nodeType":"YulIdentifier","src":"3450:6:25"},"nativeSrc":"3450:9:25","nodeType":"YulFunctionCall","src":"3450:9:25"}],"functionName":{"name":"iszero","nativeSrc":"3443:6:25","nodeType":"YulIdentifier","src":"3443:6:25"},"nativeSrc":"3443:17:25","nodeType":"YulFunctionCall","src":"3443:17:25"},{"arguments":[{"kind":"number","nativeSrc":"3466:1:25","nodeType":"YulLiteral","src":"3466:1:25","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3477:1:25","nodeType":"YulIdentifier","src":"3477:1:25"},{"kind":"number","nativeSrc":"3480:1:25","nodeType":"YulLiteral","src":"3480:1:25","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"3473:3:25","nodeType":"YulIdentifier","src":"3473:3:25"},"nativeSrc":"3473:9:25","nodeType":"YulFunctionCall","src":"3473:9:25"},{"name":"b","nativeSrc":"3484:1:25","nodeType":"YulIdentifier","src":"3484:1:25"}],"functionName":{"name":"div","nativeSrc":"3469:3:25","nodeType":"YulIdentifier","src":"3469:3:25"},"nativeSrc":"3469:17:25","nodeType":"YulFunctionCall","src":"3469:17:25"}],"functionName":{"name":"add","nativeSrc":"3462:3:25","nodeType":"YulIdentifier","src":"3462:3:25"},"nativeSrc":"3462:25:25","nodeType":"YulFunctionCall","src":"3462:25:25"}],"functionName":{"name":"mul","nativeSrc":"3439:3:25","nodeType":"YulIdentifier","src":"3439:3:25"},"nativeSrc":"3439:49:25","nodeType":"YulFunctionCall","src":"3439:49:25"},"variableNames":[{"name":"result","nativeSrc":"3429:6:25","nodeType":"YulIdentifier","src":"3429:6:25"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4595,"isOffset":false,"isSlot":false,"src":"3457:1:25","valueSize":1},{"declaration":4595,"isOffset":false,"isSlot":false,"src":"3477:1:25","valueSize":1},{"declaration":4597,"isOffset":false,"isSlot":false,"src":"3484:1:25","valueSize":1},{"declaration":4600,"isOffset":false,"isSlot":false,"src":"3429:6:25","valueSize":1}],"flags":["memory-safe"],"id":4610,"nodeType":"InlineAssembly","src":"3390:108:25"}]},"documentation":{"id":4593,"nodeType":"StructuredDocumentation","src":"2692:383:25","text":" @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n This can occur in calculations with many successive multiplications and divisions, and\n we want to minimize the number of operations by avoiding unnecessary scaling by ONE."},"id":4612,"implemented":true,"kind":"function","modifiers":[],"name":"divUpRaw","nameLocation":"3089:8:25","nodeType":"FunctionDefinition","parameters":{"id":4598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4595,"mutability":"mutable","name":"a","nameLocation":"3106:1:25","nodeType":"VariableDeclaration","scope":4612,"src":"3098:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4594,"name":"uint256","nodeType":"ElementaryTypeName","src":"3098:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4597,"mutability":"mutable","name":"b","nameLocation":"3117:1:25","nodeType":"VariableDeclaration","scope":4612,"src":"3109:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4596,"name":"uint256","nodeType":"ElementaryTypeName","src":"3109:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3097:22:25"},"returnParameters":{"id":4601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4600,"mutability":"mutable","name":"result","nameLocation":"3151:6:25","nodeType":"VariableDeclaration","scope":4612,"src":"3143:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4599,"name":"uint256","nodeType":"ElementaryTypeName","src":"3143:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3142:16:25"},"scope":4766,"src":"3080:424:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4687,"nodeType":"Block","src":"3807:723:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4622,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4617,"src":"3975:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4623,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4478,"src":"3980:3:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3975:8:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4628,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4617,"src":"4028:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4629,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4483,"src":"4033:3:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4028:8:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4637,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4617,"src":"4093:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4638,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4488,"src":"4098:4:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4093:9:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4683,"nodeType":"Block","src":"4209:315:25","statements":[{"assignments":[4654],"declarations":[{"constant":false,"id":4654,"mutability":"mutable","name":"raw","nameLocation":"4231:3:25","nodeType":"VariableDeclaration","scope":4683,"src":"4223:11:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4653,"name":"uint256","nodeType":"ElementaryTypeName","src":"4223:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4660,"initialValue":{"arguments":[{"id":4657,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4615,"src":"4252:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4658,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4617,"src":"4255:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4655,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6122,"src":"4237:10:25","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$6122_$","typeString":"type(library LogExpMath)"}},"id":4656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4248:3:25","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":5025,"src":"4237:14:25","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4237:20:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4223:34:25"},{"assignments":[4662],"declarations":[{"constant":false,"id":4662,"mutability":"mutable","name":"maxError","nameLocation":"4279:8:25","nodeType":"VariableDeclaration","scope":4683,"src":"4271:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4661,"name":"uint256","nodeType":"ElementaryTypeName","src":"4271:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4669,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4664,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4654,"src":"4296:3:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4665,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4491,"src":"4301:22:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4663,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4528,"src":"4290:5:25","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4290:34:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4667,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4327:1:25","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4290:38:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4271:57:25"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4670,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4654,"src":"4347:3:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4671,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4662,"src":"4353:8:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4347:14:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4681,"nodeType":"Block","src":"4410:104:25","statements":[{"id":4680,"nodeType":"UncheckedBlock","src":"4428:72:25","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4676,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4654,"src":"4467:3:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":4677,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4662,"src":"4473:8:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4467:14:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4621,"id":4679,"nodeType":"Return","src":"4460:21:25"}]}]},"id":4682,"nodeType":"IfStatement","src":"4343:171:25","trueBody":{"id":4675,"nodeType":"Block","src":"4363:41:25","statements":[{"expression":{"hexValue":"30","id":4673,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4388:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":4621,"id":4674,"nodeType":"Return","src":"4381:8:25"}]}}]},"id":4684,"nodeType":"IfStatement","src":"4089:435:25","trueBody":{"id":4652,"nodeType":"Block","src":"4104:99:25","statements":[{"assignments":[4641],"declarations":[{"constant":false,"id":4641,"mutability":"mutable","name":"square","nameLocation":"4126:6:25","nodeType":"VariableDeclaration","scope":4652,"src":"4118:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4640,"name":"uint256","nodeType":"ElementaryTypeName","src":"4118:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4646,"initialValue":{"arguments":[{"id":4643,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4615,"src":"4143:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4644,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4615,"src":"4146:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4642,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4511,"src":"4135:7:25","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4135:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4118:30:25"},{"expression":{"arguments":[{"id":4648,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4641,"src":"4177:6:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4649,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4641,"src":"4185:6:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4647,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4511,"src":"4169:7:25","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4169:23:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4621,"id":4651,"nodeType":"Return","src":"4162:30:25"}]}},"id":4685,"nodeType":"IfStatement","src":"4024:500:25","trueBody":{"id":4636,"nodeType":"Block","src":"4038:45:25","statements":[{"expression":{"arguments":[{"id":4632,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4615,"src":"4067:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4633,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4615,"src":"4070:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4631,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4511,"src":"4059:7:25","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4059:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4621,"id":4635,"nodeType":"Return","src":"4052:20:25"}]}},"id":4686,"nodeType":"IfStatement","src":"3971:553:25","trueBody":{"id":4627,"nodeType":"Block","src":"3985:33:25","statements":[{"expression":{"id":4625,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4615,"src":"4006:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4621,"id":4626,"nodeType":"Return","src":"3999:8:25"}]}}]},"documentation":{"id":4613,"nodeType":"StructuredDocumentation","src":"3510:221:25","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n the true value (that is, the error function expected - actual is always positive)."},"id":4688,"implemented":true,"kind":"function","modifiers":[],"name":"powDown","nameLocation":"3745:7:25","nodeType":"FunctionDefinition","parameters":{"id":4618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4615,"mutability":"mutable","name":"x","nameLocation":"3761:1:25","nodeType":"VariableDeclaration","scope":4688,"src":"3753:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4614,"name":"uint256","nodeType":"ElementaryTypeName","src":"3753:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4617,"mutability":"mutable","name":"y","nameLocation":"3772:1:25","nodeType":"VariableDeclaration","scope":4688,"src":"3764:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4616,"name":"uint256","nodeType":"ElementaryTypeName","src":"3764:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3752:22:25"},"returnParameters":{"id":4621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4620,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4688,"src":"3798:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4619,"name":"uint256","nodeType":"ElementaryTypeName","src":"3798:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3797:9:25"},"scope":4766,"src":"3736:794:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4754,"nodeType":"Block","src":"4829:568:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4698,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4693,"src":"4997:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4699,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4478,"src":"5002:3:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4997:8:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4704,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4693,"src":"5050:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4705,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4483,"src":"5055:3:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5050:8:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4713,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4693,"src":"5113:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4714,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4488,"src":"5118:4:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5113:9:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4750,"nodeType":"Block","src":"5225:166:25","statements":[{"assignments":[4730],"declarations":[{"constant":false,"id":4730,"mutability":"mutable","name":"raw","nameLocation":"5247:3:25","nodeType":"VariableDeclaration","scope":4750,"src":"5239:11:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4729,"name":"uint256","nodeType":"ElementaryTypeName","src":"5239:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4736,"initialValue":{"arguments":[{"id":4733,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4691,"src":"5268:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4734,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4693,"src":"5271:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4731,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6122,"src":"5253:10:25","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$6122_$","typeString":"type(library LogExpMath)"}},"id":4732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5264:3:25","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":5025,"src":"5253:14:25","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5253:20:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5239:34:25"},{"assignments":[4738],"declarations":[{"constant":false,"id":4738,"mutability":"mutable","name":"maxError","nameLocation":"5295:8:25","nodeType":"VariableDeclaration","scope":4750,"src":"5287:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4737,"name":"uint256","nodeType":"ElementaryTypeName","src":"5287:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4745,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4740,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4730,"src":"5312:3:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4741,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4491,"src":"5317:22:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4739,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4528,"src":"5306:5:25","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5306:34:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5343:1:25","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5306:38:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5287:57:25"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4746,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4730,"src":"5366:3:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4747,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4738,"src":"5372:8:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5366:14:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4697,"id":4749,"nodeType":"Return","src":"5359:21:25"}]},"id":4751,"nodeType":"IfStatement","src":"5109:282:25","trueBody":{"id":4728,"nodeType":"Block","src":"5124:95:25","statements":[{"assignments":[4717],"declarations":[{"constant":false,"id":4717,"mutability":"mutable","name":"square","nameLocation":"5146:6:25","nodeType":"VariableDeclaration","scope":4728,"src":"5138:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4716,"name":"uint256","nodeType":"ElementaryTypeName","src":"5138:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4722,"initialValue":{"arguments":[{"id":4719,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4691,"src":"5161:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4720,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4691,"src":"5164:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4718,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4528,"src":"5155:5:25","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5155:11:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5138:28:25"},{"expression":{"arguments":[{"id":4724,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4717,"src":"5193:6:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4725,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4717,"src":"5201:6:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4723,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4528,"src":"5187:5:25","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5187:21:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4697,"id":4727,"nodeType":"Return","src":"5180:28:25"}]}},"id":4752,"nodeType":"IfStatement","src":"5046:345:25","trueBody":{"id":4712,"nodeType":"Block","src":"5060:43:25","statements":[{"expression":{"arguments":[{"id":4708,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4691,"src":"5087:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4709,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4691,"src":"5090:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4707,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4528,"src":"5081:5:25","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5081:11:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4697,"id":4711,"nodeType":"Return","src":"5074:18:25"}]}},"id":4753,"nodeType":"IfStatement","src":"4993:398:25","trueBody":{"id":4703,"nodeType":"Block","src":"5007:33:25","statements":[{"expression":{"id":4701,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4691,"src":"5028:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4697,"id":4702,"nodeType":"Return","src":"5021:8:25"}]}}]},"documentation":{"id":4689,"nodeType":"StructuredDocumentation","src":"4536:219:25","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n the true value (that is, the error function expected - actual is always negative)."},"id":4755,"implemented":true,"kind":"function","modifiers":[],"name":"powUp","nameLocation":"4769:5:25","nodeType":"FunctionDefinition","parameters":{"id":4694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4691,"mutability":"mutable","name":"x","nameLocation":"4783:1:25","nodeType":"VariableDeclaration","scope":4755,"src":"4775:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4690,"name":"uint256","nodeType":"ElementaryTypeName","src":"4775:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4693,"mutability":"mutable","name":"y","nameLocation":"4794:1:25","nodeType":"VariableDeclaration","scope":4755,"src":"4786:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4692,"name":"uint256","nodeType":"ElementaryTypeName","src":"4786:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4774:22:25"},"returnParameters":{"id":4697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4696,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4755,"src":"4820:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4695,"name":"uint256","nodeType":"ElementaryTypeName","src":"4820:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4819:9:25"},"scope":4766,"src":"4760:637:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4764,"nodeType":"Block","src":"5750:175:25","statements":[{"AST":{"nativeSrc":"5857:62:25","nodeType":"YulBlock","src":"5857:62:25","statements":[{"nativeSrc":"5871:38:25","nodeType":"YulAssignment","src":"5871:38:25","value":{"arguments":[{"arguments":[{"name":"x","nativeSrc":"5888:1:25","nodeType":"YulIdentifier","src":"5888:1:25"},{"name":"ONE","nativeSrc":"5891:3:25","nodeType":"YulIdentifier","src":"5891:3:25"}],"functionName":{"name":"lt","nativeSrc":"5885:2:25","nodeType":"YulIdentifier","src":"5885:2:25"},"nativeSrc":"5885:10:25","nodeType":"YulFunctionCall","src":"5885:10:25"},{"arguments":[{"name":"ONE","nativeSrc":"5901:3:25","nodeType":"YulIdentifier","src":"5901:3:25"},{"name":"x","nativeSrc":"5906:1:25","nodeType":"YulIdentifier","src":"5906:1:25"}],"functionName":{"name":"sub","nativeSrc":"5897:3:25","nodeType":"YulIdentifier","src":"5897:3:25"},"nativeSrc":"5897:11:25","nodeType":"YulFunctionCall","src":"5897:11:25"}],"functionName":{"name":"mul","nativeSrc":"5881:3:25","nodeType":"YulIdentifier","src":"5881:3:25"},"nativeSrc":"5881:28:25","nodeType":"YulFunctionCall","src":"5881:28:25"},"variableNames":[{"name":"result","nativeSrc":"5871:6:25","nodeType":"YulIdentifier","src":"5871:6:25"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4478,"isOffset":false,"isSlot":false,"src":"5891:3:25","valueSize":1},{"declaration":4478,"isOffset":false,"isSlot":false,"src":"5901:3:25","valueSize":1},{"declaration":4761,"isOffset":false,"isSlot":false,"src":"5871:6:25","valueSize":1},{"declaration":4758,"isOffset":false,"isSlot":false,"src":"5888:1:25","valueSize":1},{"declaration":4758,"isOffset":false,"isSlot":false,"src":"5906:1:25","valueSize":1}],"flags":["memory-safe"],"id":4763,"nodeType":"InlineAssembly","src":"5832:87:25"}]},"documentation":{"id":4756,"nodeType":"StructuredDocumentation","src":"5403:272:25","text":" @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n Useful when computing the complement for values with some level of relative error, as it strips this error and\n prevents intermediate negative values."},"id":4765,"implemented":true,"kind":"function","modifiers":[],"name":"complement","nameLocation":"5689:10:25","nodeType":"FunctionDefinition","parameters":{"id":4759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4758,"mutability":"mutable","name":"x","nameLocation":"5708:1:25","nodeType":"VariableDeclaration","scope":4765,"src":"5700:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4757,"name":"uint256","nodeType":"ElementaryTypeName","src":"5700:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5699:11:25"},"returnParameters":{"id":4762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4761,"mutability":"mutable","name":"result","nameLocation":"5742:6:25","nodeType":"VariableDeclaration","scope":4765,"src":"5734:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4760,"name":"uint256","nodeType":"ElementaryTypeName","src":"5734:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5733:16:25"},"scope":4766,"src":"5680:245:25","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":4767,"src":"239:5688:25","usedErrors":[4475],"usedEvents":[]}],"src":"46:5882:25"},"id":25},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","exportedSymbols":{"LogExpMath":[6122]},"id":6123,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4768,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:26"},{"abstract":false,"baseContracts":[],"canonicalName":"LogExpMath","contractDependencies":[],"contractKind":"library","documentation":{"id":4769,"nodeType":"StructuredDocumentation","src":"79:515:26","text":" @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n exponentiation and logarithm (where the base is Euler's number).\n All math operations are unchecked in order to save gas.\n @author Fernando Martinelli - @fernandomartinelli\n @author Sergio Yuhjtman - @sergioyuhjtman\n @author Daniel Fernandez - @dmf7z"},"fullyImplemented":true,"id":6122,"linearizedBaseContracts":[6122],"name":"LogExpMath","nameLocation":"603:10:26","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4770,"nodeType":"StructuredDocumentation","src":"620:79:26","text":"@notice This error is thrown when a base is not within an acceptable range."},"errorSelector":"022701e0","id":4772,"name":"BaseOutOfBounds","nameLocation":"710:15:26","nodeType":"ErrorDefinition","parameters":{"id":4771,"nodeType":"ParameterList","parameters":[],"src":"725:2:26"},"src":"704:24:26"},{"documentation":{"id":4773,"nodeType":"StructuredDocumentation","src":"734:83:26","text":"@notice This error is thrown when a exponent is not within an acceptable range."},"errorSelector":"d8317311","id":4775,"name":"ExponentOutOfBounds","nameLocation":"828:19:26","nodeType":"ErrorDefinition","parameters":{"id":4774,"nodeType":"ParameterList","parameters":[],"src":"847:2:26"},"src":"822:28:26"},{"documentation":{"id":4776,"nodeType":"StructuredDocumentation","src":"856:96:26","text":"@notice This error is thrown when the exponent * ln(base) is not within an acceptable range."},"errorSelector":"a2f9f7e3","id":4778,"name":"ProductOutOfBounds","nameLocation":"963:18:26","nodeType":"ErrorDefinition","parameters":{"id":4777,"nodeType":"ParameterList","parameters":[],"src":"981:2:26"},"src":"957:27:26"},{"documentation":{"id":4779,"nodeType":"StructuredDocumentation","src":"990:109:26","text":"@notice This error is thrown when an exponent used in the exp function is not within an acceptable range."},"errorSelector":"d4794efd","id":4781,"name":"InvalidExponent","nameLocation":"1110:15:26","nodeType":"ErrorDefinition","parameters":{"id":4780,"nodeType":"ParameterList","parameters":[],"src":"1125:2:26"},"src":"1104:24:26"},{"documentation":{"id":4782,"nodeType":"StructuredDocumentation","src":"1134:119:26","text":"@notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function."},"errorSelector":"b4120f14","id":4784,"name":"OutOfBounds","nameLocation":"1264:11:26","nodeType":"ErrorDefinition","parameters":{"id":4783,"nodeType":"ParameterList","parameters":[],"src":"1275:2:26"},"src":"1258:20:26"},{"constant":true,"id":4787,"mutability":"constant","name":"ONE_18","nameLocation":"1555:6:26","nodeType":"VariableDeclaration","scope":6122,"src":"1539:29:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4785,"name":"int256","nodeType":"ElementaryTypeName","src":"1539:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653138","id":4786,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1564:4:26","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":4790,"mutability":"constant","name":"ONE_20","nameLocation":"1745:6:26","nodeType":"VariableDeclaration","scope":6122,"src":"1729:29:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4788,"name":"int256","nodeType":"ElementaryTypeName","src":"1729:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653230","id":4789,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1754:4:26","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"1e20"},"visibility":"internal"},{"constant":true,"id":4793,"mutability":"constant","name":"ONE_36","nameLocation":"1780:6:26","nodeType":"VariableDeclaration","scope":6122,"src":"1764:29:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4791,"name":"int256","nodeType":"ElementaryTypeName","src":"1764:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653336","id":4792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1789:4:26","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(29 digits omitted)...0000"},"value":"1e36"},"visibility":"internal"},{"constant":true,"id":4796,"mutability":"constant","name":"MAX_NATURAL_EXPONENT","nameLocation":"2326:20:26","nodeType":"VariableDeclaration","scope":6122,"src":"2310:45:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4794,"name":"int256","nodeType":"ElementaryTypeName","src":"2310:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313330653138","id":4795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2349:6:26","typeDescriptions":{"typeIdentifier":"t_rational_130000000000000000000_by_1","typeString":"int_const 130000000000000000000"},"value":"130e18"},"visibility":"internal"},{"constant":true,"id":4800,"mutability":"constant","name":"MIN_NATURAL_EXPONENT","nameLocation":"2377:20:26","nodeType":"VariableDeclaration","scope":6122,"src":"2361:45:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4797,"name":"int256","nodeType":"ElementaryTypeName","src":"2361:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"id":4799,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"2400:6:26","subExpression":{"hexValue":"3431653138","id":4798,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2401:5:26","typeDescriptions":{"typeIdentifier":"t_rational_41000000000000000000_by_1","typeString":"int_const 41000000000000000000"},"value":"41e18"},"typeDescriptions":{"typeIdentifier":"t_rational_minus_41000000000000000000_by_1","typeString":"int_const -41000000000000000000"}},"visibility":"internal"},{"constant":true,"id":4805,"mutability":"constant","name":"LN_36_LOWER_BOUND","nameLocation":"2573:17:26","nodeType":"VariableDeclaration","scope":6122,"src":"2557:49:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4801,"name":"int256","nodeType":"ElementaryTypeName","src":"2557:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4804,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":4802,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"2593:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31653137","id":4803,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2602:4:26","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2593:13:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":4810,"mutability":"constant","name":"LN_36_UPPER_BOUND","nameLocation":"2628:17:26","nodeType":"VariableDeclaration","scope":6122,"src":"2612:49:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4806,"name":"int256","nodeType":"ElementaryTypeName","src":"2612:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4809,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":4807,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"2648:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31653137","id":4808,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2657:4:26","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2648:13:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":4820,"mutability":"constant","name":"MILD_EXPONENT_BOUND","nameLocation":"2685:19:26","nodeType":"VariableDeclaration","scope":6122,"src":"2668:65:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4811,"name":"uint256","nodeType":"ElementaryTypeName","src":"2668:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4819,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"},"id":4814,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":4812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2707:1:26","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"323534","id":4813,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2712:3:26","typeDescriptions":{"typeIdentifier":"t_rational_254_by_1","typeString":"int_const 254"},"value":"254"},"src":"2707:8:26","typeDescriptions":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"arguments":[{"id":4817,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"2726:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":4816,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2718:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4815,"name":"uint256","nodeType":"ElementaryTypeName","src":"2718:7:26","typeDescriptions":{}}},"id":4818,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2718:15:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2707:26:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":4823,"mutability":"constant","name":"x0","nameLocation":"2784:2:26","nodeType":"VariableDeclaration","scope":6122,"src":"2768:42:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4821,"name":"int256","nodeType":"ElementaryTypeName","src":"2768:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238303030303030303030303030303030303030","id":4822,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2789:21:26","typeDescriptions":{"typeIdentifier":"t_rational_128000000000000000000_by_1","typeString":"int_const 128000000000000000000"},"value":"128000000000000000000"},"visibility":"internal"},{"constant":true,"id":4826,"mutability":"constant","name":"a0","nameLocation":"2840:2:26","nodeType":"VariableDeclaration","scope":6122,"src":"2824:77:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4824,"name":"int256","nodeType":"ElementaryTypeName","src":"2824:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3338383737303834303539393435393530393232323030303030303030303030303030303030303030303030303030303030303030303030","id":4825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2845:56:26","typeDescriptions":{"typeIdentifier":"t_rational_38877084059945950922200000000000000000000000000000000000_by_1","typeString":"int_const 3887...(48 digits omitted)...0000"},"value":"38877084059945950922200000000000000000000000000000000000"},"visibility":"internal"},{"constant":true,"id":4829,"mutability":"constant","name":"x1","nameLocation":"2948:2:26","nodeType":"VariableDeclaration","scope":6122,"src":"2932:41:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4827,"name":"int256","nodeType":"ElementaryTypeName","src":"2932:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3634303030303030303030303030303030303030","id":4828,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2953:20:26","typeDescriptions":{"typeIdentifier":"t_rational_64000000000000000000_by_1","typeString":"int_const 64000000000000000000"},"value":"64000000000000000000"},"visibility":"internal"},{"constant":true,"id":4832,"mutability":"constant","name":"a1","nameLocation":"3003:2:26","nodeType":"VariableDeclaration","scope":6122,"src":"2987:49:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4830,"name":"int256","nodeType":"ElementaryTypeName","src":"2987:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323335313439303830383131363136383832393130303030303030","id":4831,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3008:28:26","typeDescriptions":{"typeIdentifier":"t_rational_6235149080811616882910000000_by_1","typeString":"int_const 6235149080811616882910000000"},"value":"6235149080811616882910000000"},"visibility":"internal"},{"constant":true,"id":4835,"mutability":"constant","name":"x2","nameLocation":"3112:2:26","nodeType":"VariableDeclaration","scope":6122,"src":"3096:43:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4833,"name":"int256","nodeType":"ElementaryTypeName","src":"3096:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"33323030303030303030303030303030303030303030","id":4834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3117:22:26","typeDescriptions":{"typeIdentifier":"t_rational_3200000000000000000000_by_1","typeString":"int_const 3200000000000000000000"},"value":"3200000000000000000000"},"visibility":"internal"},{"constant":true,"id":4838,"mutability":"constant","name":"a2","nameLocation":"3169:2:26","nodeType":"VariableDeclaration","scope":6122,"src":"3153:55:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4836,"name":"int256","nodeType":"ElementaryTypeName","src":"3153:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"37383936323936303138323638303639353136313030303030303030303030303030","id":4837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3174:34:26","typeDescriptions":{"typeIdentifier":"t_rational_7896296018268069516100000000000000_by_1","typeString":"int_const 7896...(26 digits omitted)...0000"},"value":"7896296018268069516100000000000000"},"visibility":"internal"},{"constant":true,"id":4841,"mutability":"constant","name":"x3","nameLocation":"3241:2:26","nodeType":"VariableDeclaration","scope":6122,"src":"3225:43:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4839,"name":"int256","nodeType":"ElementaryTypeName","src":"3225:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31363030303030303030303030303030303030303030","id":4840,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3246:22:26","typeDescriptions":{"typeIdentifier":"t_rational_1600000000000000000000_by_1","typeString":"int_const 1600000000000000000000"},"value":"1600000000000000000000"},"visibility":"internal"},{"constant":true,"id":4844,"mutability":"constant","name":"a3","nameLocation":"3298:2:26","nodeType":"VariableDeclaration","scope":6122,"src":"3282:48:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4842,"name":"int256","nodeType":"ElementaryTypeName","src":"3282:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383838363131303532303530373837323633363736303030303030","id":4843,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3303:27:26","typeDescriptions":{"typeIdentifier":"t_rational_888611052050787263676000000_by_1","typeString":"int_const 888611052050787263676000000"},"value":"888611052050787263676000000"},"visibility":"internal"},{"constant":true,"id":4847,"mutability":"constant","name":"x4","nameLocation":"3363:2:26","nodeType":"VariableDeclaration","scope":6122,"src":"3347:42:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4845,"name":"int256","nodeType":"ElementaryTypeName","src":"3347:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383030303030303030303030303030303030303030","id":4846,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3368:21:26","typeDescriptions":{"typeIdentifier":"t_rational_800000000000000000000_by_1","typeString":"int_const 800000000000000000000"},"value":"800000000000000000000"},"visibility":"internal"},{"constant":true,"id":4850,"mutability":"constant","name":"a4","nameLocation":"3419:2:26","nodeType":"VariableDeclaration","scope":6122,"src":"3403:45:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4848,"name":"int256","nodeType":"ElementaryTypeName","src":"3403:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323938303935373938373034313732383237343734303030","id":4849,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3424:24:26","typeDescriptions":{"typeIdentifier":"t_rational_298095798704172827474000_by_1","typeString":"int_const 298095798704172827474000"},"value":"298095798704172827474000"},"visibility":"internal"},{"constant":true,"id":4853,"mutability":"constant","name":"x5","nameLocation":"3481:2:26","nodeType":"VariableDeclaration","scope":6122,"src":"3465:42:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4851,"name":"int256","nodeType":"ElementaryTypeName","src":"3465:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"343030303030303030303030303030303030303030","id":4852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3486:21:26","typeDescriptions":{"typeIdentifier":"t_rational_400000000000000000000_by_1","typeString":"int_const 400000000000000000000"},"value":"400000000000000000000"},"visibility":"internal"},{"constant":true,"id":4856,"mutability":"constant","name":"a5","nameLocation":"3537:2:26","nodeType":"VariableDeclaration","scope":6122,"src":"3521:43:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4854,"name":"int256","nodeType":"ElementaryTypeName","src":"3521:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"35343539383135303033333134343233393037383130","id":4855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3542:22:26","typeDescriptions":{"typeIdentifier":"t_rational_5459815003314423907810_by_1","typeString":"int_const 5459815003314423907810"},"value":"5459815003314423907810"},"visibility":"internal"},{"constant":true,"id":4859,"mutability":"constant","name":"x6","nameLocation":"3597:2:26","nodeType":"VariableDeclaration","scope":6122,"src":"3581:42:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4857,"name":"int256","nodeType":"ElementaryTypeName","src":"3581:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323030303030303030303030303030303030303030","id":4858,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3602:21:26","typeDescriptions":{"typeIdentifier":"t_rational_200000000000000000000_by_1","typeString":"int_const 200000000000000000000"},"value":"200000000000000000000"},"visibility":"internal"},{"constant":true,"id":4862,"mutability":"constant","name":"a6","nameLocation":"3653:2:26","nodeType":"VariableDeclaration","scope":6122,"src":"3637:42:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4860,"name":"int256","nodeType":"ElementaryTypeName","src":"3637:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"373338393035363039383933303635303232373233","id":4861,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3658:21:26","typeDescriptions":{"typeIdentifier":"t_rational_738905609893065022723_by_1","typeString":"int_const 738905609893065022723"},"value":"738905609893065022723"},"visibility":"internal"},{"constant":true,"id":4865,"mutability":"constant","name":"x7","nameLocation":"3712:2:26","nodeType":"VariableDeclaration","scope":6122,"src":"3696:42:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4863,"name":"int256","nodeType":"ElementaryTypeName","src":"3696:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313030303030303030303030303030303030303030","id":4864,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3717:21:26","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"100000000000000000000"},"visibility":"internal"},{"constant":true,"id":4868,"mutability":"constant","name":"a7","nameLocation":"3768:2:26","nodeType":"VariableDeclaration","scope":6122,"src":"3752:42:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4866,"name":"int256","nodeType":"ElementaryTypeName","src":"3752:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323731383238313832383435393034353233353336","id":4867,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3773:21:26","typeDescriptions":{"typeIdentifier":"t_rational_271828182845904523536_by_1","typeString":"int_const 271828182845904523536"},"value":"271828182845904523536"},"visibility":"internal"},{"constant":true,"id":4871,"mutability":"constant","name":"x8","nameLocation":"3827:2:26","nodeType":"VariableDeclaration","scope":6122,"src":"3811:41:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4869,"name":"int256","nodeType":"ElementaryTypeName","src":"3811:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3530303030303030303030303030303030303030","id":4870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3832:20:26","typeDescriptions":{"typeIdentifier":"t_rational_50000000000000000000_by_1","typeString":"int_const 50000000000000000000"},"value":"50000000000000000000"},"visibility":"internal"},{"constant":true,"id":4874,"mutability":"constant","name":"a8","nameLocation":"3883:2:26","nodeType":"VariableDeclaration","scope":6122,"src":"3867:42:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4872,"name":"int256","nodeType":"ElementaryTypeName","src":"3867:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313634383732313237303730303132383134363835","id":4873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3888:21:26","typeDescriptions":{"typeIdentifier":"t_rational_164872127070012814685_by_1","typeString":"int_const 164872127070012814685"},"value":"164872127070012814685"},"visibility":"internal"},{"constant":true,"id":4877,"mutability":"constant","name":"x9","nameLocation":"3942:2:26","nodeType":"VariableDeclaration","scope":6122,"src":"3926:41:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4875,"name":"int256","nodeType":"ElementaryTypeName","src":"3926:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3235303030303030303030303030303030303030","id":4876,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3947:20:26","typeDescriptions":{"typeIdentifier":"t_rational_25000000000000000000_by_1","typeString":"int_const 25000000000000000000"},"value":"25000000000000000000"},"visibility":"internal"},{"constant":true,"id":4880,"mutability":"constant","name":"a9","nameLocation":"3998:2:26","nodeType":"VariableDeclaration","scope":6122,"src":"3982:42:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4878,"name":"int256","nodeType":"ElementaryTypeName","src":"3982:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238343032353431363638373734313438343037","id":4879,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4003:21:26","typeDescriptions":{"typeIdentifier":"t_rational_128402541668774148407_by_1","typeString":"int_const 128402541668774148407"},"value":"128402541668774148407"},"visibility":"internal"},{"constant":true,"id":4883,"mutability":"constant","name":"x10","nameLocation":"4057:3:26","nodeType":"VariableDeclaration","scope":6122,"src":"4041:42:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4881,"name":"int256","nodeType":"ElementaryTypeName","src":"4041:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3132353030303030303030303030303030303030","id":4882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4063:20:26","typeDescriptions":{"typeIdentifier":"t_rational_12500000000000000000_by_1","typeString":"int_const 12500000000000000000"},"value":"12500000000000000000"},"visibility":"internal"},{"constant":true,"id":4886,"mutability":"constant","name":"a10","nameLocation":"4114:3:26","nodeType":"VariableDeclaration","scope":6122,"src":"4098:43:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4884,"name":"int256","nodeType":"ElementaryTypeName","src":"4098:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313133333134383435333036363832363331363833","id":4885,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4120:21:26","typeDescriptions":{"typeIdentifier":"t_rational_113314845306682631683_by_1","typeString":"int_const 113314845306682631683"},"value":"113314845306682631683"},"visibility":"internal"},{"constant":true,"id":4889,"mutability":"constant","name":"x11","nameLocation":"4175:3:26","nodeType":"VariableDeclaration","scope":6122,"src":"4159:41:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4887,"name":"int256","nodeType":"ElementaryTypeName","src":"4159:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323530303030303030303030303030303030","id":4888,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4181:19:26","typeDescriptions":{"typeIdentifier":"t_rational_6250000000000000000_by_1","typeString":"int_const 6250000000000000000"},"value":"6250000000000000000"},"visibility":"internal"},{"constant":true,"id":4892,"mutability":"constant","name":"a11","nameLocation":"4231:3:26","nodeType":"VariableDeclaration","scope":6122,"src":"4215:43:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4890,"name":"int256","nodeType":"ElementaryTypeName","src":"4215:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313036343439343435383931373835393432393536","id":4891,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4237:21:26","typeDescriptions":{"typeIdentifier":"t_rational_106449445891785942956_by_1","typeString":"int_const 106449445891785942956"},"value":"106449445891785942956"},"visibility":"internal"},{"body":{"id":5024,"nodeType":"Block","src":"4563:2233:26","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4902,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4897,"src":"4577:1:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4903,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4582:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4577:6:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4911,"nodeType":"IfStatement","src":"4573:131:26","trueBody":{"id":4910,"nodeType":"Block","src":"4585:119:26","statements":[{"expression":{"arguments":[{"id":4907,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"4686:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":4906,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4678:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4905,"name":"uint256","nodeType":"ElementaryTypeName","src":"4678:7:26","typeDescriptions":{}}},"id":4908,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4678:15:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4901,"id":4909,"nodeType":"Return","src":"4671:22:26"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4912,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4895,"src":"4718:1:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4723:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4718:6:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4918,"nodeType":"IfStatement","src":"4714:45:26","trueBody":{"id":4917,"nodeType":"Block","src":"4726:33:26","statements":[{"expression":{"hexValue":"30","id":4915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4747:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":4901,"id":4916,"nodeType":"Return","src":"4740:8:26"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4919,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4895,"src":"5133:1:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":4920,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5138:3:26","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"5133:8:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4922,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5145:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5133:13:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4928,"nodeType":"IfStatement","src":"5129:68:26","trueBody":{"id":4927,"nodeType":"Block","src":"5148:49:26","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4924,"name":"BaseOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4772,"src":"5169:15:26","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5169:17:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4926,"nodeType":"RevertStatement","src":"5162:24:26"}]}},{"assignments":[4930],"declarations":[{"constant":false,"id":4930,"mutability":"mutable","name":"x_int256","nameLocation":"5213:8:26","nodeType":"VariableDeclaration","scope":5024,"src":"5206:15:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4929,"name":"int256","nodeType":"ElementaryTypeName","src":"5206:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4935,"initialValue":{"arguments":[{"id":4933,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4895,"src":"5231:1:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4932,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5224:6:26","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":4931,"name":"int256","nodeType":"ElementaryTypeName","src":"5224:6:26","typeDescriptions":{}}},"id":4934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5224:9:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5206:27:26"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4936,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4897,"src":"5591:1:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4937,"name":"MILD_EXPONENT_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4820,"src":"5596:19:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5591:24:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4943,"nodeType":"IfStatement","src":"5587:83:26","trueBody":{"id":4942,"nodeType":"Block","src":"5617:53:26","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4939,"name":"ExponentOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4775,"src":"5638:19:26","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5638:21:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4941,"nodeType":"RevertStatement","src":"5631:28:26"}]}},{"assignments":[4945],"declarations":[{"constant":false,"id":4945,"mutability":"mutable","name":"y_int256","nameLocation":"5686:8:26","nodeType":"VariableDeclaration","scope":5024,"src":"5679:15:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4944,"name":"int256","nodeType":"ElementaryTypeName","src":"5679:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4950,"initialValue":{"arguments":[{"id":4948,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4897,"src":"5704:1:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4947,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5697:6:26","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":4946,"name":"int256","nodeType":"ElementaryTypeName","src":"5697:6:26","typeDescriptions":{}}},"id":4949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5697:9:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5679:27:26"},{"assignments":[4952],"declarations":[{"constant":false,"id":4952,"mutability":"mutable","name":"logx_times_y","nameLocation":"5724:12:26","nodeType":"VariableDeclaration","scope":5024,"src":"5717:19:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4951,"name":"int256","nodeType":"ElementaryTypeName","src":"5717:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4953,"nodeType":"VariableDeclarationStatement","src":"5717:19:26"},{"id":5002,"nodeType":"UncheckedBlock","src":"5746:790:26","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4954,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4805,"src":"5774:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4955,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4930,"src":"5794:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5774:28:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4957,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4930,"src":"5806:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4958,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4810,"src":"5817:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5806:28:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5774:60:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4996,"nodeType":"Block","src":"6418:72:26","statements":[{"expression":{"id":4994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4988,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4952,"src":"6436:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4990,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4930,"src":"6455:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":4989,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5966,"src":"6451:3:26","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":4991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6451:13:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4992,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"6467:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6451:24:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6436:39:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4995,"nodeType":"ExpressionStatement","src":"6436:39:26"}]},"id":4997,"nodeType":"IfStatement","src":"5770:720:26","trueBody":{"id":4987,"nodeType":"Block","src":"5836:576:26","statements":[{"assignments":[4962],"declarations":[{"constant":false,"id":4962,"mutability":"mutable","name":"ln_36_x","nameLocation":"5861:7:26","nodeType":"VariableDeclaration","scope":4987,"src":"5854:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4961,"name":"int256","nodeType":"ElementaryTypeName","src":"5854:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4966,"initialValue":{"arguments":[{"id":4964,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4930,"src":"5878:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":4963,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6121,"src":"5871:6:26","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":4965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5871:16:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5854:33:26"},{"expression":{"id":4985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4967,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4952,"src":"6308:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4968,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4962,"src":"6325:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4969,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"6335:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6325:16:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4971,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6324:18:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4972,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"6345:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:29:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4974,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4962,"src":"6358:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":4975,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"6368:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6358:16:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4977,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6357:18:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4978,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"6378:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6357:29:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4980,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6356:31:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4981,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"6390:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6356:40:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:72:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4984,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6323:74:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6308:89:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4986,"nodeType":"ExpressionStatement","src":"6308:89:26"}]}},{"expression":{"id":5000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4998,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4952,"src":"6503:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":4999,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"6519:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6503:22:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5001,"nodeType":"ExpressionStatement","src":"6503:22:26"}]},{"condition":{"id":5011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6613:79:26","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5003,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4800,"src":"6615:20:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":5004,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4952,"src":"6639:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6615:36:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5006,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4952,"src":"6655:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":5007,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"6671:20:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6655:36:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6615:76:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5010,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6614:78:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5016,"nodeType":"IfStatement","src":"6609:137:26","trueBody":{"id":5015,"nodeType":"Block","src":"6694:52:26","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5012,"name":"ProductOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4778,"src":"6715:18:26","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6715:20:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5014,"nodeType":"RevertStatement","src":"6708:27:26"}]}},{"expression":{"arguments":[{"arguments":[{"id":5020,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4952,"src":"6775:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5019,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5472,"src":"6771:3:26","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6771:17:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5018,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6763:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5017,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:26","typeDescriptions":{}}},"id":5022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6763:26:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4901,"id":5023,"nodeType":"Return","src":"6756:33:26"}]},"documentation":{"id":4893,"nodeType":"StructuredDocumentation","src":"4277:214:26","text":" @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`."},"id":5025,"implemented":true,"kind":"function","modifiers":[],"name":"pow","nameLocation":"4505:3:26","nodeType":"FunctionDefinition","parameters":{"id":4898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4895,"mutability":"mutable","name":"x","nameLocation":"4517:1:26","nodeType":"VariableDeclaration","scope":5025,"src":"4509:9:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4894,"name":"uint256","nodeType":"ElementaryTypeName","src":"4509:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4897,"mutability":"mutable","name":"y","nameLocation":"4528:1:26","nodeType":"VariableDeclaration","scope":5025,"src":"4520:9:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4896,"name":"uint256","nodeType":"ElementaryTypeName","src":"4520:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4508:22:26"},"returnParameters":{"id":4901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4900,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5025,"src":"4554:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4899,"name":"uint256","nodeType":"ElementaryTypeName","src":"4554:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4553:9:26"},"scope":6122,"src":"4496:2300:26","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5471,"nodeType":"Block","src":"7064:6082:26","statements":[{"condition":{"id":5041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7078:57:26","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5033,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"7080:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5034,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4800,"src":"7085:20:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7080:25:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5036,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"7109:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":5037,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"7114:20:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7109:25:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7080:54:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5040,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7079:56:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5046,"nodeType":"IfStatement","src":"7074:112:26","trueBody":{"id":5045,"nodeType":"Block","src":"7137:49:26","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5042,"name":"InvalidExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4781,"src":"7158:15:26","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7158:17:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5044,"nodeType":"RevertStatement","src":"7151:24:26"}]}},{"assignments":[5048],"declarations":[{"constant":false,"id":5048,"mutability":"mutable","name":"negativeExponent","nameLocation":"7277:16:26","nodeType":"VariableDeclaration","scope":5471,"src":"7272:21:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5047,"name":"bool","nodeType":"ElementaryTypeName","src":"7272:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5050,"initialValue":{"hexValue":"66616c7365","id":5049,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7296:5:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"7272:29:26"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5051,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"7316:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":5052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7320:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7316:5:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5065,"nodeType":"IfStatement","src":"7312:417:26","trueBody":{"id":5064,"nodeType":"Block","src":"7323:406:26","statements":[{"id":5059,"nodeType":"UncheckedBlock","src":"7633:49:26","statements":[{"expression":{"id":5057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5054,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"7661:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"7665:2:26","subExpression":{"id":5055,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"7666:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7661:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5058,"nodeType":"ExpressionStatement","src":"7661:6:26"}]},{"expression":{"id":5062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5060,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5048,"src":"7695:16:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":5061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7714:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"7695:23:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5063,"nodeType":"ExpressionStatement","src":"7695:23:26"}]}},{"assignments":[5067],"declarations":[{"constant":false,"id":5067,"mutability":"mutable","name":"firstAN","nameLocation":"9037:7:26","nodeType":"VariableDeclaration","scope":5471,"src":"9030:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5066,"name":"int256","nodeType":"ElementaryTypeName","src":"9030:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5068,"nodeType":"VariableDeclarationStatement","src":"9030:14:26"},{"id":5104,"nodeType":"UncheckedBlock","src":"9054:457:26","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5069,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"9082:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5070,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4823,"src":"9087:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9082:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5081,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"9171:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5082,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4829,"src":"9176:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9171:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5097,"nodeType":"Block","src":"9256:74:26","statements":[{"expression":{"id":5095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5093,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5067,"src":"9274:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":5094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9284:1:26","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9274:11:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5096,"nodeType":"ExpressionStatement","src":"9274:11:26"}]},"id":5098,"nodeType":"IfStatement","src":"9167:163:26","trueBody":{"id":5092,"nodeType":"Block","src":"9180:70:26","statements":[{"expression":{"id":5086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5084,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"9198:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5085,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4829,"src":"9203:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9198:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5087,"nodeType":"ExpressionStatement","src":"9198:7:26"},{"expression":{"id":5090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5088,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5067,"src":"9223:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5089,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4832,"src":"9233:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9223:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5091,"nodeType":"ExpressionStatement","src":"9223:12:26"}]}},"id":5099,"nodeType":"IfStatement","src":"9078:252:26","trueBody":{"id":5080,"nodeType":"Block","src":"9091:70:26","statements":[{"expression":{"id":5074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5072,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"9109:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5073,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4823,"src":"9114:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9109:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5075,"nodeType":"ExpressionStatement","src":"9109:7:26"},{"expression":{"id":5078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5076,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5067,"src":"9134:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5077,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4826,"src":"9144:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9134:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5079,"nodeType":"ExpressionStatement","src":"9134:12:26"}]}},{"expression":{"id":5102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5100,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"9492:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":5101,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9497:3:26","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"9492:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5103,"nodeType":"ExpressionStatement","src":"9492:8:26"}]},{"assignments":[5106],"declarations":[{"constant":false,"id":5106,"mutability":"mutable","name":"product","nameLocation":"9730:7:26","nodeType":"VariableDeclaration","scope":5471,"src":"9723:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5105,"name":"int256","nodeType":"ElementaryTypeName","src":"9723:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5108,"initialValue":{"id":5107,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"9740:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"9723:23:26"},{"id":5253,"nodeType":"UncheckedBlock","src":"9757:957:26","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5109,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"9785:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5110,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4835,"src":"9790:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9785:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5126,"nodeType":"IfStatement","src":"9781:104:26","trueBody":{"id":5125,"nodeType":"Block","src":"9794:91:26","statements":[{"expression":{"id":5114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5112,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"9812:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5113,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4835,"src":"9817:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9812:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5115,"nodeType":"ExpressionStatement","src":"9812:7:26"},{"expression":{"id":5123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5116,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"9837:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5117,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"9848:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5118,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4838,"src":"9858:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9848:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5120,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9847:14:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5121,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"9864:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9847:23:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9837:33:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5124,"nodeType":"ExpressionStatement","src":"9837:33:26"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5127,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"9902:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5128,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4841,"src":"9907:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9902:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5144,"nodeType":"IfStatement","src":"9898:104:26","trueBody":{"id":5143,"nodeType":"Block","src":"9911:91:26","statements":[{"expression":{"id":5132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5130,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"9929:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5131,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4841,"src":"9934:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9929:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5133,"nodeType":"ExpressionStatement","src":"9929:7:26"},{"expression":{"id":5141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5134,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"9954:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5135,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"9965:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5136,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4844,"src":"9975:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9965:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5138,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9964:14:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5139,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"9981:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9964:23:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9954:33:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5142,"nodeType":"ExpressionStatement","src":"9954:33:26"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5145,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"10019:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5146,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4847,"src":"10024:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10019:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5162,"nodeType":"IfStatement","src":"10015:104:26","trueBody":{"id":5161,"nodeType":"Block","src":"10028:91:26","statements":[{"expression":{"id":5150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5148,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"10046:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5149,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4847,"src":"10051:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10046:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5151,"nodeType":"ExpressionStatement","src":"10046:7:26"},{"expression":{"id":5159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5152,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"10071:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5153,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"10082:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5154,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4850,"src":"10092:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10082:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5156,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10081:14:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5157,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"10098:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10081:23:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10071:33:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5160,"nodeType":"ExpressionStatement","src":"10071:33:26"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5163,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"10136:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5164,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"10141:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10136:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5180,"nodeType":"IfStatement","src":"10132:104:26","trueBody":{"id":5179,"nodeType":"Block","src":"10145:91:26","statements":[{"expression":{"id":5168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5166,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"10163:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5167,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"10168:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10163:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5169,"nodeType":"ExpressionStatement","src":"10163:7:26"},{"expression":{"id":5177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5170,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"10188:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5171,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"10199:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5172,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4856,"src":"10209:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10199:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5174,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10198:14:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5175,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"10215:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10198:23:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10188:33:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5178,"nodeType":"ExpressionStatement","src":"10188:33:26"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5181,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"10253:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5182,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4859,"src":"10258:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10253:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5198,"nodeType":"IfStatement","src":"10249:104:26","trueBody":{"id":5197,"nodeType":"Block","src":"10262:91:26","statements":[{"expression":{"id":5186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5184,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"10280:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5185,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4859,"src":"10285:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10280:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5187,"nodeType":"ExpressionStatement","src":"10280:7:26"},{"expression":{"id":5195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5188,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"10305:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5189,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"10316:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5190,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4862,"src":"10326:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10316:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5192,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10315:14:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5193,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"10332:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10315:23:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10305:33:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5196,"nodeType":"ExpressionStatement","src":"10305:33:26"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5199,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"10370:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5200,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4865,"src":"10375:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10370:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5216,"nodeType":"IfStatement","src":"10366:104:26","trueBody":{"id":5215,"nodeType":"Block","src":"10379:91:26","statements":[{"expression":{"id":5204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5202,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"10397:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5203,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4865,"src":"10402:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10397:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5205,"nodeType":"ExpressionStatement","src":"10397:7:26"},{"expression":{"id":5213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5206,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"10422:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5207,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"10433:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5208,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4868,"src":"10443:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10433:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5210,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10432:14:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5211,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"10449:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10432:23:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10422:33:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5214,"nodeType":"ExpressionStatement","src":"10422:33:26"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5217,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"10487:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5218,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4871,"src":"10492:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10487:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5234,"nodeType":"IfStatement","src":"10483:104:26","trueBody":{"id":5233,"nodeType":"Block","src":"10496:91:26","statements":[{"expression":{"id":5222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5220,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"10514:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5221,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4871,"src":"10519:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10514:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5223,"nodeType":"ExpressionStatement","src":"10514:7:26"},{"expression":{"id":5231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5224,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"10539:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5225,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"10550:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5226,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4874,"src":"10560:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10550:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5228,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10549:14:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5229,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"10566:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10549:23:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10539:33:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5232,"nodeType":"ExpressionStatement","src":"10539:33:26"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5235,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"10604:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5236,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4877,"src":"10609:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10604:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5252,"nodeType":"IfStatement","src":"10600:104:26","trueBody":{"id":5251,"nodeType":"Block","src":"10613:91:26","statements":[{"expression":{"id":5240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5238,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"10631:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5239,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4877,"src":"10636:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10631:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5241,"nodeType":"ExpressionStatement","src":"10631:7:26"},{"expression":{"id":5249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5242,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"10656:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5243,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"10667:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5244,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4880,"src":"10677:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10667:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5246,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10666:14:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5247,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"10683:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10666:23:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10656:33:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5250,"nodeType":"ExpressionStatement","src":"10656:33:26"}]}}]},{"assignments":[5255],"declarations":[{"constant":false,"id":5255,"mutability":"mutable","name":"seriesSum","nameLocation":"11025:9:26","nodeType":"VariableDeclaration","scope":5471,"src":"11018:16:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5254,"name":"int256","nodeType":"ElementaryTypeName","src":"11018:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5257,"initialValue":{"id":5256,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"11037:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"11018:25:26"},{"assignments":[5259],"declarations":[{"constant":false,"id":5259,"mutability":"mutable","name":"term","nameLocation":"11115:4:26","nodeType":"VariableDeclaration","scope":5471,"src":"11108:11:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5258,"name":"int256","nodeType":"ElementaryTypeName","src":"11108:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5260,"nodeType":"VariableDeclarationStatement","src":"11108:11:26"},{"expression":{"id":5263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5261,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"11228:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5262,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"11235:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11228:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5264,"nodeType":"ExpressionStatement","src":"11228:8:26"},{"id":5470,"nodeType":"UncheckedBlock","src":"11246:1894:26","statements":[{"expression":{"id":5267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5265,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5255,"src":"11270:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5266,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"11283:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11270:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5268,"nodeType":"ExpressionStatement","src":"11270:17:26"},{"expression":{"id":5279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5269,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"11536:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5270,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"11545:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5271,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"11552:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11545:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5273,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11544:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5274,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"11557:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11544:19:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5276,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11543:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":5277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11567:1:26","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"11543:25:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11536:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5280,"nodeType":"ExpressionStatement","src":"11536:32:26"},{"expression":{"id":5283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5281,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5255,"src":"11582:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5282,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"11595:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11582:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5284,"nodeType":"ExpressionStatement","src":"11582:17:26"},{"expression":{"id":5295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5285,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"11614:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5286,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"11623:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5287,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"11630:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11623:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5289,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11622:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5290,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"11635:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11622:19:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5292,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11621:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":5293,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11645:1:26","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"11621:25:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11614:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5296,"nodeType":"ExpressionStatement","src":"11614:32:26"},{"expression":{"id":5299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5297,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5255,"src":"11660:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5298,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"11673:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11660:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5300,"nodeType":"ExpressionStatement","src":"11660:17:26"},{"expression":{"id":5311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5301,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"11692:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5302,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"11701:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5303,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"11708:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11701:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5305,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11700:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5306,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"11713:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11700:19:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5308,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11699:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"34","id":5309,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11723:1:26","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11699:25:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11692:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5312,"nodeType":"ExpressionStatement","src":"11692:32:26"},{"expression":{"id":5315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5313,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5255,"src":"11738:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5314,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"11751:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11738:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5316,"nodeType":"ExpressionStatement","src":"11738:17:26"},{"expression":{"id":5327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5317,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"11770:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5318,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"11779:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5319,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"11786:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11779:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5321,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11778:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5322,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"11791:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11778:19:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5324,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11777:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":5325,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11801:1:26","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"11777:25:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11770:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5328,"nodeType":"ExpressionStatement","src":"11770:32:26"},{"expression":{"id":5331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5329,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5255,"src":"11816:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5330,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"11829:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11816:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5332,"nodeType":"ExpressionStatement","src":"11816:17:26"},{"expression":{"id":5343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5333,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"11848:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5334,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"11857:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5335,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"11864:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11857:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5337,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11856:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5338,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"11869:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11856:19:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5340,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11855:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"36","id":5341,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11879:1:26","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"11855:25:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11848:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5344,"nodeType":"ExpressionStatement","src":"11848:32:26"},{"expression":{"id":5347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5345,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5255,"src":"11894:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5346,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"11907:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11894:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5348,"nodeType":"ExpressionStatement","src":"11894:17:26"},{"expression":{"id":5359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5349,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"11926:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5350,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"11935:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5351,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"11942:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11935:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5353,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11934:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5354,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"11947:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11934:19:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5356,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11933:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":5357,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11957:1:26","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"11933:25:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11926:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5360,"nodeType":"ExpressionStatement","src":"11926:32:26"},{"expression":{"id":5363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5361,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5255,"src":"11972:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5362,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"11985:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11972:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5364,"nodeType":"ExpressionStatement","src":"11972:17:26"},{"expression":{"id":5375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5365,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"12004:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5366,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"12013:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5367,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"12020:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12013:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5369,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12012:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5370,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"12025:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12012:19:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5372,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12011:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"38","id":5373,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12035:1:26","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12011:25:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12004:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5376,"nodeType":"ExpressionStatement","src":"12004:32:26"},{"expression":{"id":5379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5377,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5255,"src":"12050:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5378,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"12063:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12050:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5380,"nodeType":"ExpressionStatement","src":"12050:17:26"},{"expression":{"id":5391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5381,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"12082:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5382,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"12091:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5383,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"12098:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12091:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5385,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12090:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5386,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"12103:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12090:19:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5388,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12089:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":5389,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12113:1:26","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"12089:25:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12082:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5392,"nodeType":"ExpressionStatement","src":"12082:32:26"},{"expression":{"id":5395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5393,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5255,"src":"12128:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5394,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"12141:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12128:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5396,"nodeType":"ExpressionStatement","src":"12128:17:26"},{"expression":{"id":5407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5397,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"12160:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5398,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"12169:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5399,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"12176:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12169:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5401,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12168:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5402,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"12181:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12168:19:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5404,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12167:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":5405,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12191:2:26","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"12167:26:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12160:33:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5408,"nodeType":"ExpressionStatement","src":"12160:33:26"},{"expression":{"id":5411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5409,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5255,"src":"12207:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5410,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"12220:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12207:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5412,"nodeType":"ExpressionStatement","src":"12207:17:26"},{"expression":{"id":5423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5413,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"12239:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5414,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"12248:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5415,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"12255:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12248:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5417,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12247:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5418,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"12260:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12247:19:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5420,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12246:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":5421,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12270:2:26","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"12246:26:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12239:33:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5424,"nodeType":"ExpressionStatement","src":"12239:33:26"},{"expression":{"id":5427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5425,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5255,"src":"12286:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5426,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"12299:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12286:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5428,"nodeType":"ExpressionStatement","src":"12286:17:26"},{"expression":{"id":5439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5429,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"12318:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5430,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"12327:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5431,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"12334:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12327:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5433,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12326:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5434,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"12339:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12326:19:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5436,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12325:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3132","id":5437,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12349:2:26","typeDescriptions":{"typeIdentifier":"t_rational_12_by_1","typeString":"int_const 12"},"value":"12"},"src":"12325:26:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12318:33:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5440,"nodeType":"ExpressionStatement","src":"12318:33:26"},{"expression":{"id":5443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5441,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5255,"src":"12365:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5442,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5259,"src":"12378:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12365:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5444,"nodeType":"ExpressionStatement","src":"12365:17:26"},{"assignments":[5446],"declarations":[{"constant":false,"id":5446,"mutability":"mutable","name":"result","nameLocation":"12914:6:26","nodeType":"VariableDeclaration","scope":5470,"src":"12907:13:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5445,"name":"int256","nodeType":"ElementaryTypeName","src":"12907:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5459,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5447,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"12926:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5448,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5255,"src":"12936:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12926:19:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5450,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12925:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5451,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"12949:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12925:30:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5453,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12924:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5454,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5067,"src":"12959:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12924:42:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5456,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12923:44:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":5457,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12970:3:26","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"12923:50:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"12907:66:26"},{"expression":{"condition":{"id":5460,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5048,"src":"13075:16:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":5467,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5446,"src":"13123:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"13075:54:26","trueExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5463,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5461,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"13095:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5462,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"13104:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13095:15:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5464,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"13094:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5465,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5446,"src":"13114:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13094:26:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5032,"id":5469,"nodeType":"Return","src":"13068:61:26"}]}]},"documentation":{"id":5026,"nodeType":"StructuredDocumentation","src":"6802:203:26","text":" @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`."},"id":5472,"implemented":true,"kind":"function","modifiers":[],"name":"exp","nameLocation":"7019:3:26","nodeType":"FunctionDefinition","parameters":{"id":5029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5028,"mutability":"mutable","name":"x","nameLocation":"7030:1:26","nodeType":"VariableDeclaration","scope":5472,"src":"7023:8:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5027,"name":"int256","nodeType":"ElementaryTypeName","src":"7023:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7022:10:26"},"returnParameters":{"id":5032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5031,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5472,"src":"7056:6:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5030,"name":"int256","nodeType":"ElementaryTypeName","src":"7056:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7055:8:26"},"scope":6122,"src":"7010:6136:26","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5545,"nodeType":"Block","src":"13315:861:26","statements":[{"assignments":[5483],"declarations":[{"constant":false,"id":5483,"mutability":"mutable","name":"logBase","nameLocation":"13552:7:26","nodeType":"VariableDeclaration","scope":5545,"src":"13545:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5482,"name":"int256","nodeType":"ElementaryTypeName","src":"13545:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5484,"nodeType":"VariableDeclarationStatement","src":"13545:14:26"},{"id":5509,"nodeType":"UncheckedBlock","src":"13569:214:26","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5485,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4805,"src":"13597:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5486,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5477,"src":"13617:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13597:24:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5488,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5477,"src":"13625:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5489,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4810,"src":"13632:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13625:24:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13597:52:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5507,"nodeType":"Block","src":"13712:61:26","statements":[{"expression":{"id":5505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5499,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5483,"src":"13730:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5501,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5477,"src":"13744:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5500,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5966,"src":"13740:3:26","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13740:9:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5503,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"13752:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13740:18:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13730:28:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5506,"nodeType":"ExpressionStatement","src":"13730:28:26"}]},"id":5508,"nodeType":"IfStatement","src":"13593:180:26","trueBody":{"id":5498,"nodeType":"Block","src":"13651:55:26","statements":[{"expression":{"id":5496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5492,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5483,"src":"13669:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5494,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5477,"src":"13686:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5493,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6121,"src":"13679:6:26","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13679:12:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13669:22:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5497,"nodeType":"ExpressionStatement","src":"13669:22:26"}]}}]},{"assignments":[5511],"declarations":[{"constant":false,"id":5511,"mutability":"mutable","name":"logArg","nameLocation":"13800:6:26","nodeType":"VariableDeclaration","scope":5545,"src":"13793:13:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5510,"name":"int256","nodeType":"ElementaryTypeName","src":"13793:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5512,"nodeType":"VariableDeclarationStatement","src":"13793:13:26"},{"id":5544,"nodeType":"UncheckedBlock","src":"13816:354:26","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5513,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4805,"src":"13844:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5514,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5475,"src":"13864:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13844:23:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5516,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5475,"src":"13871:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5517,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4810,"src":"13877:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13871:23:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13844:50:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5535,"nodeType":"Block","src":"13955:59:26","statements":[{"expression":{"id":5533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5527,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5511,"src":"13973:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5529,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5475,"src":"13986:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5528,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5966,"src":"13982:3:26","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13982:8:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5531,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"13993:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13982:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13973:26:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5534,"nodeType":"ExpressionStatement","src":"13973:26:26"}]},"id":5536,"nodeType":"IfStatement","src":"13840:174:26","trueBody":{"id":5526,"nodeType":"Block","src":"13896:53:26","statements":[{"expression":{"id":5524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5520,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5511,"src":"13914:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5522,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5475,"src":"13930:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5521,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6121,"src":"13923:6:26","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13923:11:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13914:20:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5525,"nodeType":"ExpressionStatement","src":"13914:20:26"}]}},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5537,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5511,"src":"14133:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5538,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"14142:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14133:15:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5540,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14132:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5541,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5483,"src":"14152:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14132:27:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5481,"id":5543,"nodeType":"Return","src":"14125:34:26"}]}]},"documentation":{"id":5473,"nodeType":"StructuredDocumentation","src":"13152:89:26","text":"@dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument."},"id":5546,"implemented":true,"kind":"function","modifiers":[],"name":"log","nameLocation":"13255:3:26","nodeType":"FunctionDefinition","parameters":{"id":5478,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5475,"mutability":"mutable","name":"arg","nameLocation":"13266:3:26","nodeType":"VariableDeclaration","scope":5546,"src":"13259:10:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5474,"name":"int256","nodeType":"ElementaryTypeName","src":"13259:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":5477,"mutability":"mutable","name":"base","nameLocation":"13278:4:26","nodeType":"VariableDeclaration","scope":5546,"src":"13271:11:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5476,"name":"int256","nodeType":"ElementaryTypeName","src":"13271:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13258:25:26"},"returnParameters":{"id":5481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5480,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5546,"src":"13307:6:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5479,"name":"int256","nodeType":"ElementaryTypeName","src":"13307:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13306:8:26"},"scope":6122,"src":"13246:930:26","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5583,"nodeType":"Block","src":"14319:353:26","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5554,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5549,"src":"14416:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"30","id":5555,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14421:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14416:6:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5561,"nodeType":"IfStatement","src":"14412:57:26","trueBody":{"id":5560,"nodeType":"Block","src":"14424:45:26","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5557,"name":"OutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4784,"src":"14445:11:26","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14445:13:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5559,"nodeType":"RevertStatement","src":"14438:20:26"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5562,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4805,"src":"14482:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5563,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5549,"src":"14502:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14482:21:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5565,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5549,"src":"14507:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5566,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4810,"src":"14511:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14507:21:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14482:46:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5581,"nodeType":"Block","src":"14628:38:26","statements":[{"expression":{"arguments":[{"id":5578,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5549,"src":"14653:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5577,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5966,"src":"14649:3:26","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14649:6:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5553,"id":5580,"nodeType":"Return","src":"14642:13:26"}]},"id":5582,"nodeType":"IfStatement","src":"14478:188:26","trueBody":{"id":5576,"nodeType":"Block","src":"14530:92:26","statements":[{"id":5575,"nodeType":"UncheckedBlock","src":"14544:68:26","statements":[{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5570,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5549,"src":"14586:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5569,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6121,"src":"14579:6:26","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14579:9:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5572,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"14591:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14579:18:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5553,"id":5574,"nodeType":"Return","src":"14572:25:26"}]}]}}]},"documentation":{"id":5547,"nodeType":"StructuredDocumentation","src":"14182:79:26","text":"@dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":5584,"implemented":true,"kind":"function","modifiers":[],"name":"ln","nameLocation":"14275:2:26","nodeType":"FunctionDefinition","parameters":{"id":5550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5549,"mutability":"mutable","name":"a","nameLocation":"14285:1:26","nodeType":"VariableDeclaration","scope":5584,"src":"14278:8:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5548,"name":"int256","nodeType":"ElementaryTypeName","src":"14278:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14277:10:26"},"returnParameters":{"id":5553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5552,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5584,"src":"14311:6:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5551,"name":"int256","nodeType":"ElementaryTypeName","src":"14311:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14310:8:26"},"scope":6122,"src":"14266:406:26","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5965,"nodeType":"Block","src":"14824:5531:26","statements":[{"assignments":[5593],"declarations":[{"constant":false,"id":5593,"mutability":"mutable","name":"negativeExponent","nameLocation":"14915:16:26","nodeType":"VariableDeclaration","scope":5965,"src":"14910:21:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5592,"name":"bool","nodeType":"ElementaryTypeName","src":"14910:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5595,"initialValue":{"hexValue":"66616c7365","id":5594,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14934:5:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"14910:29:26"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5596,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"14954:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5597,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"14958:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14954:10:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5614,"nodeType":"IfStatement","src":"14950:381:26","trueBody":{"id":5613,"nodeType":"Block","src":"14966:365:26","statements":[{"id":5608,"nodeType":"UncheckedBlock","src":"15216:68:26","statements":[{"expression":{"id":5606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5599,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"15244:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5602,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5600,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"15249:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5601,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"15258:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15249:15:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5603,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"15248:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5604,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"15268:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15248:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15244:25:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5607,"nodeType":"ExpressionStatement","src":"15244:25:26"}]},{"expression":{"id":5611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5609,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5593,"src":"15297:16:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":5610,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15316:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"15297:23:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5612,"nodeType":"ExpressionStatement","src":"15297:23:26"}]}},{"assignments":[5616],"declarations":[{"constant":false,"id":5616,"mutability":"mutable","name":"sum","nameLocation":"16663:3:26","nodeType":"VariableDeclaration","scope":5965,"src":"16656:10:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5615,"name":"int256","nodeType":"ElementaryTypeName","src":"16656:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5618,"initialValue":{"hexValue":"30","id":5617,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16669:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16656:14:26"},{"id":5837,"nodeType":"UncheckedBlock","src":"16680:1674:26","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5619,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"16708:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5622,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5620,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4826,"src":"16713:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5621,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"16718:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16713:11:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16708:16:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5633,"nodeType":"IfStatement","src":"16704:126:26","trueBody":{"id":5632,"nodeType":"Block","src":"16726:104:26","statements":[{"expression":{"id":5626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5624,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"16744:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":5625,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4826,"src":"16749:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16744:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5627,"nodeType":"ExpressionStatement","src":"16744:7:26"},{"expression":{"id":5630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5628,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"16806:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5629,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4823,"src":"16813:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16806:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5631,"nodeType":"ExpressionStatement","src":"16806:9:26"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5634,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"16848:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5637,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5635,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4832,"src":"16853:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5636,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"16858:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16853:11:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16848:16:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5648,"nodeType":"IfStatement","src":"16844:126:26","trueBody":{"id":5647,"nodeType":"Block","src":"16866:104:26","statements":[{"expression":{"id":5641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5639,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"16884:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":5640,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4832,"src":"16889:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16884:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5642,"nodeType":"ExpressionStatement","src":"16884:7:26"},{"expression":{"id":5645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5643,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"16946:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5644,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4829,"src":"16953:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16946:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5646,"nodeType":"ExpressionStatement","src":"16946:9:26"}]}},{"expression":{"id":5651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5649,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"17109:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":5650,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17116:3:26","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17109:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5652,"nodeType":"ExpressionStatement","src":"17109:10:26"},{"expression":{"id":5655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5653,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17133:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":5654,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17138:3:26","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17133:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5656,"nodeType":"ExpressionStatement","src":"17133:8:26"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5657,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17276:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5658,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4838,"src":"17281:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17276:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5674,"nodeType":"IfStatement","src":"17272:94:26","trueBody":{"id":5673,"nodeType":"Block","src":"17285:81:26","statements":[{"expression":{"id":5667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5660,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17303:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5661,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17308:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5662,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"17312:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17308:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5664,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17307:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5665,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4838,"src":"17322:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17307:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17303:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5668,"nodeType":"ExpressionStatement","src":"17303:21:26"},{"expression":{"id":5671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5669,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"17342:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5670,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4835,"src":"17349:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17342:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5672,"nodeType":"ExpressionStatement","src":"17342:9:26"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5675,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17384:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5676,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4844,"src":"17389:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17384:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5692,"nodeType":"IfStatement","src":"17380:94:26","trueBody":{"id":5691,"nodeType":"Block","src":"17393:81:26","statements":[{"expression":{"id":5685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5678,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17411:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5679,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17416:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5680,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"17420:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17416:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5682,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17415:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5683,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4844,"src":"17430:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17415:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17411:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5686,"nodeType":"ExpressionStatement","src":"17411:21:26"},{"expression":{"id":5689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5687,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"17450:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5688,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4841,"src":"17457:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17450:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5690,"nodeType":"ExpressionStatement","src":"17450:9:26"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5693,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17492:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5694,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4850,"src":"17497:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17492:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5710,"nodeType":"IfStatement","src":"17488:94:26","trueBody":{"id":5709,"nodeType":"Block","src":"17501:81:26","statements":[{"expression":{"id":5703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5696,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17519:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5697,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17524:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5698,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"17528:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17524:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5700,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17523:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5701,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4850,"src":"17538:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17523:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17519:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5704,"nodeType":"ExpressionStatement","src":"17519:21:26"},{"expression":{"id":5707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5705,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"17558:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5706,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4847,"src":"17565:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17558:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5708,"nodeType":"ExpressionStatement","src":"17558:9:26"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5711,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17600:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5712,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4856,"src":"17605:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17600:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5728,"nodeType":"IfStatement","src":"17596:94:26","trueBody":{"id":5727,"nodeType":"Block","src":"17609:81:26","statements":[{"expression":{"id":5721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5714,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17627:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5715,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17632:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5716,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"17636:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17632:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5718,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17631:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5719,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4856,"src":"17646:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17631:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17627:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5722,"nodeType":"ExpressionStatement","src":"17627:21:26"},{"expression":{"id":5725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5723,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"17666:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5724,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"17673:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17666:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5726,"nodeType":"ExpressionStatement","src":"17666:9:26"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5729,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17708:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5730,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4862,"src":"17713:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17708:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5746,"nodeType":"IfStatement","src":"17704:94:26","trueBody":{"id":5745,"nodeType":"Block","src":"17717:81:26","statements":[{"expression":{"id":5739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5732,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17735:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5733,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17740:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5734,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"17744:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17740:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5736,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17739:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5737,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4862,"src":"17754:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17739:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17735:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5740,"nodeType":"ExpressionStatement","src":"17735:21:26"},{"expression":{"id":5743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5741,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"17774:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5742,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4859,"src":"17781:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17774:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5744,"nodeType":"ExpressionStatement","src":"17774:9:26"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5747,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17816:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5748,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4868,"src":"17821:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17816:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5764,"nodeType":"IfStatement","src":"17812:94:26","trueBody":{"id":5763,"nodeType":"Block","src":"17825:81:26","statements":[{"expression":{"id":5757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5750,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17843:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5751,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17848:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5752,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"17852:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17848:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5754,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17847:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5755,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4868,"src":"17862:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17847:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17843:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5758,"nodeType":"ExpressionStatement","src":"17843:21:26"},{"expression":{"id":5761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5759,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"17882:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5760,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4865,"src":"17889:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17882:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5762,"nodeType":"ExpressionStatement","src":"17882:9:26"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5765,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17924:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5766,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4874,"src":"17929:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17924:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5782,"nodeType":"IfStatement","src":"17920:94:26","trueBody":{"id":5781,"nodeType":"Block","src":"17933:81:26","statements":[{"expression":{"id":5775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5768,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17951:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5769,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"17956:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5770,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"17960:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17956:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5772,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17955:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5773,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4874,"src":"17970:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17955:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17951:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5776,"nodeType":"ExpressionStatement","src":"17951:21:26"},{"expression":{"id":5779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5777,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"17990:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5778,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4871,"src":"17997:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17990:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5780,"nodeType":"ExpressionStatement","src":"17990:9:26"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5783,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"18032:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5784,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4880,"src":"18037:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18032:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5800,"nodeType":"IfStatement","src":"18028:94:26","trueBody":{"id":5799,"nodeType":"Block","src":"18041:81:26","statements":[{"expression":{"id":5793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5786,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"18059:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5787,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"18064:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5788,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"18068:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18064:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5790,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18063:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5791,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4880,"src":"18078:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18063:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18059:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5794,"nodeType":"ExpressionStatement","src":"18059:21:26"},{"expression":{"id":5797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5795,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"18098:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5796,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4877,"src":"18105:2:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18098:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5798,"nodeType":"ExpressionStatement","src":"18098:9:26"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5801,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"18140:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5802,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4886,"src":"18145:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18140:8:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5818,"nodeType":"IfStatement","src":"18136:97:26","trueBody":{"id":5817,"nodeType":"Block","src":"18150:83:26","statements":[{"expression":{"id":5811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5804,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"18168:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5805,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"18173:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5806,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"18177:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18173:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5808,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18172:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5809,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4886,"src":"18187:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18172:18:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18168:22:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5812,"nodeType":"ExpressionStatement","src":"18168:22:26"},{"expression":{"id":5815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5813,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"18208:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5814,"name":"x10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4883,"src":"18215:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18208:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5816,"nodeType":"ExpressionStatement","src":"18208:10:26"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5819,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"18251:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5820,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4892,"src":"18256:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18251:8:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5836,"nodeType":"IfStatement","src":"18247:97:26","trueBody":{"id":5835,"nodeType":"Block","src":"18261:83:26","statements":[{"expression":{"id":5829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5822,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"18279:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5823,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"18284:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5824,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"18288:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18284:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5826,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18283:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5827,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4892,"src":"18298:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18283:18:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18279:22:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5830,"nodeType":"ExpressionStatement","src":"18279:22:26"},{"expression":{"id":5833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5831,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"18319:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5832,"name":"x11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4889,"src":"18326:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18319:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5834,"nodeType":"ExpressionStatement","src":"18319:10:26"}]}}]},{"id":5964,"nodeType":"UncheckedBlock","src":"18856:1493:26","statements":[{"assignments":[5839],"declarations":[{"constant":false,"id":5839,"mutability":"mutable","name":"z","nameLocation":"18887:1:26","nodeType":"VariableDeclaration","scope":5964,"src":"18880:8:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5838,"name":"int256","nodeType":"ElementaryTypeName","src":"18880:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5852,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5840,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"18893:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":5841,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"18897:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18893:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5843,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18892:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5844,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"18907:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18892:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5846,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18891:23:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5847,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5587,"src":"18918:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":5848,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"18922:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18918:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5850,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18917:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18891:38:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18880:49:26"},{"assignments":[5854],"declarations":[{"constant":false,"id":5854,"mutability":"mutable","name":"z_squared","nameLocation":"18950:9:26","nodeType":"VariableDeclaration","scope":5964,"src":"18943:16:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5853,"name":"int256","nodeType":"ElementaryTypeName","src":"18943:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5861,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5855,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5839,"src":"18963:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5856,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5839,"src":"18967:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18963:5:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5858,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18962:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5859,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"18972:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18962:16:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18943:35:26"},{"assignments":[5863],"declarations":[{"constant":false,"id":5863,"mutability":"mutable","name":"num","nameLocation":"19074:3:26","nodeType":"VariableDeclaration","scope":5964,"src":"19067:10:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5862,"name":"int256","nodeType":"ElementaryTypeName","src":"19067:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5865,"initialValue":{"id":5864,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5839,"src":"19080:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19067:14:26"},{"assignments":[5867],"declarations":[{"constant":false,"id":5867,"mutability":"mutable","name":"seriesSum","nameLocation":"19210:9:26","nodeType":"VariableDeclaration","scope":5964,"src":"19203:16:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5866,"name":"int256","nodeType":"ElementaryTypeName","src":"19203:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5869,"initialValue":{"id":5868,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5863,"src":"19222:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19203:22:26"},{"expression":{"id":5877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5870,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5863,"src":"19304:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5871,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5863,"src":"19311:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5872,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5854,"src":"19317:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19311:15:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5874,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19310:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5875,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"19330:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19310:26:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19304:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5878,"nodeType":"ExpressionStatement","src":"19304:32:26"},{"expression":{"id":5883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5879,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5867,"src":"19350:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5880,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5863,"src":"19363:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":5881,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19369:1:26","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"19363:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19350:20:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5884,"nodeType":"ExpressionStatement","src":"19350:20:26"},{"expression":{"id":5892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5885,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5863,"src":"19385:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5886,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5863,"src":"19392:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5887,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5854,"src":"19398:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19392:15:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5889,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19391:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5890,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"19411:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19391:26:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19385:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5893,"nodeType":"ExpressionStatement","src":"19385:32:26"},{"expression":{"id":5898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5894,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5867,"src":"19431:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5895,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5863,"src":"19444:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":5896,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19450:1:26","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"19444:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19431:20:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5899,"nodeType":"ExpressionStatement","src":"19431:20:26"},{"expression":{"id":5907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5900,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5863,"src":"19466:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5901,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5863,"src":"19473:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5902,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5854,"src":"19479:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19473:15:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5904,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19472:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5905,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"19492:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19472:26:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19466:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5908,"nodeType":"ExpressionStatement","src":"19466:32:26"},{"expression":{"id":5913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5909,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5867,"src":"19512:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5910,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5863,"src":"19525:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":5911,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19531:1:26","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"19525:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19512:20:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5914,"nodeType":"ExpressionStatement","src":"19512:20:26"},{"expression":{"id":5922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5915,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5863,"src":"19547:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5916,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5863,"src":"19554:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5917,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5854,"src":"19560:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19554:15:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5919,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19553:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5920,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"19573:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19553:26:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19547:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5923,"nodeType":"ExpressionStatement","src":"19547:32:26"},{"expression":{"id":5928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5924,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5867,"src":"19593:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5925,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5863,"src":"19606:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":5926,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19612:1:26","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"19606:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19593:20:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5929,"nodeType":"ExpressionStatement","src":"19593:20:26"},{"expression":{"id":5937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5930,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5863,"src":"19628:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5931,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5863,"src":"19635:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5932,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5854,"src":"19641:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19635:15:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5934,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19634:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5935,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"19654:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19634:26:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19628:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5938,"nodeType":"ExpressionStatement","src":"19628:32:26"},{"expression":{"id":5943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5939,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5867,"src":"19674:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5940,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5863,"src":"19687:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":5941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19693:2:26","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"19687:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19674:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5944,"nodeType":"ExpressionStatement","src":"19674:21:26"},{"expression":{"id":5947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5945,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5867,"src":"19866:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"32","id":5946,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19879:1:26","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"19866:14:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5948,"nodeType":"ExpressionStatement","src":"19866:14:26"},{"assignments":[5950],"declarations":[{"constant":false,"id":5950,"mutability":"mutable","name":"result","nameLocation":"20169:6:26","nodeType":"VariableDeclaration","scope":5964,"src":"20162:13:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5949,"name":"int256","nodeType":"ElementaryTypeName","src":"20162:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5957,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5951,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"20179:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":5952,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5867,"src":"20185:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20179:15:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5954,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20178:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":5955,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20198:3:26","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"20178:23:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"20162:39:26"},{"expression":{"condition":{"id":5958,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5593,"src":"20303:16:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":5961,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5950,"src":"20332:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"20303:35:26","trueExpression":{"id":5960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"20322:7:26","subExpression":{"id":5959,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5950,"src":"20323:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5591,"id":5963,"nodeType":"Return","src":"20296:42:26"}]}]},"documentation":{"id":5585,"nodeType":"StructuredDocumentation","src":"14678:88:26","text":"@dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":5966,"implemented":true,"kind":"function","modifiers":[],"name":"_ln","nameLocation":"14780:3:26","nodeType":"FunctionDefinition","parameters":{"id":5588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5587,"mutability":"mutable","name":"a","nameLocation":"14791:1:26","nodeType":"VariableDeclaration","scope":5966,"src":"14784:8:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5586,"name":"int256","nodeType":"ElementaryTypeName","src":"14784:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14783:10:26"},"returnParameters":{"id":5591,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5590,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5966,"src":"14816:6:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5589,"name":"int256","nodeType":"ElementaryTypeName","src":"14816:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14815:8:26"},"scope":6122,"src":"14771:5584:26","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":6120,"nodeType":"Block","src":"20678:1804:26","statements":[{"id":6119,"nodeType":"UncheckedBlock","src":"20892:1584:26","statements":[{"expression":{"id":5976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5974,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5969,"src":"20916:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"id":5975,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"20921:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20916:11:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5977,"nodeType":"ExpressionStatement","src":"20916:11:26"},{"assignments":[5979],"declarations":[{"constant":false,"id":5979,"mutability":"mutable","name":"z","nameLocation":"21315:1:26","nodeType":"VariableDeclaration","scope":6119,"src":"21308:8:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5978,"name":"int256","nodeType":"ElementaryTypeName","src":"21308:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5992,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5980,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5969,"src":"21321:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":5981,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4793,"src":"21325:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21321:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5983,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21320:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5984,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4793,"src":"21335:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21320:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5986,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21319:23:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5987,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5969,"src":"21346:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":5988,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4793,"src":"21350:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21346:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5990,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21345:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21319:38:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21308:49:26"},{"assignments":[5994],"declarations":[{"constant":false,"id":5994,"mutability":"mutable","name":"z_squared","nameLocation":"21378:9:26","nodeType":"VariableDeclaration","scope":6119,"src":"21371:16:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5993,"name":"int256","nodeType":"ElementaryTypeName","src":"21371:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6001,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5995,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5979,"src":"21391:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5996,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5979,"src":"21395:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21391:5:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5998,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21390:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5999,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4793,"src":"21400:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21390:16:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21371:35:26"},{"assignments":[6003],"declarations":[{"constant":false,"id":6003,"mutability":"mutable","name":"num","nameLocation":"21502:3:26","nodeType":"VariableDeclaration","scope":6119,"src":"21495:10:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6002,"name":"int256","nodeType":"ElementaryTypeName","src":"21495:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6005,"initialValue":{"id":6004,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5979,"src":"21508:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21495:14:26"},{"assignments":[6007],"declarations":[{"constant":false,"id":6007,"mutability":"mutable","name":"seriesSum","nameLocation":"21638:9:26","nodeType":"VariableDeclaration","scope":6119,"src":"21631:16:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6006,"name":"int256","nodeType":"ElementaryTypeName","src":"21631:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6009,"initialValue":{"id":6008,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"21650:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21631:22:26"},{"expression":{"id":6017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6010,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"21732:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6011,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"21739:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6012,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5994,"src":"21745:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21739:15:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6014,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21738:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6015,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4793,"src":"21758:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21738:26:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21732:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6018,"nodeType":"ExpressionStatement","src":"21732:32:26"},{"expression":{"id":6023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6019,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6007,"src":"21778:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6020,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"21791:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":6021,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21797:1:26","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"21791:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21778:20:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6024,"nodeType":"ExpressionStatement","src":"21778:20:26"},{"expression":{"id":6032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6025,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"21813:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6026,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"21820:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6027,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5994,"src":"21826:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21820:15:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6029,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21819:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6030,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4793,"src":"21839:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21819:26:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21813:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6033,"nodeType":"ExpressionStatement","src":"21813:32:26"},{"expression":{"id":6038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6034,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6007,"src":"21859:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6035,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"21872:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":6036,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21878:1:26","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"21872:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21859:20:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6039,"nodeType":"ExpressionStatement","src":"21859:20:26"},{"expression":{"id":6047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6040,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"21894:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6041,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"21901:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6042,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5994,"src":"21907:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21901:15:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6044,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21900:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6045,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4793,"src":"21920:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21900:26:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21894:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6048,"nodeType":"ExpressionStatement","src":"21894:32:26"},{"expression":{"id":6053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6049,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6007,"src":"21940:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6050,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"21953:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":6051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21959:1:26","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"21953:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21940:20:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6054,"nodeType":"ExpressionStatement","src":"21940:20:26"},{"expression":{"id":6062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6055,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"21975:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6056,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"21982:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6057,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5994,"src":"21988:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21982:15:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6059,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21981:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6060,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4793,"src":"22001:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21981:26:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21975:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6063,"nodeType":"ExpressionStatement","src":"21975:32:26"},{"expression":{"id":6068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6064,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6007,"src":"22021:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6065,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"22034:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":6066,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22040:1:26","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"22034:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22021:20:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6069,"nodeType":"ExpressionStatement","src":"22021:20:26"},{"expression":{"id":6077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6070,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"22056:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6071,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"22063:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6072,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5994,"src":"22069:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22063:15:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6074,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22062:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6075,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4793,"src":"22082:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22062:26:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22056:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6078,"nodeType":"ExpressionStatement","src":"22056:32:26"},{"expression":{"id":6083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6079,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6007,"src":"22102:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6080,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"22115:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":6081,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22121:2:26","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"22115:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22102:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6084,"nodeType":"ExpressionStatement","src":"22102:21:26"},{"expression":{"id":6092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6085,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"22138:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6086,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"22145:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6087,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5994,"src":"22151:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22145:15:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6089,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22144:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6090,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4793,"src":"22164:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22144:26:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22138:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6093,"nodeType":"ExpressionStatement","src":"22138:32:26"},{"expression":{"id":6098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6094,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6007,"src":"22184:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6095,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"22197:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3133","id":6096,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22203:2:26","typeDescriptions":{"typeIdentifier":"t_rational_13_by_1","typeString":"int_const 13"},"value":"13"},"src":"22197:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22184:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6099,"nodeType":"ExpressionStatement","src":"22184:21:26"},{"expression":{"id":6107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6100,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"22220:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6101,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"22227:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6102,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5994,"src":"22233:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22227:15:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6104,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22226:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6105,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4793,"src":"22246:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22226:26:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22220:32:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6108,"nodeType":"ExpressionStatement","src":"22220:32:26"},{"expression":{"id":6113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6109,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6007,"src":"22266:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6110,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6003,"src":"22279:3:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3135","id":6111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22285:2:26","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"15"},"src":"22279:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22266:21:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6114,"nodeType":"ExpressionStatement","src":"22266:21:26"},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6115,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6007,"src":"22452:9:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":6116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22464:1:26","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22452:13:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5973,"id":6118,"nodeType":"Return","src":"22445:20:26"}]}]},"documentation":{"id":5967,"nodeType":"StructuredDocumentation","src":"20361:256:26","text":" @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n for x close to one.\n Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND."},"id":6121,"implemented":true,"kind":"function","modifiers":[],"name":"_ln_36","nameLocation":"20631:6:26","nodeType":"FunctionDefinition","parameters":{"id":5970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5969,"mutability":"mutable","name":"x","nameLocation":"20645:1:26","nodeType":"VariableDeclaration","scope":6121,"src":"20638:8:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5968,"name":"int256","nodeType":"ElementaryTypeName","src":"20638:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20637:10:26"},"returnParameters":{"id":5973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5972,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6121,"src":"20670:6:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5971,"name":"int256","nodeType":"ElementaryTypeName","src":"20670:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20669:8:26"},"scope":6122,"src":"20622:1860:26","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":6123,"src":"595:21889:26","usedErrors":[4772,4775,4778,4781,4784],"usedEvents":[]}],"src":"33:22452:26"},"id":26},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","exportedSymbols":{"ReentrancyGuardTransient":[6191],"StorageSlotExtension":[6534]},"id":6192,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6124,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:27"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"./StorageSlotExtension.sol","id":6126,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6192,"sourceUnit":6535,"src":"59:66:27","symbolAliases":[{"foreign":{"id":6125,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6534,"src":"68:20:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"ReentrancyGuardTransient","contractDependencies":[],"contractKind":"contract","documentation":{"id":6127,"nodeType":"StructuredDocumentation","src":"127:155:27","text":" @notice Variant of {ReentrancyGuard} that uses transient storage.\n @dev NOTE: This variant only works on networks where EIP-1153 is available."},"fullyImplemented":true,"id":6191,"linearizedBaseContracts":[6191],"name":"ReentrancyGuardTransient","nameLocation":"301:24:27","nodeType":"ContractDefinition","nodes":[{"global":false,"id":6129,"libraryName":{"id":6128,"name":"StorageSlotExtension","nameLocations":["338:20:27"],"nodeType":"IdentifierPath","referencedDeclaration":6534,"src":"338:20:27"},"nodeType":"UsingForDirective","src":"332:33:27"},{"constant":true,"id":6132,"mutability":"constant","name":"_REENTRANCY_GUARD_STORAGE","nameLocation":"515:25:27","nodeType":"VariableDeclaration","scope":6191,"src":"490:127:27","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6130,"name":"bytes32","nodeType":"ElementaryTypeName","src":"490:7:27","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307839623737396231373432326430646639323232333031386233326234643166613436653037313732336436383137653234383664303033626563633535663030","id":6131,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"551:66:27","typeDescriptions":{"typeIdentifier":"t_rational_70319816728846589445362000750570655803700195216363692647688146666176345628416_by_1","typeString":"int_const 7031...(69 digits omitted)...8416"},"value":"0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"},"visibility":"private"},{"documentation":{"id":6133,"nodeType":"StructuredDocumentation","src":"624:40:27","text":"@notice Unauthorized reentrant call."},"errorSelector":"3ee5aeb5","id":6135,"name":"ReentrancyGuardReentrantCall","nameLocation":"675:28:27","nodeType":"ErrorDefinition","parameters":{"id":6134,"nodeType":"ParameterList","parameters":[],"src":"703:2:27"},"src":"669:37:27"},{"body":{"id":6145,"nodeType":"Block","src":"1107:79:27","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6138,"name":"_nonReentrantBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6165,"src":"1117:19:27","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":6139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1117:21:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6140,"nodeType":"ExpressionStatement","src":"1117:21:27"},{"id":6141,"nodeType":"PlaceholderStatement","src":"1148:1:27"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6142,"name":"_nonReentrantAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6177,"src":"1159:18:27","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":6143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1159:20:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6144,"nodeType":"ExpressionStatement","src":"1159:20:27"}]},"documentation":{"id":6136,"nodeType":"StructuredDocumentation","src":"712:366:27","text":" @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work."},"id":6146,"name":"nonReentrant","nameLocation":"1092:12:27","nodeType":"ModifierDefinition","parameters":{"id":6137,"nodeType":"ParameterList","parameters":[],"src":"1104:2:27"},"src":"1083:103:27","virtual":false,"visibility":"internal"},{"body":{"id":6164,"nodeType":"Block","src":"1231:310:27","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":6149,"name":"_reentrancyGuardEntered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6190,"src":"1320:23:27","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":6150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1320:25:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6155,"nodeType":"IfStatement","src":"1316:93:27","trueBody":{"id":6154,"nodeType":"Block","src":"1347:62:27","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6151,"name":"ReentrancyGuardReentrantCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6135,"src":"1368:28:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1368:30:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6153,"nodeType":"RevertStatement","src":"1361:37:27"}]}},{"expression":{"arguments":[{"hexValue":"74727565","id":6161,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1529:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6156,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6132,"src":"1484:25:27","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1510:9:27","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":6372,"src":"1484:35:27","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$6357_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":6159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1484:37:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6357","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":6160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1522:6:27","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":6467,"src":"1484:44:27","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$6357_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$6357_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":6162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1484:50:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6163,"nodeType":"ExpressionStatement","src":"1484:50:27"}]},"id":6165,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantBefore","nameLocation":"1201:19:27","nodeType":"FunctionDefinition","parameters":{"id":6147,"nodeType":"ParameterList","parameters":[],"src":"1220:2:27"},"returnParameters":{"id":6148,"nodeType":"ParameterList","parameters":[],"src":"1231:0:27"},"scope":6191,"src":"1192:349:27","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6176,"nodeType":"Block","src":"1585:68:27","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":6173,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1640:5:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6168,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6132,"src":"1595:25:27","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1621:9:27","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":6372,"src":"1595:35:27","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$6357_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":6171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:37:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6357","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":6172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1633:6:27","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":6467,"src":"1595:44:27","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$6357_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$6357_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":6174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:51:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6175,"nodeType":"ExpressionStatement","src":"1595:51:27"}]},"id":6177,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantAfter","nameLocation":"1556:18:27","nodeType":"FunctionDefinition","parameters":{"id":6166,"nodeType":"ParameterList","parameters":[],"src":"1574:2:27"},"returnParameters":{"id":6167,"nodeType":"ParameterList","parameters":[],"src":"1585:0:27"},"scope":6191,"src":"1547:106:27","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6189,"nodeType":"Block","src":"1896:69:27","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6183,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6132,"src":"1913:25:27","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1939:9:27","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":6372,"src":"1913:35:27","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$6357_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":6185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1913:37:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6357","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":6186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1951:5:27","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":6456,"src":"1913:43:27","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_BooleanSlotType_$6357_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_BooleanSlotType_$6357_$","typeString":"function (StorageSlotExtension.BooleanSlotType) view returns (bool)"}},"id":6187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1913:45:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6182,"id":6188,"nodeType":"Return","src":"1906:52:27"}]},"documentation":{"id":6178,"nodeType":"StructuredDocumentation","src":"1659:168:27","text":" @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n `nonReentrant` function in the call stack."},"id":6190,"implemented":true,"kind":"function","modifiers":[],"name":"_reentrancyGuardEntered","nameLocation":"1841:23:27","nodeType":"FunctionDefinition","parameters":{"id":6179,"nodeType":"ParameterList","parameters":[],"src":"1864:2:27"},"returnParameters":{"id":6182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6181,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6190,"src":"1890:4:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6180,"name":"bool","nodeType":"ElementaryTypeName","src":"1890:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1889:6:27"},"scope":6191,"src":"1832:133:27","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":6192,"src":"283:1684:27","usedErrors":[6135],"usedEvents":[]}],"src":"33:1935:27"},"id":27},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol","exportedSymbols":{"SlotDerivation":[6321]},"id":6322,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6193,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"277:24:28"},{"abstract":false,"baseContracts":[],"canonicalName":"SlotDerivation","contractDependencies":[],"contractKind":"library","documentation":{"id":6194,"nodeType":"StructuredDocumentation","src":"303:1348:28","text":" @notice Library for computing storage (and transient storage) locations from namespaces and deriving slots\n corresponding to standard patterns.\n @dev The derivation method for array and mapping matches the storage layout used by the solidity language/compiler.\n See https://docs.soliditylang.org/en/v0.8.20/internals/layout_in_storage.html#mappings-and-dynamic-arrays[Solidity docs for mappings and dynamic arrays.].\n Example usage:\n ```solidity\n contract Example {\n // Add the library methods\n using StorageSlot for bytes32;\n using SlotDerivation for bytes32;\n // Declare a namespace\n string private constant _NAMESPACE = \"\" // eg. OpenZeppelin.Slot\n function setValueInNamespace(uint256 key, address newValue) internal {\n _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value = newValue;\n }\n function getValueInNamespace(uint256 key) internal view returns (address) {\n return _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value;\n }\n }\n ```\n TIP: Consider using this library along with {StorageSlot}.\n NOTE: This library provides a way to manipulate storage locations in a non-standard way. Tooling for checking\n upgrade safety will ignore the slots accessed through this library."},"fullyImplemented":true,"id":6321,"linearizedBaseContracts":[6321],"name":"SlotDerivation","nameLocation":"1660:14:28","nodeType":"ContractDefinition","nodes":[{"body":{"id":6203,"nodeType":"Block","src":"1828:221:28","statements":[{"AST":{"nativeSrc":"1890:153:28","nodeType":"YulBlock","src":"1890:153:28","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1911:4:28","nodeType":"YulLiteral","src":"1911:4:28","type":"","value":"0x00"},{"arguments":[{"arguments":[{"arguments":[{"name":"namespace","nativeSrc":"1935:9:28","nodeType":"YulIdentifier","src":"1935:9:28"},{"kind":"number","nativeSrc":"1946:4:28","nodeType":"YulLiteral","src":"1946:4:28","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1931:3:28","nodeType":"YulIdentifier","src":"1931:3:28"},"nativeSrc":"1931:20:28","nodeType":"YulFunctionCall","src":"1931:20:28"},{"arguments":[{"name":"namespace","nativeSrc":"1959:9:28","nodeType":"YulIdentifier","src":"1959:9:28"}],"functionName":{"name":"mload","nativeSrc":"1953:5:28","nodeType":"YulIdentifier","src":"1953:5:28"},"nativeSrc":"1953:16:28","nodeType":"YulFunctionCall","src":"1953:16:28"}],"functionName":{"name":"keccak256","nativeSrc":"1921:9:28","nodeType":"YulIdentifier","src":"1921:9:28"},"nativeSrc":"1921:49:28","nodeType":"YulFunctionCall","src":"1921:49:28"},{"kind":"number","nativeSrc":"1972:1:28","nodeType":"YulLiteral","src":"1972:1:28","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1917:3:28","nodeType":"YulIdentifier","src":"1917:3:28"},"nativeSrc":"1917:57:28","nodeType":"YulFunctionCall","src":"1917:57:28"}],"functionName":{"name":"mstore","nativeSrc":"1904:6:28","nodeType":"YulIdentifier","src":"1904:6:28"},"nativeSrc":"1904:71:28","nodeType":"YulFunctionCall","src":"1904:71:28"},"nativeSrc":"1904:71:28","nodeType":"YulExpressionStatement","src":"1904:71:28"},{"nativeSrc":"1988:45:28","nodeType":"YulAssignment","src":"1988:45:28","value":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"2010:4:28","nodeType":"YulLiteral","src":"2010:4:28","type":"","value":"0x00"},{"kind":"number","nativeSrc":"2016:4:28","nodeType":"YulLiteral","src":"2016:4:28","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nativeSrc":"2000:9:28","nodeType":"YulIdentifier","src":"2000:9:28"},"nativeSrc":"2000:21:28","nodeType":"YulFunctionCall","src":"2000:21:28"},{"arguments":[{"kind":"number","nativeSrc":"2027:4:28","nodeType":"YulLiteral","src":"2027:4:28","type":"","value":"0xff"}],"functionName":{"name":"not","nativeSrc":"2023:3:28","nodeType":"YulIdentifier","src":"2023:3:28"},"nativeSrc":"2023:9:28","nodeType":"YulFunctionCall","src":"2023:9:28"}],"functionName":{"name":"and","nativeSrc":"1996:3:28","nodeType":"YulIdentifier","src":"1996:3:28"},"nativeSrc":"1996:37:28","nodeType":"YulFunctionCall","src":"1996:37:28"},"variableNames":[{"name":"slot","nativeSrc":"1988:4:28","nodeType":"YulIdentifier","src":"1988:4:28"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6197,"isOffset":false,"isSlot":false,"src":"1935:9:28","valueSize":1},{"declaration":6197,"isOffset":false,"isSlot":false,"src":"1959:9:28","valueSize":1},{"declaration":6200,"isOffset":false,"isSlot":false,"src":"1988:4:28","valueSize":1}],"id":6202,"nodeType":"InlineAssembly","src":"1881:162:28"}]},"documentation":{"id":6195,"nodeType":"StructuredDocumentation","src":"1681:59:28","text":"@dev Derive an ERC-7201 slot from a string (namespace)."},"id":6204,"implemented":true,"kind":"function","modifiers":[],"name":"erc7201Slot","nameLocation":"1754:11:28","nodeType":"FunctionDefinition","parameters":{"id":6198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6197,"mutability":"mutable","name":"namespace","nameLocation":"1780:9:28","nodeType":"VariableDeclaration","scope":6204,"src":"1766:23:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6196,"name":"string","nodeType":"ElementaryTypeName","src":"1766:6:28","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1765:25:28"},"returnParameters":{"id":6201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6200,"mutability":"mutable","name":"slot","nameLocation":"1822:4:28","nodeType":"VariableDeclaration","scope":6204,"src":"1814:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6199,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1814:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1813:14:28"},"scope":6321,"src":"1745:304:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6225,"nodeType":"Block","src":"2226:86:28","statements":[{"id":6224,"nodeType":"UncheckedBlock","src":"2236:70:28","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6218,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6207,"src":"2283:4:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":6217,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2275:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6216,"name":"uint256","nodeType":"ElementaryTypeName","src":"2275:7:28","typeDescriptions":{}}},"id":6219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2275:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6220,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6209,"src":"2291:3:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2275:19:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6215,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2267:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":6214,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2267:7:28","typeDescriptions":{}}},"id":6222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2267:28:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":6213,"id":6223,"nodeType":"Return","src":"2260:35:28"}]}]},"documentation":{"id":6205,"nodeType":"StructuredDocumentation","src":"2055:84:28","text":"@dev Add an offset to a slot to get the n-th element of a structure or an array."},"id":6226,"implemented":true,"kind":"function","modifiers":[],"name":"offset","nameLocation":"2153:6:28","nodeType":"FunctionDefinition","parameters":{"id":6210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6207,"mutability":"mutable","name":"slot","nameLocation":"2168:4:28","nodeType":"VariableDeclaration","scope":6226,"src":"2160:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6206,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2160:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6209,"mutability":"mutable","name":"pos","nameLocation":"2182:3:28","nodeType":"VariableDeclaration","scope":6226,"src":"2174:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6208,"name":"uint256","nodeType":"ElementaryTypeName","src":"2174:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2159:27:28"},"returnParameters":{"id":6213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6212,"mutability":"mutable","name":"result","nameLocation":"2218:6:28","nodeType":"VariableDeclaration","scope":6226,"src":"2210:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6211,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2210:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2209:16:28"},"scope":6321,"src":"2144:168:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6235,"nodeType":"Block","src":"2500:154:28","statements":[{"AST":{"nativeSrc":"2562:86:28","nodeType":"YulBlock","src":"2562:86:28","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2583:4:28","nodeType":"YulLiteral","src":"2583:4:28","type":"","value":"0x00"},{"name":"slot","nativeSrc":"2589:4:28","nodeType":"YulIdentifier","src":"2589:4:28"}],"functionName":{"name":"mstore","nativeSrc":"2576:6:28","nodeType":"YulIdentifier","src":"2576:6:28"},"nativeSrc":"2576:18:28","nodeType":"YulFunctionCall","src":"2576:18:28"},"nativeSrc":"2576:18:28","nodeType":"YulExpressionStatement","src":"2576:18:28"},{"nativeSrc":"2607:31:28","nodeType":"YulAssignment","src":"2607:31:28","value":{"arguments":[{"kind":"number","nativeSrc":"2627:4:28","nodeType":"YulLiteral","src":"2627:4:28","type":"","value":"0x00"},{"kind":"number","nativeSrc":"2633:4:28","nodeType":"YulLiteral","src":"2633:4:28","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nativeSrc":"2617:9:28","nodeType":"YulIdentifier","src":"2617:9:28"},"nativeSrc":"2617:21:28","nodeType":"YulFunctionCall","src":"2617:21:28"},"variableNames":[{"name":"result","nativeSrc":"2607:6:28","nodeType":"YulIdentifier","src":"2607:6:28"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6232,"isOffset":false,"isSlot":false,"src":"2607:6:28","valueSize":1},{"declaration":6229,"isOffset":false,"isSlot":false,"src":"2589:4:28","valueSize":1}],"id":6234,"nodeType":"InlineAssembly","src":"2553:95:28"}]},"documentation":{"id":6227,"nodeType":"StructuredDocumentation","src":"2318:103:28","text":"@dev Derive the location of the first element in an array from the slot where the length is stored."},"id":6236,"implemented":true,"kind":"function","modifiers":[],"name":"deriveArray","nameLocation":"2435:11:28","nodeType":"FunctionDefinition","parameters":{"id":6230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6229,"mutability":"mutable","name":"slot","nameLocation":"2455:4:28","nodeType":"VariableDeclaration","scope":6236,"src":"2447:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6228,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2447:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2446:14:28"},"returnParameters":{"id":6233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6232,"mutability":"mutable","name":"result","nameLocation":"2492:6:28","nodeType":"VariableDeclaration","scope":6236,"src":"2484:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6231,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2484:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2483:16:28"},"scope":6321,"src":"2426:228:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6247,"nodeType":"Block","src":"2817:184:28","statements":[{"AST":{"nativeSrc":"2879:116:28","nodeType":"YulBlock","src":"2879:116:28","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2900:4:28","nodeType":"YulLiteral","src":"2900:4:28","type":"","value":"0x00"},{"name":"key","nativeSrc":"2906:3:28","nodeType":"YulIdentifier","src":"2906:3:28"}],"functionName":{"name":"mstore","nativeSrc":"2893:6:28","nodeType":"YulIdentifier","src":"2893:6:28"},"nativeSrc":"2893:17:28","nodeType":"YulFunctionCall","src":"2893:17:28"},"nativeSrc":"2893:17:28","nodeType":"YulExpressionStatement","src":"2893:17:28"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"2930:4:28","nodeType":"YulLiteral","src":"2930:4:28","type":"","value":"0x20"},{"name":"slot","nativeSrc":"2936:4:28","nodeType":"YulIdentifier","src":"2936:4:28"}],"functionName":{"name":"mstore","nativeSrc":"2923:6:28","nodeType":"YulIdentifier","src":"2923:6:28"},"nativeSrc":"2923:18:28","nodeType":"YulFunctionCall","src":"2923:18:28"},"nativeSrc":"2923:18:28","nodeType":"YulExpressionStatement","src":"2923:18:28"},{"nativeSrc":"2954:31:28","nodeType":"YulAssignment","src":"2954:31:28","value":{"arguments":[{"kind":"number","nativeSrc":"2974:4:28","nodeType":"YulLiteral","src":"2974:4:28","type":"","value":"0x00"},{"kind":"number","nativeSrc":"2980:4:28","nodeType":"YulLiteral","src":"2980:4:28","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"2964:9:28","nodeType":"YulIdentifier","src":"2964:9:28"},"nativeSrc":"2964:21:28","nodeType":"YulFunctionCall","src":"2964:21:28"},"variableNames":[{"name":"result","nativeSrc":"2954:6:28","nodeType":"YulIdentifier","src":"2954:6:28"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6241,"isOffset":false,"isSlot":false,"src":"2906:3:28","valueSize":1},{"declaration":6244,"isOffset":false,"isSlot":false,"src":"2954:6:28","valueSize":1},{"declaration":6239,"isOffset":false,"isSlot":false,"src":"2936:4:28","valueSize":1}],"id":6246,"nodeType":"InlineAssembly","src":"2870:125:28"}]},"documentation":{"id":6237,"nodeType":"StructuredDocumentation","src":"2660:63:28","text":"@dev Derive the location of a mapping element from the key."},"id":6248,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"2737:13:28","nodeType":"FunctionDefinition","parameters":{"id":6242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6239,"mutability":"mutable","name":"slot","nameLocation":"2759:4:28","nodeType":"VariableDeclaration","scope":6248,"src":"2751:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6238,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2751:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6241,"mutability":"mutable","name":"key","nameLocation":"2773:3:28","nodeType":"VariableDeclaration","scope":6248,"src":"2765:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6240,"name":"address","nodeType":"ElementaryTypeName","src":"2765:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2750:27:28"},"returnParameters":{"id":6245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6244,"mutability":"mutable","name":"result","nameLocation":"2809:6:28","nodeType":"VariableDeclaration","scope":6248,"src":"2801:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6243,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2801:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2800:16:28"},"scope":6321,"src":"2728:273:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6259,"nodeType":"Block","src":"3161:184:28","statements":[{"AST":{"nativeSrc":"3223:116:28","nodeType":"YulBlock","src":"3223:116:28","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3244:4:28","nodeType":"YulLiteral","src":"3244:4:28","type":"","value":"0x00"},{"name":"key","nativeSrc":"3250:3:28","nodeType":"YulIdentifier","src":"3250:3:28"}],"functionName":{"name":"mstore","nativeSrc":"3237:6:28","nodeType":"YulIdentifier","src":"3237:6:28"},"nativeSrc":"3237:17:28","nodeType":"YulFunctionCall","src":"3237:17:28"},"nativeSrc":"3237:17:28","nodeType":"YulExpressionStatement","src":"3237:17:28"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"3274:4:28","nodeType":"YulLiteral","src":"3274:4:28","type":"","value":"0x20"},{"name":"slot","nativeSrc":"3280:4:28","nodeType":"YulIdentifier","src":"3280:4:28"}],"functionName":{"name":"mstore","nativeSrc":"3267:6:28","nodeType":"YulIdentifier","src":"3267:6:28"},"nativeSrc":"3267:18:28","nodeType":"YulFunctionCall","src":"3267:18:28"},"nativeSrc":"3267:18:28","nodeType":"YulExpressionStatement","src":"3267:18:28"},{"nativeSrc":"3298:31:28","nodeType":"YulAssignment","src":"3298:31:28","value":{"arguments":[{"kind":"number","nativeSrc":"3318:4:28","nodeType":"YulLiteral","src":"3318:4:28","type":"","value":"0x00"},{"kind":"number","nativeSrc":"3324:4:28","nodeType":"YulLiteral","src":"3324:4:28","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"3308:9:28","nodeType":"YulIdentifier","src":"3308:9:28"},"nativeSrc":"3308:21:28","nodeType":"YulFunctionCall","src":"3308:21:28"},"variableNames":[{"name":"result","nativeSrc":"3298:6:28","nodeType":"YulIdentifier","src":"3298:6:28"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6253,"isOffset":false,"isSlot":false,"src":"3250:3:28","valueSize":1},{"declaration":6256,"isOffset":false,"isSlot":false,"src":"3298:6:28","valueSize":1},{"declaration":6251,"isOffset":false,"isSlot":false,"src":"3280:4:28","valueSize":1}],"id":6258,"nodeType":"InlineAssembly","src":"3214:125:28"}]},"documentation":{"id":6249,"nodeType":"StructuredDocumentation","src":"3007:63:28","text":"@dev Derive the location of a mapping element from the key."},"id":6260,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"3084:13:28","nodeType":"FunctionDefinition","parameters":{"id":6254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6251,"mutability":"mutable","name":"slot","nameLocation":"3106:4:28","nodeType":"VariableDeclaration","scope":6260,"src":"3098:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6250,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3098:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6253,"mutability":"mutable","name":"key","nameLocation":"3117:3:28","nodeType":"VariableDeclaration","scope":6260,"src":"3112:8:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6252,"name":"bool","nodeType":"ElementaryTypeName","src":"3112:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3097:24:28"},"returnParameters":{"id":6257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6256,"mutability":"mutable","name":"result","nameLocation":"3153:6:28","nodeType":"VariableDeclaration","scope":6260,"src":"3145:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6255,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3145:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3144:16:28"},"scope":6321,"src":"3075:270:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6271,"nodeType":"Block","src":"3508:184:28","statements":[{"AST":{"nativeSrc":"3570:116:28","nodeType":"YulBlock","src":"3570:116:28","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3591:4:28","nodeType":"YulLiteral","src":"3591:4:28","type":"","value":"0x00"},{"name":"key","nativeSrc":"3597:3:28","nodeType":"YulIdentifier","src":"3597:3:28"}],"functionName":{"name":"mstore","nativeSrc":"3584:6:28","nodeType":"YulIdentifier","src":"3584:6:28"},"nativeSrc":"3584:17:28","nodeType":"YulFunctionCall","src":"3584:17:28"},"nativeSrc":"3584:17:28","nodeType":"YulExpressionStatement","src":"3584:17:28"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"3621:4:28","nodeType":"YulLiteral","src":"3621:4:28","type":"","value":"0x20"},{"name":"slot","nativeSrc":"3627:4:28","nodeType":"YulIdentifier","src":"3627:4:28"}],"functionName":{"name":"mstore","nativeSrc":"3614:6:28","nodeType":"YulIdentifier","src":"3614:6:28"},"nativeSrc":"3614:18:28","nodeType":"YulFunctionCall","src":"3614:18:28"},"nativeSrc":"3614:18:28","nodeType":"YulExpressionStatement","src":"3614:18:28"},{"nativeSrc":"3645:31:28","nodeType":"YulAssignment","src":"3645:31:28","value":{"arguments":[{"kind":"number","nativeSrc":"3665:4:28","nodeType":"YulLiteral","src":"3665:4:28","type":"","value":"0x00"},{"kind":"number","nativeSrc":"3671:4:28","nodeType":"YulLiteral","src":"3671:4:28","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"3655:9:28","nodeType":"YulIdentifier","src":"3655:9:28"},"nativeSrc":"3655:21:28","nodeType":"YulFunctionCall","src":"3655:21:28"},"variableNames":[{"name":"result","nativeSrc":"3645:6:28","nodeType":"YulIdentifier","src":"3645:6:28"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6265,"isOffset":false,"isSlot":false,"src":"3597:3:28","valueSize":1},{"declaration":6268,"isOffset":false,"isSlot":false,"src":"3645:6:28","valueSize":1},{"declaration":6263,"isOffset":false,"isSlot":false,"src":"3627:4:28","valueSize":1}],"id":6270,"nodeType":"InlineAssembly","src":"3561:125:28"}]},"documentation":{"id":6261,"nodeType":"StructuredDocumentation","src":"3351:63:28","text":"@dev Derive the location of a mapping element from the key."},"id":6272,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"3428:13:28","nodeType":"FunctionDefinition","parameters":{"id":6266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6263,"mutability":"mutable","name":"slot","nameLocation":"3450:4:28","nodeType":"VariableDeclaration","scope":6272,"src":"3442:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6262,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3442:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6265,"mutability":"mutable","name":"key","nameLocation":"3464:3:28","nodeType":"VariableDeclaration","scope":6272,"src":"3456:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6264,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3456:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3441:27:28"},"returnParameters":{"id":6269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6268,"mutability":"mutable","name":"result","nameLocation":"3500:6:28","nodeType":"VariableDeclaration","scope":6272,"src":"3492:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6267,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3492:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3491:16:28"},"scope":6321,"src":"3419:273:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6283,"nodeType":"Block","src":"3855:184:28","statements":[{"AST":{"nativeSrc":"3917:116:28","nodeType":"YulBlock","src":"3917:116:28","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3938:4:28","nodeType":"YulLiteral","src":"3938:4:28","type":"","value":"0x00"},{"name":"key","nativeSrc":"3944:3:28","nodeType":"YulIdentifier","src":"3944:3:28"}],"functionName":{"name":"mstore","nativeSrc":"3931:6:28","nodeType":"YulIdentifier","src":"3931:6:28"},"nativeSrc":"3931:17:28","nodeType":"YulFunctionCall","src":"3931:17:28"},"nativeSrc":"3931:17:28","nodeType":"YulExpressionStatement","src":"3931:17:28"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"3968:4:28","nodeType":"YulLiteral","src":"3968:4:28","type":"","value":"0x20"},{"name":"slot","nativeSrc":"3974:4:28","nodeType":"YulIdentifier","src":"3974:4:28"}],"functionName":{"name":"mstore","nativeSrc":"3961:6:28","nodeType":"YulIdentifier","src":"3961:6:28"},"nativeSrc":"3961:18:28","nodeType":"YulFunctionCall","src":"3961:18:28"},"nativeSrc":"3961:18:28","nodeType":"YulExpressionStatement","src":"3961:18:28"},{"nativeSrc":"3992:31:28","nodeType":"YulAssignment","src":"3992:31:28","value":{"arguments":[{"kind":"number","nativeSrc":"4012:4:28","nodeType":"YulLiteral","src":"4012:4:28","type":"","value":"0x00"},{"kind":"number","nativeSrc":"4018:4:28","nodeType":"YulLiteral","src":"4018:4:28","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"4002:9:28","nodeType":"YulIdentifier","src":"4002:9:28"},"nativeSrc":"4002:21:28","nodeType":"YulFunctionCall","src":"4002:21:28"},"variableNames":[{"name":"result","nativeSrc":"3992:6:28","nodeType":"YulIdentifier","src":"3992:6:28"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6277,"isOffset":false,"isSlot":false,"src":"3944:3:28","valueSize":1},{"declaration":6280,"isOffset":false,"isSlot":false,"src":"3992:6:28","valueSize":1},{"declaration":6275,"isOffset":false,"isSlot":false,"src":"3974:4:28","valueSize":1}],"id":6282,"nodeType":"InlineAssembly","src":"3908:125:28"}]},"documentation":{"id":6273,"nodeType":"StructuredDocumentation","src":"3698:63:28","text":"@dev Derive the location of a mapping element from the key."},"id":6284,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"3775:13:28","nodeType":"FunctionDefinition","parameters":{"id":6278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6275,"mutability":"mutable","name":"slot","nameLocation":"3797:4:28","nodeType":"VariableDeclaration","scope":6284,"src":"3789:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6274,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3789:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6277,"mutability":"mutable","name":"key","nameLocation":"3811:3:28","nodeType":"VariableDeclaration","scope":6284,"src":"3803:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6276,"name":"uint256","nodeType":"ElementaryTypeName","src":"3803:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3788:27:28"},"returnParameters":{"id":6281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6280,"mutability":"mutable","name":"result","nameLocation":"3847:6:28","nodeType":"VariableDeclaration","scope":6284,"src":"3839:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6279,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3839:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3838:16:28"},"scope":6321,"src":"3766:273:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6295,"nodeType":"Block","src":"4201:184:28","statements":[{"AST":{"nativeSrc":"4263:116:28","nodeType":"YulBlock","src":"4263:116:28","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4284:4:28","nodeType":"YulLiteral","src":"4284:4:28","type":"","value":"0x00"},{"name":"key","nativeSrc":"4290:3:28","nodeType":"YulIdentifier","src":"4290:3:28"}],"functionName":{"name":"mstore","nativeSrc":"4277:6:28","nodeType":"YulIdentifier","src":"4277:6:28"},"nativeSrc":"4277:17:28","nodeType":"YulFunctionCall","src":"4277:17:28"},"nativeSrc":"4277:17:28","nodeType":"YulExpressionStatement","src":"4277:17:28"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4314:4:28","nodeType":"YulLiteral","src":"4314:4:28","type":"","value":"0x20"},{"name":"slot","nativeSrc":"4320:4:28","nodeType":"YulIdentifier","src":"4320:4:28"}],"functionName":{"name":"mstore","nativeSrc":"4307:6:28","nodeType":"YulIdentifier","src":"4307:6:28"},"nativeSrc":"4307:18:28","nodeType":"YulFunctionCall","src":"4307:18:28"},"nativeSrc":"4307:18:28","nodeType":"YulExpressionStatement","src":"4307:18:28"},{"nativeSrc":"4338:31:28","nodeType":"YulAssignment","src":"4338:31:28","value":{"arguments":[{"kind":"number","nativeSrc":"4358:4:28","nodeType":"YulLiteral","src":"4358:4:28","type":"","value":"0x00"},{"kind":"number","nativeSrc":"4364:4:28","nodeType":"YulLiteral","src":"4364:4:28","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"4348:9:28","nodeType":"YulIdentifier","src":"4348:9:28"},"nativeSrc":"4348:21:28","nodeType":"YulFunctionCall","src":"4348:21:28"},"variableNames":[{"name":"result","nativeSrc":"4338:6:28","nodeType":"YulIdentifier","src":"4338:6:28"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6289,"isOffset":false,"isSlot":false,"src":"4290:3:28","valueSize":1},{"declaration":6292,"isOffset":false,"isSlot":false,"src":"4338:6:28","valueSize":1},{"declaration":6287,"isOffset":false,"isSlot":false,"src":"4320:4:28","valueSize":1}],"id":6294,"nodeType":"InlineAssembly","src":"4254:125:28"}]},"documentation":{"id":6285,"nodeType":"StructuredDocumentation","src":"4045:63:28","text":"@dev Derive the location of a mapping element from the key."},"id":6296,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"4122:13:28","nodeType":"FunctionDefinition","parameters":{"id":6290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6287,"mutability":"mutable","name":"slot","nameLocation":"4144:4:28","nodeType":"VariableDeclaration","scope":6296,"src":"4136:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6286,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4136:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6289,"mutability":"mutable","name":"key","nameLocation":"4157:3:28","nodeType":"VariableDeclaration","scope":6296,"src":"4150:10:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6288,"name":"int256","nodeType":"ElementaryTypeName","src":"4150:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4135:26:28"},"returnParameters":{"id":6293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6292,"mutability":"mutable","name":"result","nameLocation":"4193:6:28","nodeType":"VariableDeclaration","scope":6296,"src":"4185:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6291,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4185:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4184:16:28"},"scope":6321,"src":"4113:272:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6307,"nodeType":"Block","src":"4554:353:28","statements":[{"AST":{"nativeSrc":"4616:285:28","nodeType":"YulBlock","src":"4616:285:28","statements":[{"nativeSrc":"4630:24:28","nodeType":"YulVariableDeclaration","src":"4630:24:28","value":{"arguments":[{"name":"key","nativeSrc":"4650:3:28","nodeType":"YulIdentifier","src":"4650:3:28"}],"functionName":{"name":"mload","nativeSrc":"4644:5:28","nodeType":"YulIdentifier","src":"4644:5:28"},"nativeSrc":"4644:10:28","nodeType":"YulFunctionCall","src":"4644:10:28"},"variables":[{"name":"length","nativeSrc":"4634:6:28","nodeType":"YulTypedName","src":"4634:6:28","type":""}]},{"nativeSrc":"4667:27:28","nodeType":"YulVariableDeclaration","src":"4667:27:28","value":{"arguments":[{"name":"key","nativeSrc":"4684:3:28","nodeType":"YulIdentifier","src":"4684:3:28"},{"kind":"number","nativeSrc":"4689:4:28","nodeType":"YulLiteral","src":"4689:4:28","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4680:3:28","nodeType":"YulIdentifier","src":"4680:3:28"},"nativeSrc":"4680:14:28","nodeType":"YulFunctionCall","src":"4680:14:28"},"variables":[{"name":"begin","nativeSrc":"4671:5:28","nodeType":"YulTypedName","src":"4671:5:28","type":""}]},{"nativeSrc":"4707:29:28","nodeType":"YulVariableDeclaration","src":"4707:29:28","value":{"arguments":[{"name":"begin","nativeSrc":"4722:5:28","nodeType":"YulIdentifier","src":"4722:5:28"},{"name":"length","nativeSrc":"4729:6:28","nodeType":"YulIdentifier","src":"4729:6:28"}],"functionName":{"name":"add","nativeSrc":"4718:3:28","nodeType":"YulIdentifier","src":"4718:3:28"},"nativeSrc":"4718:18:28","nodeType":"YulFunctionCall","src":"4718:18:28"},"variables":[{"name":"end","nativeSrc":"4711:3:28","nodeType":"YulTypedName","src":"4711:3:28","type":""}]},{"nativeSrc":"4749:23:28","nodeType":"YulVariableDeclaration","src":"4749:23:28","value":{"arguments":[{"name":"end","nativeSrc":"4768:3:28","nodeType":"YulIdentifier","src":"4768:3:28"}],"functionName":{"name":"mload","nativeSrc":"4762:5:28","nodeType":"YulIdentifier","src":"4762:5:28"},"nativeSrc":"4762:10:28","nodeType":"YulFunctionCall","src":"4762:10:28"},"variables":[{"name":"cache","nativeSrc":"4753:5:28","nodeType":"YulTypedName","src":"4753:5:28","type":""}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"4792:3:28","nodeType":"YulIdentifier","src":"4792:3:28"},{"name":"slot","nativeSrc":"4797:4:28","nodeType":"YulIdentifier","src":"4797:4:28"}],"functionName":{"name":"mstore","nativeSrc":"4785:6:28","nodeType":"YulIdentifier","src":"4785:6:28"},"nativeSrc":"4785:17:28","nodeType":"YulFunctionCall","src":"4785:17:28"},"nativeSrc":"4785:17:28","nodeType":"YulExpressionStatement","src":"4785:17:28"},{"nativeSrc":"4815:45:28","nodeType":"YulAssignment","src":"4815:45:28","value":{"arguments":[{"name":"begin","nativeSrc":"4835:5:28","nodeType":"YulIdentifier","src":"4835:5:28"},{"arguments":[{"name":"length","nativeSrc":"4846:6:28","nodeType":"YulIdentifier","src":"4846:6:28"},{"kind":"number","nativeSrc":"4854:4:28","nodeType":"YulLiteral","src":"4854:4:28","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4842:3:28","nodeType":"YulIdentifier","src":"4842:3:28"},"nativeSrc":"4842:17:28","nodeType":"YulFunctionCall","src":"4842:17:28"}],"functionName":{"name":"keccak256","nativeSrc":"4825:9:28","nodeType":"YulIdentifier","src":"4825:9:28"},"nativeSrc":"4825:35:28","nodeType":"YulFunctionCall","src":"4825:35:28"},"variableNames":[{"name":"result","nativeSrc":"4815:6:28","nodeType":"YulIdentifier","src":"4815:6:28"}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"4880:3:28","nodeType":"YulIdentifier","src":"4880:3:28"},{"name":"cache","nativeSrc":"4885:5:28","nodeType":"YulIdentifier","src":"4885:5:28"}],"functionName":{"name":"mstore","nativeSrc":"4873:6:28","nodeType":"YulIdentifier","src":"4873:6:28"},"nativeSrc":"4873:18:28","nodeType":"YulFunctionCall","src":"4873:18:28"},"nativeSrc":"4873:18:28","nodeType":"YulExpressionStatement","src":"4873:18:28"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6301,"isOffset":false,"isSlot":false,"src":"4650:3:28","valueSize":1},{"declaration":6301,"isOffset":false,"isSlot":false,"src":"4684:3:28","valueSize":1},{"declaration":6304,"isOffset":false,"isSlot":false,"src":"4815:6:28","valueSize":1},{"declaration":6299,"isOffset":false,"isSlot":false,"src":"4797:4:28","valueSize":1}],"id":6306,"nodeType":"InlineAssembly","src":"4607:294:28"}]},"documentation":{"id":6297,"nodeType":"StructuredDocumentation","src":"4391:63:28","text":"@dev Derive the location of a mapping element from the key."},"id":6308,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"4468:13:28","nodeType":"FunctionDefinition","parameters":{"id":6302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6299,"mutability":"mutable","name":"slot","nameLocation":"4490:4:28","nodeType":"VariableDeclaration","scope":6308,"src":"4482:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6298,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4482:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6301,"mutability":"mutable","name":"key","nameLocation":"4510:3:28","nodeType":"VariableDeclaration","scope":6308,"src":"4496:17:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6300,"name":"string","nodeType":"ElementaryTypeName","src":"4496:6:28","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4481:33:28"},"returnParameters":{"id":6305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6304,"mutability":"mutable","name":"result","nameLocation":"4546:6:28","nodeType":"VariableDeclaration","scope":6308,"src":"4538:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6303,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4538:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4537:16:28"},"scope":6321,"src":"4459:448:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6319,"nodeType":"Block","src":"5075:353:28","statements":[{"AST":{"nativeSrc":"5137:285:28","nodeType":"YulBlock","src":"5137:285:28","statements":[{"nativeSrc":"5151:24:28","nodeType":"YulVariableDeclaration","src":"5151:24:28","value":{"arguments":[{"name":"key","nativeSrc":"5171:3:28","nodeType":"YulIdentifier","src":"5171:3:28"}],"functionName":{"name":"mload","nativeSrc":"5165:5:28","nodeType":"YulIdentifier","src":"5165:5:28"},"nativeSrc":"5165:10:28","nodeType":"YulFunctionCall","src":"5165:10:28"},"variables":[{"name":"length","nativeSrc":"5155:6:28","nodeType":"YulTypedName","src":"5155:6:28","type":""}]},{"nativeSrc":"5188:27:28","nodeType":"YulVariableDeclaration","src":"5188:27:28","value":{"arguments":[{"name":"key","nativeSrc":"5205:3:28","nodeType":"YulIdentifier","src":"5205:3:28"},{"kind":"number","nativeSrc":"5210:4:28","nodeType":"YulLiteral","src":"5210:4:28","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5201:3:28","nodeType":"YulIdentifier","src":"5201:3:28"},"nativeSrc":"5201:14:28","nodeType":"YulFunctionCall","src":"5201:14:28"},"variables":[{"name":"begin","nativeSrc":"5192:5:28","nodeType":"YulTypedName","src":"5192:5:28","type":""}]},{"nativeSrc":"5228:29:28","nodeType":"YulVariableDeclaration","src":"5228:29:28","value":{"arguments":[{"name":"begin","nativeSrc":"5243:5:28","nodeType":"YulIdentifier","src":"5243:5:28"},{"name":"length","nativeSrc":"5250:6:28","nodeType":"YulIdentifier","src":"5250:6:28"}],"functionName":{"name":"add","nativeSrc":"5239:3:28","nodeType":"YulIdentifier","src":"5239:3:28"},"nativeSrc":"5239:18:28","nodeType":"YulFunctionCall","src":"5239:18:28"},"variables":[{"name":"end","nativeSrc":"5232:3:28","nodeType":"YulTypedName","src":"5232:3:28","type":""}]},{"nativeSrc":"5270:23:28","nodeType":"YulVariableDeclaration","src":"5270:23:28","value":{"arguments":[{"name":"end","nativeSrc":"5289:3:28","nodeType":"YulIdentifier","src":"5289:3:28"}],"functionName":{"name":"mload","nativeSrc":"5283:5:28","nodeType":"YulIdentifier","src":"5283:5:28"},"nativeSrc":"5283:10:28","nodeType":"YulFunctionCall","src":"5283:10:28"},"variables":[{"name":"cache","nativeSrc":"5274:5:28","nodeType":"YulTypedName","src":"5274:5:28","type":""}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"5313:3:28","nodeType":"YulIdentifier","src":"5313:3:28"},{"name":"slot","nativeSrc":"5318:4:28","nodeType":"YulIdentifier","src":"5318:4:28"}],"functionName":{"name":"mstore","nativeSrc":"5306:6:28","nodeType":"YulIdentifier","src":"5306:6:28"},"nativeSrc":"5306:17:28","nodeType":"YulFunctionCall","src":"5306:17:28"},"nativeSrc":"5306:17:28","nodeType":"YulExpressionStatement","src":"5306:17:28"},{"nativeSrc":"5336:45:28","nodeType":"YulAssignment","src":"5336:45:28","value":{"arguments":[{"name":"begin","nativeSrc":"5356:5:28","nodeType":"YulIdentifier","src":"5356:5:28"},{"arguments":[{"name":"length","nativeSrc":"5367:6:28","nodeType":"YulIdentifier","src":"5367:6:28"},{"kind":"number","nativeSrc":"5375:4:28","nodeType":"YulLiteral","src":"5375:4:28","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5363:3:28","nodeType":"YulIdentifier","src":"5363:3:28"},"nativeSrc":"5363:17:28","nodeType":"YulFunctionCall","src":"5363:17:28"}],"functionName":{"name":"keccak256","nativeSrc":"5346:9:28","nodeType":"YulIdentifier","src":"5346:9:28"},"nativeSrc":"5346:35:28","nodeType":"YulFunctionCall","src":"5346:35:28"},"variableNames":[{"name":"result","nativeSrc":"5336:6:28","nodeType":"YulIdentifier","src":"5336:6:28"}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"5401:3:28","nodeType":"YulIdentifier","src":"5401:3:28"},{"name":"cache","nativeSrc":"5406:5:28","nodeType":"YulIdentifier","src":"5406:5:28"}],"functionName":{"name":"mstore","nativeSrc":"5394:6:28","nodeType":"YulIdentifier","src":"5394:6:28"},"nativeSrc":"5394:18:28","nodeType":"YulFunctionCall","src":"5394:18:28"},"nativeSrc":"5394:18:28","nodeType":"YulExpressionStatement","src":"5394:18:28"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6313,"isOffset":false,"isSlot":false,"src":"5171:3:28","valueSize":1},{"declaration":6313,"isOffset":false,"isSlot":false,"src":"5205:3:28","valueSize":1},{"declaration":6316,"isOffset":false,"isSlot":false,"src":"5336:6:28","valueSize":1},{"declaration":6311,"isOffset":false,"isSlot":false,"src":"5318:4:28","valueSize":1}],"id":6318,"nodeType":"InlineAssembly","src":"5128:294:28"}]},"documentation":{"id":6309,"nodeType":"StructuredDocumentation","src":"4913:63:28","text":"@dev Derive the location of a mapping element from the key."},"id":6320,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"4990:13:28","nodeType":"FunctionDefinition","parameters":{"id":6314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6311,"mutability":"mutable","name":"slot","nameLocation":"5012:4:28","nodeType":"VariableDeclaration","scope":6320,"src":"5004:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6310,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5004:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6313,"mutability":"mutable","name":"key","nameLocation":"5031:3:28","nodeType":"VariableDeclaration","scope":6320,"src":"5018:16:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6312,"name":"bytes","nodeType":"ElementaryTypeName","src":"5018:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5003:32:28"},"returnParameters":{"id":6317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6316,"mutability":"mutable","name":"result","nameLocation":"5067:6:28","nodeType":"VariableDeclaration","scope":6320,"src":"5059:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6315,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5059:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5058:16:28"},"scope":6321,"src":"4981:447:28","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":6322,"src":"1652:3778:28","usedErrors":[],"usedEvents":[]}],"src":"277:5153:28"},"id":28},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","exportedSymbols":{"StorageSlotExtension":[6534]},"id":6535,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6323,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:29"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlotExtension","contractDependencies":[],"contractKind":"library","documentation":{"id":6324,"nodeType":"StructuredDocumentation","src":"59:218:29","text":" @notice Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\n @dev TIP: Consider using this library along with {SlotDerivation}."},"fullyImplemented":true,"id":6534,"linearizedBaseContracts":[6534],"name":"StorageSlotExtension","nameLocation":"286:20:29","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlotExtension.Int256Slot","id":6327,"members":[{"constant":false,"id":6326,"mutability":"mutable","name":"value","nameLocation":"348:5:29","nodeType":"VariableDeclaration","scope":6327,"src":"341:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6325,"name":"int256","nodeType":"ElementaryTypeName","src":"341:6:29","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"name":"Int256Slot","nameLocation":"320:10:29","nodeType":"StructDefinition","scope":6534,"src":"313:47:29","visibility":"public"},{"body":{"id":6337,"nodeType":"Block","src":"524:106:29","statements":[{"AST":{"nativeSrc":"586:38:29","nodeType":"YulBlock","src":"586:38:29","statements":[{"nativeSrc":"600:14:29","nodeType":"YulAssignment","src":"600:14:29","value":{"name":"slot","nativeSrc":"610:4:29","nodeType":"YulIdentifier","src":"610:4:29"},"variableNames":[{"name":"r.slot","nativeSrc":"600:6:29","nodeType":"YulIdentifier","src":"600:6:29"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6334,"isOffset":false,"isSlot":true,"src":"600:6:29","suffix":"slot","valueSize":1},{"declaration":6330,"isOffset":false,"isSlot":false,"src":"610:4:29","valueSize":1}],"id":6336,"nodeType":"InlineAssembly","src":"577:47:29"}]},"documentation":{"id":6328,"nodeType":"StructuredDocumentation","src":"366:71:29","text":"@dev Returns an `Int256Slot` with member `value` located at `slot`."},"id":6338,"implemented":true,"kind":"function","modifiers":[],"name":"getInt256Slot","nameLocation":"451:13:29","nodeType":"FunctionDefinition","parameters":{"id":6331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6330,"mutability":"mutable","name":"slot","nameLocation":"473:4:29","nodeType":"VariableDeclaration","scope":6338,"src":"465:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6329,"name":"bytes32","nodeType":"ElementaryTypeName","src":"465:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"464:14:29"},"returnParameters":{"id":6335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6334,"mutability":"mutable","name":"r","nameLocation":"521:1:29","nodeType":"VariableDeclaration","scope":6338,"src":"502:20:29","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$6327_storage_ptr","typeString":"struct StorageSlotExtension.Int256Slot"},"typeName":{"id":6333,"nodeType":"UserDefinedTypeName","pathNode":{"id":6332,"name":"Int256Slot","nameLocations":["502:10:29"],"nodeType":"IdentifierPath","referencedDeclaration":6327,"src":"502:10:29"},"referencedDeclaration":6327,"src":"502:10:29","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$6327_storage_ptr","typeString":"struct StorageSlotExtension.Int256Slot"}},"visibility":"internal"}],"src":"501:22:29"},"scope":6534,"src":"442:188:29","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.AddressSlotType","id":6340,"name":"AddressSlotType","nameLocation":"709:15:29","nodeType":"UserDefinedValueTypeDefinition","src":"704:32:29","underlyingType":{"id":6339,"name":"bytes32","nodeType":"ElementaryTypeName","src":"728:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":6354,"nodeType":"Block","src":"873:50:29","statements":[{"expression":{"arguments":[{"id":6351,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6343,"src":"911:4:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":6349,"name":"AddressSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6340,"src":"890:15:29","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressSlotType_$6340_$","typeString":"type(StorageSlotExtension.AddressSlotType)"}},"id":6350,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"906:4:29","memberName":"wrap","nodeType":"MemberAccess","src":"890:20:29","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$6340_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":6352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"890:26:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6340","typeString":"StorageSlotExtension.AddressSlotType"}},"functionReturnParameters":6348,"id":6353,"nodeType":"Return","src":"883:33:29"}]},"documentation":{"id":6341,"nodeType":"StructuredDocumentation","src":"742:53:29","text":"@dev Cast an arbitrary slot to a AddressSlotType."},"id":6355,"implemented":true,"kind":"function","modifiers":[],"name":"asAddress","nameLocation":"809:9:29","nodeType":"FunctionDefinition","parameters":{"id":6344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6343,"mutability":"mutable","name":"slot","nameLocation":"827:4:29","nodeType":"VariableDeclaration","scope":6355,"src":"819:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6342,"name":"bytes32","nodeType":"ElementaryTypeName","src":"819:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"818:14:29"},"returnParameters":{"id":6348,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6347,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6355,"src":"856:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6340","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":6346,"nodeType":"UserDefinedTypeName","pathNode":{"id":6345,"name":"AddressSlotType","nameLocations":["856:15:29"],"nodeType":"IdentifierPath","referencedDeclaration":6340,"src":"856:15:29"},"referencedDeclaration":6340,"src":"856:15:29","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6340","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"855:17:29"},"scope":6534,"src":"800:123:29","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.BooleanSlotType","id":6357,"name":"BooleanSlotType","nameLocation":"1001:15:29","nodeType":"UserDefinedValueTypeDefinition","src":"996:32:29","underlyingType":{"id":6356,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1020:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":6371,"nodeType":"Block","src":"1165:50:29","statements":[{"expression":{"arguments":[{"id":6368,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6360,"src":"1203:4:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":6366,"name":"BooleanSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6357,"src":"1182:15:29","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_BooleanSlotType_$6357_$","typeString":"type(StorageSlotExtension.BooleanSlotType)"}},"id":6367,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1198:4:29","memberName":"wrap","nodeType":"MemberAccess","src":"1182:20:29","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$6357_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":6369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1182:26:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6357","typeString":"StorageSlotExtension.BooleanSlotType"}},"functionReturnParameters":6365,"id":6370,"nodeType":"Return","src":"1175:33:29"}]},"documentation":{"id":6358,"nodeType":"StructuredDocumentation","src":"1034:53:29","text":"@dev Cast an arbitrary slot to a BooleanSlotType."},"id":6372,"implemented":true,"kind":"function","modifiers":[],"name":"asBoolean","nameLocation":"1101:9:29","nodeType":"FunctionDefinition","parameters":{"id":6361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6360,"mutability":"mutable","name":"slot","nameLocation":"1119:4:29","nodeType":"VariableDeclaration","scope":6372,"src":"1111:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6359,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1111:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1110:14:29"},"returnParameters":{"id":6365,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6364,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6372,"src":"1148:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6357","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":6363,"nodeType":"UserDefinedTypeName","pathNode":{"id":6362,"name":"BooleanSlotType","nameLocations":["1148:15:29"],"nodeType":"IdentifierPath","referencedDeclaration":6357,"src":"1148:15:29"},"referencedDeclaration":6357,"src":"1148:15:29","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6357","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"1147:17:29"},"scope":6534,"src":"1092:123:29","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Bytes32SlotType","id":6374,"name":"Bytes32SlotType","nameLocation":"1293:15:29","nodeType":"UserDefinedValueTypeDefinition","src":"1288:32:29","underlyingType":{"id":6373,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1312:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":6388,"nodeType":"Block","src":"1457:50:29","statements":[{"expression":{"arguments":[{"id":6385,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6377,"src":"1495:4:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":6383,"name":"Bytes32SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6374,"src":"1474:15:29","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Bytes32SlotType_$6374_$","typeString":"type(StorageSlotExtension.Bytes32SlotType)"}},"id":6384,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1490:4:29","memberName":"wrap","nodeType":"MemberAccess","src":"1474:20:29","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Bytes32SlotType_$6374_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Bytes32SlotType)"}},"id":6386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1474:26:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$6374","typeString":"StorageSlotExtension.Bytes32SlotType"}},"functionReturnParameters":6382,"id":6387,"nodeType":"Return","src":"1467:33:29"}]},"documentation":{"id":6375,"nodeType":"StructuredDocumentation","src":"1326:53:29","text":"@dev Cast an arbitrary slot to a Bytes32SlotType."},"id":6389,"implemented":true,"kind":"function","modifiers":[],"name":"asBytes32","nameLocation":"1393:9:29","nodeType":"FunctionDefinition","parameters":{"id":6378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6377,"mutability":"mutable","name":"slot","nameLocation":"1411:4:29","nodeType":"VariableDeclaration","scope":6389,"src":"1403:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6376,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1403:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1402:14:29"},"returnParameters":{"id":6382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6381,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6389,"src":"1440:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$6374","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":6380,"nodeType":"UserDefinedTypeName","pathNode":{"id":6379,"name":"Bytes32SlotType","nameLocations":["1440:15:29"],"nodeType":"IdentifierPath","referencedDeclaration":6374,"src":"1440:15:29"},"referencedDeclaration":6374,"src":"1440:15:29","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$6374","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"}],"src":"1439:17:29"},"scope":6534,"src":"1384:123:29","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Uint256SlotType","id":6391,"name":"Uint256SlotType","nameLocation":"1585:15:29","nodeType":"UserDefinedValueTypeDefinition","src":"1580:32:29","underlyingType":{"id":6390,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1604:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":6405,"nodeType":"Block","src":"1749:50:29","statements":[{"expression":{"arguments":[{"id":6402,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6394,"src":"1787:4:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":6400,"name":"Uint256SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6391,"src":"1766:15:29","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"type(StorageSlotExtension.Uint256SlotType)"}},"id":6401,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1782:4:29","memberName":"wrap","nodeType":"MemberAccess","src":"1766:20:29","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":6403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1766:26:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"functionReturnParameters":6399,"id":6404,"nodeType":"Return","src":"1759:33:29"}]},"documentation":{"id":6392,"nodeType":"StructuredDocumentation","src":"1618:53:29","text":"@dev Cast an arbitrary slot to a Uint256SlotType."},"id":6406,"implemented":true,"kind":"function","modifiers":[],"name":"asUint256","nameLocation":"1685:9:29","nodeType":"FunctionDefinition","parameters":{"id":6395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6394,"mutability":"mutable","name":"slot","nameLocation":"1703:4:29","nodeType":"VariableDeclaration","scope":6406,"src":"1695:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6393,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1695:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1694:14:29"},"returnParameters":{"id":6399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6398,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6406,"src":"1732:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":6397,"nodeType":"UserDefinedTypeName","pathNode":{"id":6396,"name":"Uint256SlotType","nameLocations":["1732:15:29"],"nodeType":"IdentifierPath","referencedDeclaration":6391,"src":"1732:15:29"},"referencedDeclaration":6391,"src":"1732:15:29","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"1731:17:29"},"scope":6534,"src":"1676:123:29","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Int256SlotType","id":6408,"name":"Int256SlotType","nameLocation":"1877:14:29","nodeType":"UserDefinedValueTypeDefinition","src":"1872:31:29","underlyingType":{"id":6407,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1895:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":6422,"nodeType":"Block","src":"2038:49:29","statements":[{"expression":{"arguments":[{"id":6419,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6411,"src":"2075:4:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":6417,"name":"Int256SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6408,"src":"2055:14:29","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Int256SlotType_$6408_$","typeString":"type(StorageSlotExtension.Int256SlotType)"}},"id":6418,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2070:4:29","memberName":"wrap","nodeType":"MemberAccess","src":"2055:19:29","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Int256SlotType_$6408_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Int256SlotType)"}},"id":6420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2055:25:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$6408","typeString":"StorageSlotExtension.Int256SlotType"}},"functionReturnParameters":6416,"id":6421,"nodeType":"Return","src":"2048:32:29"}]},"documentation":{"id":6409,"nodeType":"StructuredDocumentation","src":"1909:53:29","text":"@dev Cast an arbitrary slot to an Int256SlotType."},"id":6423,"implemented":true,"kind":"function","modifiers":[],"name":"asInt256","nameLocation":"1976:8:29","nodeType":"FunctionDefinition","parameters":{"id":6412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6411,"mutability":"mutable","name":"slot","nameLocation":"1993:4:29","nodeType":"VariableDeclaration","scope":6423,"src":"1985:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6410,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1985:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1984:14:29"},"returnParameters":{"id":6416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6415,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6423,"src":"2022:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$6408","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":6414,"nodeType":"UserDefinedTypeName","pathNode":{"id":6413,"name":"Int256SlotType","nameLocations":["2022:14:29"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"2022:14:29"},"referencedDeclaration":6408,"src":"2022:14:29","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$6408","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"}],"src":"2021:16:29"},"scope":6534,"src":"1967:120:29","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6433,"nodeType":"Block","src":"2242:112:29","statements":[{"AST":{"nativeSrc":"2304:44:29","nodeType":"YulBlock","src":"2304:44:29","statements":[{"nativeSrc":"2318:20:29","nodeType":"YulAssignment","src":"2318:20:29","value":{"arguments":[{"name":"slot","nativeSrc":"2333:4:29","nodeType":"YulIdentifier","src":"2333:4:29"}],"functionName":{"name":"tload","nativeSrc":"2327:5:29","nodeType":"YulIdentifier","src":"2327:5:29"},"nativeSrc":"2327:11:29","nodeType":"YulFunctionCall","src":"2327:11:29"},"variableNames":[{"name":"value","nativeSrc":"2318:5:29","nodeType":"YulIdentifier","src":"2318:5:29"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6427,"isOffset":false,"isSlot":false,"src":"2333:4:29","valueSize":1},{"declaration":6430,"isOffset":false,"isSlot":false,"src":"2318:5:29","valueSize":1}],"id":6432,"nodeType":"InlineAssembly","src":"2295:53:29"}]},"documentation":{"id":6424,"nodeType":"StructuredDocumentation","src":"2093:69:29","text":"@dev Load the value held at location `slot` in transient storage."},"id":6434,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"2176:5:29","nodeType":"FunctionDefinition","parameters":{"id":6428,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6427,"mutability":"mutable","name":"slot","nameLocation":"2198:4:29","nodeType":"VariableDeclaration","scope":6434,"src":"2182:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6340","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":6426,"nodeType":"UserDefinedTypeName","pathNode":{"id":6425,"name":"AddressSlotType","nameLocations":["2182:15:29"],"nodeType":"IdentifierPath","referencedDeclaration":6340,"src":"2182:15:29"},"referencedDeclaration":6340,"src":"2182:15:29","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6340","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"2181:22:29"},"returnParameters":{"id":6431,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6430,"mutability":"mutable","name":"value","nameLocation":"2235:5:29","nodeType":"VariableDeclaration","scope":6434,"src":"2227:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6429,"name":"address","nodeType":"ElementaryTypeName","src":"2227:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2226:15:29"},"scope":6534,"src":"2167:187:29","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6444,"nodeType":"Block","src":"2490:111:29","statements":[{"AST":{"nativeSrc":"2552:43:29","nodeType":"YulBlock","src":"2552:43:29","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"2573:4:29","nodeType":"YulIdentifier","src":"2573:4:29"},{"name":"value","nativeSrc":"2579:5:29","nodeType":"YulIdentifier","src":"2579:5:29"}],"functionName":{"name":"tstore","nativeSrc":"2566:6:29","nodeType":"YulIdentifier","src":"2566:6:29"},"nativeSrc":"2566:19:29","nodeType":"YulFunctionCall","src":"2566:19:29"},"nativeSrc":"2566:19:29","nodeType":"YulExpressionStatement","src":"2566:19:29"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6438,"isOffset":false,"isSlot":false,"src":"2573:4:29","valueSize":1},{"declaration":6440,"isOffset":false,"isSlot":false,"src":"2579:5:29","valueSize":1}],"id":6443,"nodeType":"InlineAssembly","src":"2543:52:29"}]},"documentation":{"id":6435,"nodeType":"StructuredDocumentation","src":"2360:63:29","text":"@dev Store `value` at location `slot` in transient storage."},"id":6445,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"2437:6:29","nodeType":"FunctionDefinition","parameters":{"id":6441,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6438,"mutability":"mutable","name":"slot","nameLocation":"2460:4:29","nodeType":"VariableDeclaration","scope":6445,"src":"2444:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6340","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":6437,"nodeType":"UserDefinedTypeName","pathNode":{"id":6436,"name":"AddressSlotType","nameLocations":["2444:15:29"],"nodeType":"IdentifierPath","referencedDeclaration":6340,"src":"2444:15:29"},"referencedDeclaration":6340,"src":"2444:15:29","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6340","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"},{"constant":false,"id":6440,"mutability":"mutable","name":"value","nameLocation":"2474:5:29","nodeType":"VariableDeclaration","scope":6445,"src":"2466:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6439,"name":"address","nodeType":"ElementaryTypeName","src":"2466:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2443:37:29"},"returnParameters":{"id":6442,"nodeType":"ParameterList","parameters":[],"src":"2490:0:29"},"scope":6534,"src":"2428:173:29","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6455,"nodeType":"Block","src":"2753:112:29","statements":[{"AST":{"nativeSrc":"2815:44:29","nodeType":"YulBlock","src":"2815:44:29","statements":[{"nativeSrc":"2829:20:29","nodeType":"YulAssignment","src":"2829:20:29","value":{"arguments":[{"name":"slot","nativeSrc":"2844:4:29","nodeType":"YulIdentifier","src":"2844:4:29"}],"functionName":{"name":"tload","nativeSrc":"2838:5:29","nodeType":"YulIdentifier","src":"2838:5:29"},"nativeSrc":"2838:11:29","nodeType":"YulFunctionCall","src":"2838:11:29"},"variableNames":[{"name":"value","nativeSrc":"2829:5:29","nodeType":"YulIdentifier","src":"2829:5:29"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6449,"isOffset":false,"isSlot":false,"src":"2844:4:29","valueSize":1},{"declaration":6452,"isOffset":false,"isSlot":false,"src":"2829:5:29","valueSize":1}],"id":6454,"nodeType":"InlineAssembly","src":"2806:53:29"}]},"documentation":{"id":6446,"nodeType":"StructuredDocumentation","src":"2607:69:29","text":"@dev Load the value held at location `slot` in transient storage."},"id":6456,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"2690:5:29","nodeType":"FunctionDefinition","parameters":{"id":6450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6449,"mutability":"mutable","name":"slot","nameLocation":"2712:4:29","nodeType":"VariableDeclaration","scope":6456,"src":"2696:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6357","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":6448,"nodeType":"UserDefinedTypeName","pathNode":{"id":6447,"name":"BooleanSlotType","nameLocations":["2696:15:29"],"nodeType":"IdentifierPath","referencedDeclaration":6357,"src":"2696:15:29"},"referencedDeclaration":6357,"src":"2696:15:29","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6357","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"2695:22:29"},"returnParameters":{"id":6453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6452,"mutability":"mutable","name":"value","nameLocation":"2746:5:29","nodeType":"VariableDeclaration","scope":6456,"src":"2741:10:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6451,"name":"bool","nodeType":"ElementaryTypeName","src":"2741:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2740:12:29"},"scope":6534,"src":"2681:184:29","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6466,"nodeType":"Block","src":"2998:111:29","statements":[{"AST":{"nativeSrc":"3060:43:29","nodeType":"YulBlock","src":"3060:43:29","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"3081:4:29","nodeType":"YulIdentifier","src":"3081:4:29"},{"name":"value","nativeSrc":"3087:5:29","nodeType":"YulIdentifier","src":"3087:5:29"}],"functionName":{"name":"tstore","nativeSrc":"3074:6:29","nodeType":"YulIdentifier","src":"3074:6:29"},"nativeSrc":"3074:19:29","nodeType":"YulFunctionCall","src":"3074:19:29"},"nativeSrc":"3074:19:29","nodeType":"YulExpressionStatement","src":"3074:19:29"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6460,"isOffset":false,"isSlot":false,"src":"3081:4:29","valueSize":1},{"declaration":6462,"isOffset":false,"isSlot":false,"src":"3087:5:29","valueSize":1}],"id":6465,"nodeType":"InlineAssembly","src":"3051:52:29"}]},"documentation":{"id":6457,"nodeType":"StructuredDocumentation","src":"2871:63:29","text":"@dev Store `value` at location `slot` in transient storage."},"id":6467,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"2948:6:29","nodeType":"FunctionDefinition","parameters":{"id":6463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6460,"mutability":"mutable","name":"slot","nameLocation":"2971:4:29","nodeType":"VariableDeclaration","scope":6467,"src":"2955:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6357","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":6459,"nodeType":"UserDefinedTypeName","pathNode":{"id":6458,"name":"BooleanSlotType","nameLocations":["2955:15:29"],"nodeType":"IdentifierPath","referencedDeclaration":6357,"src":"2955:15:29"},"referencedDeclaration":6357,"src":"2955:15:29","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6357","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"},{"constant":false,"id":6462,"mutability":"mutable","name":"value","nameLocation":"2982:5:29","nodeType":"VariableDeclaration","scope":6467,"src":"2977:10:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6461,"name":"bool","nodeType":"ElementaryTypeName","src":"2977:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2954:34:29"},"returnParameters":{"id":6464,"nodeType":"ParameterList","parameters":[],"src":"2998:0:29"},"scope":6534,"src":"2939:170:29","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6477,"nodeType":"Block","src":"3264:112:29","statements":[{"AST":{"nativeSrc":"3326:44:29","nodeType":"YulBlock","src":"3326:44:29","statements":[{"nativeSrc":"3340:20:29","nodeType":"YulAssignment","src":"3340:20:29","value":{"arguments":[{"name":"slot","nativeSrc":"3355:4:29","nodeType":"YulIdentifier","src":"3355:4:29"}],"functionName":{"name":"tload","nativeSrc":"3349:5:29","nodeType":"YulIdentifier","src":"3349:5:29"},"nativeSrc":"3349:11:29","nodeType":"YulFunctionCall","src":"3349:11:29"},"variableNames":[{"name":"value","nativeSrc":"3340:5:29","nodeType":"YulIdentifier","src":"3340:5:29"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6471,"isOffset":false,"isSlot":false,"src":"3355:4:29","valueSize":1},{"declaration":6474,"isOffset":false,"isSlot":false,"src":"3340:5:29","valueSize":1}],"id":6476,"nodeType":"InlineAssembly","src":"3317:53:29"}]},"documentation":{"id":6468,"nodeType":"StructuredDocumentation","src":"3115:69:29","text":"@dev Load the value held at location `slot` in transient storage."},"id":6478,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"3198:5:29","nodeType":"FunctionDefinition","parameters":{"id":6472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6471,"mutability":"mutable","name":"slot","nameLocation":"3220:4:29","nodeType":"VariableDeclaration","scope":6478,"src":"3204:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$6374","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":6470,"nodeType":"UserDefinedTypeName","pathNode":{"id":6469,"name":"Bytes32SlotType","nameLocations":["3204:15:29"],"nodeType":"IdentifierPath","referencedDeclaration":6374,"src":"3204:15:29"},"referencedDeclaration":6374,"src":"3204:15:29","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$6374","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"}],"src":"3203:22:29"},"returnParameters":{"id":6475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6474,"mutability":"mutable","name":"value","nameLocation":"3257:5:29","nodeType":"VariableDeclaration","scope":6478,"src":"3249:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6473,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3249:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3248:15:29"},"scope":6534,"src":"3189:187:29","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6488,"nodeType":"Block","src":"3512:111:29","statements":[{"AST":{"nativeSrc":"3574:43:29","nodeType":"YulBlock","src":"3574:43:29","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"3595:4:29","nodeType":"YulIdentifier","src":"3595:4:29"},{"name":"value","nativeSrc":"3601:5:29","nodeType":"YulIdentifier","src":"3601:5:29"}],"functionName":{"name":"tstore","nativeSrc":"3588:6:29","nodeType":"YulIdentifier","src":"3588:6:29"},"nativeSrc":"3588:19:29","nodeType":"YulFunctionCall","src":"3588:19:29"},"nativeSrc":"3588:19:29","nodeType":"YulExpressionStatement","src":"3588:19:29"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6482,"isOffset":false,"isSlot":false,"src":"3595:4:29","valueSize":1},{"declaration":6484,"isOffset":false,"isSlot":false,"src":"3601:5:29","valueSize":1}],"id":6487,"nodeType":"InlineAssembly","src":"3565:52:29"}]},"documentation":{"id":6479,"nodeType":"StructuredDocumentation","src":"3382:63:29","text":"@dev Store `value` at location `slot` in transient storage."},"id":6489,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"3459:6:29","nodeType":"FunctionDefinition","parameters":{"id":6485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6482,"mutability":"mutable","name":"slot","nameLocation":"3482:4:29","nodeType":"VariableDeclaration","scope":6489,"src":"3466:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$6374","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":6481,"nodeType":"UserDefinedTypeName","pathNode":{"id":6480,"name":"Bytes32SlotType","nameLocations":["3466:15:29"],"nodeType":"IdentifierPath","referencedDeclaration":6374,"src":"3466:15:29"},"referencedDeclaration":6374,"src":"3466:15:29","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$6374","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"},{"constant":false,"id":6484,"mutability":"mutable","name":"value","nameLocation":"3496:5:29","nodeType":"VariableDeclaration","scope":6489,"src":"3488:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6483,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3488:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3465:37:29"},"returnParameters":{"id":6486,"nodeType":"ParameterList","parameters":[],"src":"3512:0:29"},"scope":6534,"src":"3450:173:29","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6499,"nodeType":"Block","src":"3778:112:29","statements":[{"AST":{"nativeSrc":"3840:44:29","nodeType":"YulBlock","src":"3840:44:29","statements":[{"nativeSrc":"3854:20:29","nodeType":"YulAssignment","src":"3854:20:29","value":{"arguments":[{"name":"slot","nativeSrc":"3869:4:29","nodeType":"YulIdentifier","src":"3869:4:29"}],"functionName":{"name":"tload","nativeSrc":"3863:5:29","nodeType":"YulIdentifier","src":"3863:5:29"},"nativeSrc":"3863:11:29","nodeType":"YulFunctionCall","src":"3863:11:29"},"variableNames":[{"name":"value","nativeSrc":"3854:5:29","nodeType":"YulIdentifier","src":"3854:5:29"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6493,"isOffset":false,"isSlot":false,"src":"3869:4:29","valueSize":1},{"declaration":6496,"isOffset":false,"isSlot":false,"src":"3854:5:29","valueSize":1}],"id":6498,"nodeType":"InlineAssembly","src":"3831:53:29"}]},"documentation":{"id":6490,"nodeType":"StructuredDocumentation","src":"3629:69:29","text":"@dev Load the value held at location `slot` in transient storage."},"id":6500,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"3712:5:29","nodeType":"FunctionDefinition","parameters":{"id":6494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6493,"mutability":"mutable","name":"slot","nameLocation":"3734:4:29","nodeType":"VariableDeclaration","scope":6500,"src":"3718:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":6492,"nodeType":"UserDefinedTypeName","pathNode":{"id":6491,"name":"Uint256SlotType","nameLocations":["3718:15:29"],"nodeType":"IdentifierPath","referencedDeclaration":6391,"src":"3718:15:29"},"referencedDeclaration":6391,"src":"3718:15:29","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"3717:22:29"},"returnParameters":{"id":6497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6496,"mutability":"mutable","name":"value","nameLocation":"3771:5:29","nodeType":"VariableDeclaration","scope":6500,"src":"3763:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6495,"name":"uint256","nodeType":"ElementaryTypeName","src":"3763:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3762:15:29"},"scope":6534,"src":"3703:187:29","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6510,"nodeType":"Block","src":"4026:111:29","statements":[{"AST":{"nativeSrc":"4088:43:29","nodeType":"YulBlock","src":"4088:43:29","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"4109:4:29","nodeType":"YulIdentifier","src":"4109:4:29"},{"name":"value","nativeSrc":"4115:5:29","nodeType":"YulIdentifier","src":"4115:5:29"}],"functionName":{"name":"tstore","nativeSrc":"4102:6:29","nodeType":"YulIdentifier","src":"4102:6:29"},"nativeSrc":"4102:19:29","nodeType":"YulFunctionCall","src":"4102:19:29"},"nativeSrc":"4102:19:29","nodeType":"YulExpressionStatement","src":"4102:19:29"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6504,"isOffset":false,"isSlot":false,"src":"4109:4:29","valueSize":1},{"declaration":6506,"isOffset":false,"isSlot":false,"src":"4115:5:29","valueSize":1}],"id":6509,"nodeType":"InlineAssembly","src":"4079:52:29"}]},"documentation":{"id":6501,"nodeType":"StructuredDocumentation","src":"3896:63:29","text":"@dev Store `value` at location `slot` in transient storage."},"id":6511,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"3973:6:29","nodeType":"FunctionDefinition","parameters":{"id":6507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6504,"mutability":"mutable","name":"slot","nameLocation":"3996:4:29","nodeType":"VariableDeclaration","scope":6511,"src":"3980:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":6503,"nodeType":"UserDefinedTypeName","pathNode":{"id":6502,"name":"Uint256SlotType","nameLocations":["3980:15:29"],"nodeType":"IdentifierPath","referencedDeclaration":6391,"src":"3980:15:29"},"referencedDeclaration":6391,"src":"3980:15:29","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"},{"constant":false,"id":6506,"mutability":"mutable","name":"value","nameLocation":"4010:5:29","nodeType":"VariableDeclaration","scope":6511,"src":"4002:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6505,"name":"uint256","nodeType":"ElementaryTypeName","src":"4002:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3979:37:29"},"returnParameters":{"id":6508,"nodeType":"ParameterList","parameters":[],"src":"4026:0:29"},"scope":6534,"src":"3964:173:29","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6521,"nodeType":"Block","src":"4290:112:29","statements":[{"AST":{"nativeSrc":"4352:44:29","nodeType":"YulBlock","src":"4352:44:29","statements":[{"nativeSrc":"4366:20:29","nodeType":"YulAssignment","src":"4366:20:29","value":{"arguments":[{"name":"slot","nativeSrc":"4381:4:29","nodeType":"YulIdentifier","src":"4381:4:29"}],"functionName":{"name":"tload","nativeSrc":"4375:5:29","nodeType":"YulIdentifier","src":"4375:5:29"},"nativeSrc":"4375:11:29","nodeType":"YulFunctionCall","src":"4375:11:29"},"variableNames":[{"name":"value","nativeSrc":"4366:5:29","nodeType":"YulIdentifier","src":"4366:5:29"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6515,"isOffset":false,"isSlot":false,"src":"4381:4:29","valueSize":1},{"declaration":6518,"isOffset":false,"isSlot":false,"src":"4366:5:29","valueSize":1}],"id":6520,"nodeType":"InlineAssembly","src":"4343:53:29"}]},"documentation":{"id":6512,"nodeType":"StructuredDocumentation","src":"4143:69:29","text":"@dev Load the value held at location `slot` in transient storage."},"id":6522,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"4226:5:29","nodeType":"FunctionDefinition","parameters":{"id":6516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6515,"mutability":"mutable","name":"slot","nameLocation":"4247:4:29","nodeType":"VariableDeclaration","scope":6522,"src":"4232:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$6408","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":6514,"nodeType":"UserDefinedTypeName","pathNode":{"id":6513,"name":"Int256SlotType","nameLocations":["4232:14:29"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"4232:14:29"},"referencedDeclaration":6408,"src":"4232:14:29","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$6408","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"}],"src":"4231:21:29"},"returnParameters":{"id":6519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6518,"mutability":"mutable","name":"value","nameLocation":"4283:5:29","nodeType":"VariableDeclaration","scope":6522,"src":"4276:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6517,"name":"int256","nodeType":"ElementaryTypeName","src":"4276:6:29","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4275:14:29"},"scope":6534,"src":"4217:185:29","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6532,"nodeType":"Block","src":"4536:111:29","statements":[{"AST":{"nativeSrc":"4598:43:29","nodeType":"YulBlock","src":"4598:43:29","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"4619:4:29","nodeType":"YulIdentifier","src":"4619:4:29"},{"name":"value","nativeSrc":"4625:5:29","nodeType":"YulIdentifier","src":"4625:5:29"}],"functionName":{"name":"tstore","nativeSrc":"4612:6:29","nodeType":"YulIdentifier","src":"4612:6:29"},"nativeSrc":"4612:19:29","nodeType":"YulFunctionCall","src":"4612:19:29"},"nativeSrc":"4612:19:29","nodeType":"YulExpressionStatement","src":"4612:19:29"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6526,"isOffset":false,"isSlot":false,"src":"4619:4:29","valueSize":1},{"declaration":6528,"isOffset":false,"isSlot":false,"src":"4625:5:29","valueSize":1}],"id":6531,"nodeType":"InlineAssembly","src":"4589:52:29"}]},"documentation":{"id":6523,"nodeType":"StructuredDocumentation","src":"4408:63:29","text":"@dev Store `value` at location `slot` in transient storage."},"id":6533,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"4485:6:29","nodeType":"FunctionDefinition","parameters":{"id":6529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6526,"mutability":"mutable","name":"slot","nameLocation":"4507:4:29","nodeType":"VariableDeclaration","scope":6533,"src":"4492:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$6408","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":6525,"nodeType":"UserDefinedTypeName","pathNode":{"id":6524,"name":"Int256SlotType","nameLocations":["4492:14:29"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"4492:14:29"},"referencedDeclaration":6408,"src":"4492:14:29","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$6408","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"},{"constant":false,"id":6528,"mutability":"mutable","name":"value","nameLocation":"4520:5:29","nodeType":"VariableDeclaration","scope":6533,"src":"4513:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6527,"name":"int256","nodeType":"ElementaryTypeName","src":"4513:6:29","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4491:35:29"},"returnParameters":{"id":6530,"nodeType":"ParameterList","parameters":[],"src":"4536:0:29"},"scope":6534,"src":"4476:171:29","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":6535,"src":"278:4371:29","usedErrors":[],"usedEvents":[]}],"src":"33:4617:29"},"id":29},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","exportedSymbols":{"IERC20":[6980],"IERC20Metadata":[7006],"IERC4626":[6704]},"id":6705,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6536,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:30"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../token/ERC20/IERC20.sol","id":6538,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6705,"sourceUnit":6981,"src":"133:49:30","symbolAliases":[{"foreign":{"id":6537,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"141:6:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"../token/ERC20/extensions/IERC20Metadata.sol","id":6540,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6705,"sourceUnit":7007,"src":"183:76:30","symbolAliases":[{"foreign":{"id":6539,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7006,"src":"191:14:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6542,"name":"IERC20","nameLocations":["420:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"420:6:30"},"id":6543,"nodeType":"InheritanceSpecifier","src":"420:6:30"},{"baseName":{"id":6544,"name":"IERC20Metadata","nameLocations":["428:14:30"],"nodeType":"IdentifierPath","referencedDeclaration":7006,"src":"428:14:30"},"id":6545,"nodeType":"InheritanceSpecifier","src":"428:14:30"}],"canonicalName":"IERC4626","contractDependencies":[],"contractKind":"interface","documentation":{"id":6541,"nodeType":"StructuredDocumentation","src":"261:136:30","text":" @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n https://eips.ethereum.org/EIPS/eip-4626[ERC-4626]."},"fullyImplemented":false,"id":6704,"linearizedBaseContracts":[6704,7006,6980],"name":"IERC4626","nameLocation":"408:8:30","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"dcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7","id":6555,"name":"Deposit","nameLocation":"455:7:30","nodeType":"EventDefinition","parameters":{"id":6554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6547,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"479:6:30","nodeType":"VariableDeclaration","scope":6555,"src":"463:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6546,"name":"address","nodeType":"ElementaryTypeName","src":"463:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6549,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"503:5:30","nodeType":"VariableDeclaration","scope":6555,"src":"487:21:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6548,"name":"address","nodeType":"ElementaryTypeName","src":"487:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6551,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"518:6:30","nodeType":"VariableDeclaration","scope":6555,"src":"510:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6550,"name":"uint256","nodeType":"ElementaryTypeName","src":"510:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6553,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"534:6:30","nodeType":"VariableDeclaration","scope":6555,"src":"526:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6552,"name":"uint256","nodeType":"ElementaryTypeName","src":"526:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"462:79:30"},"src":"449:93:30"},{"anonymous":false,"eventSelector":"fbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db","id":6567,"name":"Withdraw","nameLocation":"554:8:30","nodeType":"EventDefinition","parameters":{"id":6566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6557,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"588:6:30","nodeType":"VariableDeclaration","scope":6567,"src":"572:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6556,"name":"address","nodeType":"ElementaryTypeName","src":"572:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6559,"indexed":true,"mutability":"mutable","name":"receiver","nameLocation":"620:8:30","nodeType":"VariableDeclaration","scope":6567,"src":"604:24:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6558,"name":"address","nodeType":"ElementaryTypeName","src":"604:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6561,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"654:5:30","nodeType":"VariableDeclaration","scope":6567,"src":"638:21:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6560,"name":"address","nodeType":"ElementaryTypeName","src":"638:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6563,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"677:6:30","nodeType":"VariableDeclaration","scope":6567,"src":"669:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6562,"name":"uint256","nodeType":"ElementaryTypeName","src":"669:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6565,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"701:6:30","nodeType":"VariableDeclaration","scope":6567,"src":"693:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6564,"name":"uint256","nodeType":"ElementaryTypeName","src":"693:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"562:151:30"},"src":"548:166:30"},{"documentation":{"id":6568,"nodeType":"StructuredDocumentation","src":"720:207:30","text":" @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n - MUST be an ERC-20 token contract.\n - MUST NOT revert."},"functionSelector":"38d52e0f","id":6573,"implemented":false,"kind":"function","modifiers":[],"name":"asset","nameLocation":"941:5:30","nodeType":"FunctionDefinition","parameters":{"id":6569,"nodeType":"ParameterList","parameters":[],"src":"946:2:30"},"returnParameters":{"id":6572,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6571,"mutability":"mutable","name":"assetTokenAddress","nameLocation":"980:17:30","nodeType":"VariableDeclaration","scope":6573,"src":"972:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6570,"name":"address","nodeType":"ElementaryTypeName","src":"972:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"971:27:30"},"scope":6704,"src":"932:67:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6574,"nodeType":"StructuredDocumentation","src":"1005:286:30","text":" @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n - SHOULD include any compounding that occurs from yield.\n - MUST be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT revert."},"functionSelector":"01e1d114","id":6579,"implemented":false,"kind":"function","modifiers":[],"name":"totalAssets","nameLocation":"1305:11:30","nodeType":"FunctionDefinition","parameters":{"id":6575,"nodeType":"ParameterList","parameters":[],"src":"1316:2:30"},"returnParameters":{"id":6578,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6577,"mutability":"mutable","name":"totalManagedAssets","nameLocation":"1350:18:30","nodeType":"VariableDeclaration","scope":6579,"src":"1342:26:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6576,"name":"uint256","nodeType":"ElementaryTypeName","src":"1342:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1341:28:30"},"scope":6704,"src":"1296:74:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6580,"nodeType":"StructuredDocumentation","src":"1376:720:30","text":" @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"c6e6f592","id":6587,"implemented":false,"kind":"function","modifiers":[],"name":"convertToShares","nameLocation":"2110:15:30","nodeType":"FunctionDefinition","parameters":{"id":6583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6582,"mutability":"mutable","name":"assets","nameLocation":"2134:6:30","nodeType":"VariableDeclaration","scope":6587,"src":"2126:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6581,"name":"uint256","nodeType":"ElementaryTypeName","src":"2126:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2125:16:30"},"returnParameters":{"id":6586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6585,"mutability":"mutable","name":"shares","nameLocation":"2173:6:30","nodeType":"VariableDeclaration","scope":6587,"src":"2165:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6584,"name":"uint256","nodeType":"ElementaryTypeName","src":"2165:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2164:16:30"},"scope":6704,"src":"2101:80:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6588,"nodeType":"StructuredDocumentation","src":"2187:720:30","text":" @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"07a2d13a","id":6595,"implemented":false,"kind":"function","modifiers":[],"name":"convertToAssets","nameLocation":"2921:15:30","nodeType":"FunctionDefinition","parameters":{"id":6591,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6590,"mutability":"mutable","name":"shares","nameLocation":"2945:6:30","nodeType":"VariableDeclaration","scope":6595,"src":"2937:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6589,"name":"uint256","nodeType":"ElementaryTypeName","src":"2937:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2936:16:30"},"returnParameters":{"id":6594,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6593,"mutability":"mutable","name":"assets","nameLocation":"2984:6:30","nodeType":"VariableDeclaration","scope":6595,"src":"2976:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6592,"name":"uint256","nodeType":"ElementaryTypeName","src":"2976:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2975:16:30"},"scope":6704,"src":"2912:80:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6596,"nodeType":"StructuredDocumentation","src":"2998:386:30","text":" @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n through a deposit call.\n - MUST return a limited value if receiver is subject to some deposit limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n - MUST NOT revert."},"functionSelector":"402d267d","id":6603,"implemented":false,"kind":"function","modifiers":[],"name":"maxDeposit","nameLocation":"3398:10:30","nodeType":"FunctionDefinition","parameters":{"id":6599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6598,"mutability":"mutable","name":"receiver","nameLocation":"3417:8:30","nodeType":"VariableDeclaration","scope":6603,"src":"3409:16:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6597,"name":"address","nodeType":"ElementaryTypeName","src":"3409:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3408:18:30"},"returnParameters":{"id":6602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6601,"mutability":"mutable","name":"maxAssets","nameLocation":"3458:9:30","nodeType":"VariableDeclaration","scope":6603,"src":"3450:17:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6600,"name":"uint256","nodeType":"ElementaryTypeName","src":"3450:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3449:19:30"},"scope":6704,"src":"3389:80:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6604,"nodeType":"StructuredDocumentation","src":"3475:1012:30","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n current on-chain conditions.\n - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n in the same transaction.\n - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n deposit would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"ef8b30f7","id":6611,"implemented":false,"kind":"function","modifiers":[],"name":"previewDeposit","nameLocation":"4501:14:30","nodeType":"FunctionDefinition","parameters":{"id":6607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6606,"mutability":"mutable","name":"assets","nameLocation":"4524:6:30","nodeType":"VariableDeclaration","scope":6611,"src":"4516:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6605,"name":"uint256","nodeType":"ElementaryTypeName","src":"4516:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4515:16:30"},"returnParameters":{"id":6610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6609,"mutability":"mutable","name":"shares","nameLocation":"4563:6:30","nodeType":"VariableDeclaration","scope":6611,"src":"4555:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6608,"name":"uint256","nodeType":"ElementaryTypeName","src":"4555:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4554:16:30"},"scope":6704,"src":"4492:79:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6612,"nodeType":"StructuredDocumentation","src":"4577:651:30","text":" @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n deposit execution, and are accounted for during deposit.\n - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"6e553f65","id":6621,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"5242:7:30","nodeType":"FunctionDefinition","parameters":{"id":6617,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6614,"mutability":"mutable","name":"assets","nameLocation":"5258:6:30","nodeType":"VariableDeclaration","scope":6621,"src":"5250:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6613,"name":"uint256","nodeType":"ElementaryTypeName","src":"5250:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6616,"mutability":"mutable","name":"receiver","nameLocation":"5274:8:30","nodeType":"VariableDeclaration","scope":6621,"src":"5266:16:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6615,"name":"address","nodeType":"ElementaryTypeName","src":"5266:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5249:34:30"},"returnParameters":{"id":6620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6619,"mutability":"mutable","name":"shares","nameLocation":"5310:6:30","nodeType":"VariableDeclaration","scope":6621,"src":"5302:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6618,"name":"uint256","nodeType":"ElementaryTypeName","src":"5302:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5301:16:30"},"scope":6704,"src":"5233:85:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6622,"nodeType":"StructuredDocumentation","src":"5324:341:30","text":" @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n - MUST return a limited value if receiver is subject to some mint limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n - MUST NOT revert."},"functionSelector":"c63d75b6","id":6629,"implemented":false,"kind":"function","modifiers":[],"name":"maxMint","nameLocation":"5679:7:30","nodeType":"FunctionDefinition","parameters":{"id":6625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6624,"mutability":"mutable","name":"receiver","nameLocation":"5695:8:30","nodeType":"VariableDeclaration","scope":6629,"src":"5687:16:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6623,"name":"address","nodeType":"ElementaryTypeName","src":"5687:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5686:18:30"},"returnParameters":{"id":6628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6627,"mutability":"mutable","name":"maxShares","nameLocation":"5736:9:30","nodeType":"VariableDeclaration","scope":6629,"src":"5728:17:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6626,"name":"uint256","nodeType":"ElementaryTypeName","src":"5728:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5727:19:30"},"scope":6704,"src":"5670:77:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6630,"nodeType":"StructuredDocumentation","src":"5753:984:30","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n same transaction.\n - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by minting."},"functionSelector":"b3d7f6b9","id":6637,"implemented":false,"kind":"function","modifiers":[],"name":"previewMint","nameLocation":"6751:11:30","nodeType":"FunctionDefinition","parameters":{"id":6633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6632,"mutability":"mutable","name":"shares","nameLocation":"6771:6:30","nodeType":"VariableDeclaration","scope":6637,"src":"6763:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6631,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6762:16:30"},"returnParameters":{"id":6636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6635,"mutability":"mutable","name":"assets","nameLocation":"6810:6:30","nodeType":"VariableDeclaration","scope":6637,"src":"6802:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6634,"name":"uint256","nodeType":"ElementaryTypeName","src":"6802:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6801:16:30"},"scope":6704,"src":"6742:76:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6638,"nodeType":"StructuredDocumentation","src":"6824:642:30","text":" @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n execution, and are accounted for during mint.\n - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"94bf804d","id":6647,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"7480:4:30","nodeType":"FunctionDefinition","parameters":{"id":6643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6640,"mutability":"mutable","name":"shares","nameLocation":"7493:6:30","nodeType":"VariableDeclaration","scope":6647,"src":"7485:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6639,"name":"uint256","nodeType":"ElementaryTypeName","src":"7485:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6642,"mutability":"mutable","name":"receiver","nameLocation":"7509:8:30","nodeType":"VariableDeclaration","scope":6647,"src":"7501:16:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6641,"name":"address","nodeType":"ElementaryTypeName","src":"7501:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7484:34:30"},"returnParameters":{"id":6646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6645,"mutability":"mutable","name":"assets","nameLocation":"7545:6:30","nodeType":"VariableDeclaration","scope":6647,"src":"7537:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6644,"name":"uint256","nodeType":"ElementaryTypeName","src":"7537:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7536:16:30"},"scope":6704,"src":"7471:82:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6648,"nodeType":"StructuredDocumentation","src":"7559:293:30","text":" @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n Vault, through a withdraw call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"ce96cb77","id":6655,"implemented":false,"kind":"function","modifiers":[],"name":"maxWithdraw","nameLocation":"7866:11:30","nodeType":"FunctionDefinition","parameters":{"id":6651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6650,"mutability":"mutable","name":"owner","nameLocation":"7886:5:30","nodeType":"VariableDeclaration","scope":6655,"src":"7878:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6649,"name":"address","nodeType":"ElementaryTypeName","src":"7878:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7877:15:30"},"returnParameters":{"id":6654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6653,"mutability":"mutable","name":"maxAssets","nameLocation":"7924:9:30","nodeType":"VariableDeclaration","scope":6655,"src":"7916:17:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6652,"name":"uint256","nodeType":"ElementaryTypeName","src":"7916:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7915:19:30"},"scope":6704,"src":"7857:78:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6656,"nodeType":"StructuredDocumentation","src":"7941:1034:30","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n given current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n called\n in the same transaction.\n - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n the withdrawal would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"0a28a477","id":6663,"implemented":false,"kind":"function","modifiers":[],"name":"previewWithdraw","nameLocation":"8989:15:30","nodeType":"FunctionDefinition","parameters":{"id":6659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6658,"mutability":"mutable","name":"assets","nameLocation":"9013:6:30","nodeType":"VariableDeclaration","scope":6663,"src":"9005:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6657,"name":"uint256","nodeType":"ElementaryTypeName","src":"9005:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9004:16:30"},"returnParameters":{"id":6662,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6661,"mutability":"mutable","name":"shares","nameLocation":"9052:6:30","nodeType":"VariableDeclaration","scope":6663,"src":"9044:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6660,"name":"uint256","nodeType":"ElementaryTypeName","src":"9044:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9043:16:30"},"scope":6704,"src":"8980:80:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6664,"nodeType":"StructuredDocumentation","src":"9066:670:30","text":" @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n withdraw execution, and are accounted for during withdraw.\n - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"b460af94","id":6675,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"9750:8:30","nodeType":"FunctionDefinition","parameters":{"id":6671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6666,"mutability":"mutable","name":"assets","nameLocation":"9767:6:30","nodeType":"VariableDeclaration","scope":6675,"src":"9759:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6665,"name":"uint256","nodeType":"ElementaryTypeName","src":"9759:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6668,"mutability":"mutable","name":"receiver","nameLocation":"9783:8:30","nodeType":"VariableDeclaration","scope":6675,"src":"9775:16:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6667,"name":"address","nodeType":"ElementaryTypeName","src":"9775:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6670,"mutability":"mutable","name":"owner","nameLocation":"9801:5:30","nodeType":"VariableDeclaration","scope":6675,"src":"9793:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6669,"name":"address","nodeType":"ElementaryTypeName","src":"9793:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9758:49:30"},"returnParameters":{"id":6674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6673,"mutability":"mutable","name":"shares","nameLocation":"9834:6:30","nodeType":"VariableDeclaration","scope":6675,"src":"9826:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6672,"name":"uint256","nodeType":"ElementaryTypeName","src":"9826:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9825:16:30"},"scope":6704,"src":"9741:101:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6676,"nodeType":"StructuredDocumentation","src":"9848:381:30","text":" @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n through a redeem call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"d905777e","id":6683,"implemented":false,"kind":"function","modifiers":[],"name":"maxRedeem","nameLocation":"10243:9:30","nodeType":"FunctionDefinition","parameters":{"id":6679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6678,"mutability":"mutable","name":"owner","nameLocation":"10261:5:30","nodeType":"VariableDeclaration","scope":6683,"src":"10253:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6677,"name":"address","nodeType":"ElementaryTypeName","src":"10253:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10252:15:30"},"returnParameters":{"id":6682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6681,"mutability":"mutable","name":"maxShares","nameLocation":"10299:9:30","nodeType":"VariableDeclaration","scope":6683,"src":"10291:17:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6680,"name":"uint256","nodeType":"ElementaryTypeName","src":"10291:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10290:19:30"},"scope":6704,"src":"10234:76:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6684,"nodeType":"StructuredDocumentation","src":"10316:1010:30","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n given current on-chain conditions.\n - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n same transaction.\n - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n redemption would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by redeeming."},"functionSelector":"4cdad506","id":6691,"implemented":false,"kind":"function","modifiers":[],"name":"previewRedeem","nameLocation":"11340:13:30","nodeType":"FunctionDefinition","parameters":{"id":6687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6686,"mutability":"mutable","name":"shares","nameLocation":"11362:6:30","nodeType":"VariableDeclaration","scope":6691,"src":"11354:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6685,"name":"uint256","nodeType":"ElementaryTypeName","src":"11354:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11353:16:30"},"returnParameters":{"id":6690,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6689,"mutability":"mutable","name":"assets","nameLocation":"11401:6:30","nodeType":"VariableDeclaration","scope":6691,"src":"11393:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6688,"name":"uint256","nodeType":"ElementaryTypeName","src":"11393:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11392:16:30"},"scope":6704,"src":"11331:78:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6692,"nodeType":"StructuredDocumentation","src":"11415:661:30","text":" @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n redeem execution, and are accounted for during redeem.\n - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"ba087652","id":6703,"implemented":false,"kind":"function","modifiers":[],"name":"redeem","nameLocation":"12090:6:30","nodeType":"FunctionDefinition","parameters":{"id":6699,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6694,"mutability":"mutable","name":"shares","nameLocation":"12105:6:30","nodeType":"VariableDeclaration","scope":6703,"src":"12097:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6693,"name":"uint256","nodeType":"ElementaryTypeName","src":"12097:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6696,"mutability":"mutable","name":"receiver","nameLocation":"12121:8:30","nodeType":"VariableDeclaration","scope":6703,"src":"12113:16:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6695,"name":"address","nodeType":"ElementaryTypeName","src":"12113:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6698,"mutability":"mutable","name":"owner","nameLocation":"12139:5:30","nodeType":"VariableDeclaration","scope":6703,"src":"12131:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6697,"name":"address","nodeType":"ElementaryTypeName","src":"12131:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12096:49:30"},"returnParameters":{"id":6702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6701,"mutability":"mutable","name":"assets","nameLocation":"12172:6:30","nodeType":"VariableDeclaration","scope":6703,"src":"12164:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6700,"name":"uint256","nodeType":"ElementaryTypeName","src":"12164:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12163:16:30"},"scope":6704,"src":"12081:99:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":6705,"src":"398:11784:30","usedErrors":[],"usedEvents":[6555,6567,6914,6923]}],"src":"107:12076:30"},"id":30},"@openzeppelin/contracts/interfaces/IERC5267.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC5267.sol","exportedSymbols":{"IERC5267":[6729]},"id":6730,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6706,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:31"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC5267","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":6729,"linearizedBaseContracts":[6729],"name":"IERC5267","nameLocation":"143:8:31","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":6707,"nodeType":"StructuredDocumentation","src":"158:84:31","text":" @dev MAY be emitted to signal that the domain could have changed."},"eventSelector":"0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31","id":6709,"name":"EIP712DomainChanged","nameLocation":"253:19:31","nodeType":"EventDefinition","parameters":{"id":6708,"nodeType":"ParameterList","parameters":[],"src":"272:2:31"},"src":"247:28:31"},{"documentation":{"id":6710,"nodeType":"StructuredDocumentation","src":"281:140:31","text":" @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\n signature."},"functionSelector":"84b0196e","id":6728,"implemented":false,"kind":"function","modifiers":[],"name":"eip712Domain","nameLocation":"435:12:31","nodeType":"FunctionDefinition","parameters":{"id":6711,"nodeType":"ParameterList","parameters":[],"src":"447:2:31"},"returnParameters":{"id":6727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6713,"mutability":"mutable","name":"fields","nameLocation":"517:6:31","nodeType":"VariableDeclaration","scope":6728,"src":"510:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":6712,"name":"bytes1","nodeType":"ElementaryTypeName","src":"510:6:31","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"},{"constant":false,"id":6715,"mutability":"mutable","name":"name","nameLocation":"551:4:31","nodeType":"VariableDeclaration","scope":6728,"src":"537:18:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6714,"name":"string","nodeType":"ElementaryTypeName","src":"537:6:31","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":6717,"mutability":"mutable","name":"version","nameLocation":"583:7:31","nodeType":"VariableDeclaration","scope":6728,"src":"569:21:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6716,"name":"string","nodeType":"ElementaryTypeName","src":"569:6:31","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":6719,"mutability":"mutable","name":"chainId","nameLocation":"612:7:31","nodeType":"VariableDeclaration","scope":6728,"src":"604:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6718,"name":"uint256","nodeType":"ElementaryTypeName","src":"604:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6721,"mutability":"mutable","name":"verifyingContract","nameLocation":"641:17:31","nodeType":"VariableDeclaration","scope":6728,"src":"633:25:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6720,"name":"address","nodeType":"ElementaryTypeName","src":"633:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6723,"mutability":"mutable","name":"salt","nameLocation":"680:4:31","nodeType":"VariableDeclaration","scope":6728,"src":"672:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6722,"name":"bytes32","nodeType":"ElementaryTypeName","src":"672:7:31","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6726,"mutability":"mutable","name":"extensions","nameLocation":"715:10:31","nodeType":"VariableDeclaration","scope":6728,"src":"698:27:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6724,"name":"uint256","nodeType":"ElementaryTypeName","src":"698:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6725,"nodeType":"ArrayTypeName","src":"698:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"496:239:31"},"scope":6729,"src":"426:310:31","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6730,"src":"133:605:31","usedErrors":[],"usedEvents":[6709]}],"src":"107:632:31"},"id":31},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","exportedSymbols":{"IERC1155Errors":[6866],"IERC20Errors":[6771],"IERC721Errors":[6819]},"id":6867,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6731,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"112:24:32"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":6732,"nodeType":"StructuredDocumentation","src":"138:139:32","text":" @dev Standard ERC20 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens."},"fullyImplemented":true,"id":6771,"linearizedBaseContracts":[6771],"name":"IERC20Errors","nameLocation":"288:12:32","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6733,"nodeType":"StructuredDocumentation","src":"307:309:32","text":" @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer."},"errorSelector":"e450d38c","id":6741,"name":"ERC20InsufficientBalance","nameLocation":"627:24:32","nodeType":"ErrorDefinition","parameters":{"id":6740,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6735,"mutability":"mutable","name":"sender","nameLocation":"660:6:32","nodeType":"VariableDeclaration","scope":6741,"src":"652:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6734,"name":"address","nodeType":"ElementaryTypeName","src":"652:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6737,"mutability":"mutable","name":"balance","nameLocation":"676:7:32","nodeType":"VariableDeclaration","scope":6741,"src":"668:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6736,"name":"uint256","nodeType":"ElementaryTypeName","src":"668:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6739,"mutability":"mutable","name":"needed","nameLocation":"693:6:32","nodeType":"VariableDeclaration","scope":6741,"src":"685:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6738,"name":"uint256","nodeType":"ElementaryTypeName","src":"685:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"651:49:32"},"src":"621:80:32"},{"documentation":{"id":6742,"nodeType":"StructuredDocumentation","src":"707:152:32","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"96c6fd1e","id":6746,"name":"ERC20InvalidSender","nameLocation":"870:18:32","nodeType":"ErrorDefinition","parameters":{"id":6745,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6744,"mutability":"mutable","name":"sender","nameLocation":"897:6:32","nodeType":"VariableDeclaration","scope":6746,"src":"889:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6743,"name":"address","nodeType":"ElementaryTypeName","src":"889:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"888:16:32"},"src":"864:41:32"},{"documentation":{"id":6747,"nodeType":"StructuredDocumentation","src":"911:159:32","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"ec442f05","id":6751,"name":"ERC20InvalidReceiver","nameLocation":"1081:20:32","nodeType":"ErrorDefinition","parameters":{"id":6750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6749,"mutability":"mutable","name":"receiver","nameLocation":"1110:8:32","nodeType":"VariableDeclaration","scope":6751,"src":"1102:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6748,"name":"address","nodeType":"ElementaryTypeName","src":"1102:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1101:18:32"},"src":"1075:45:32"},{"documentation":{"id":6752,"nodeType":"StructuredDocumentation","src":"1126:345:32","text":" @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n @param spender Address that may be allowed to operate on tokens without being their owner.\n @param allowance Amount of tokens a `spender` is allowed to operate with.\n @param needed Minimum amount required to perform a transfer."},"errorSelector":"fb8f41b2","id":6760,"name":"ERC20InsufficientAllowance","nameLocation":"1482:26:32","nodeType":"ErrorDefinition","parameters":{"id":6759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6754,"mutability":"mutable","name":"spender","nameLocation":"1517:7:32","nodeType":"VariableDeclaration","scope":6760,"src":"1509:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6753,"name":"address","nodeType":"ElementaryTypeName","src":"1509:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6756,"mutability":"mutable","name":"allowance","nameLocation":"1534:9:32","nodeType":"VariableDeclaration","scope":6760,"src":"1526:17:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6755,"name":"uint256","nodeType":"ElementaryTypeName","src":"1526:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6758,"mutability":"mutable","name":"needed","nameLocation":"1553:6:32","nodeType":"VariableDeclaration","scope":6760,"src":"1545:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6757,"name":"uint256","nodeType":"ElementaryTypeName","src":"1545:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1508:52:32"},"src":"1476:85:32"},{"documentation":{"id":6761,"nodeType":"StructuredDocumentation","src":"1567:174:32","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"e602df05","id":6765,"name":"ERC20InvalidApprover","nameLocation":"1752:20:32","nodeType":"ErrorDefinition","parameters":{"id":6764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6763,"mutability":"mutable","name":"approver","nameLocation":"1781:8:32","nodeType":"VariableDeclaration","scope":6765,"src":"1773:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6762,"name":"address","nodeType":"ElementaryTypeName","src":"1773:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1772:18:32"},"src":"1746:45:32"},{"documentation":{"id":6766,"nodeType":"StructuredDocumentation","src":"1797:195:32","text":" @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n @param spender Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"94280d62","id":6770,"name":"ERC20InvalidSpender","nameLocation":"2003:19:32","nodeType":"ErrorDefinition","parameters":{"id":6769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6768,"mutability":"mutable","name":"spender","nameLocation":"2031:7:32","nodeType":"VariableDeclaration","scope":6770,"src":"2023:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6767,"name":"address","nodeType":"ElementaryTypeName","src":"2023:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2022:17:32"},"src":"1997:43:32"}],"scope":6867,"src":"278:1764:32","usedErrors":[6741,6746,6751,6760,6765,6770],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"IERC721Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":6772,"nodeType":"StructuredDocumentation","src":"2044:141:32","text":" @dev Standard ERC721 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens."},"fullyImplemented":true,"id":6819,"linearizedBaseContracts":[6819],"name":"IERC721Errors","nameLocation":"2196:13:32","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6773,"nodeType":"StructuredDocumentation","src":"2216:219:32","text":" @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.\n Used in balance queries.\n @param owner Address of the current owner of a token."},"errorSelector":"89c62b64","id":6777,"name":"ERC721InvalidOwner","nameLocation":"2446:18:32","nodeType":"ErrorDefinition","parameters":{"id":6776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6775,"mutability":"mutable","name":"owner","nameLocation":"2473:5:32","nodeType":"VariableDeclaration","scope":6777,"src":"2465:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6774,"name":"address","nodeType":"ElementaryTypeName","src":"2465:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2464:15:32"},"src":"2440:40:32"},{"documentation":{"id":6778,"nodeType":"StructuredDocumentation","src":"2486:132:32","text":" @dev Indicates a `tokenId` whose `owner` is the zero address.\n @param tokenId Identifier number of a token."},"errorSelector":"7e273289","id":6782,"name":"ERC721NonexistentToken","nameLocation":"2629:22:32","nodeType":"ErrorDefinition","parameters":{"id":6781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6780,"mutability":"mutable","name":"tokenId","nameLocation":"2660:7:32","nodeType":"VariableDeclaration","scope":6782,"src":"2652:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6779,"name":"uint256","nodeType":"ElementaryTypeName","src":"2652:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2651:17:32"},"src":"2623:46:32"},{"documentation":{"id":6783,"nodeType":"StructuredDocumentation","src":"2675:289:32","text":" @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param tokenId Identifier number of a token.\n @param owner Address of the current owner of a token."},"errorSelector":"64283d7b","id":6791,"name":"ERC721IncorrectOwner","nameLocation":"2975:20:32","nodeType":"ErrorDefinition","parameters":{"id":6790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6785,"mutability":"mutable","name":"sender","nameLocation":"3004:6:32","nodeType":"VariableDeclaration","scope":6791,"src":"2996:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6784,"name":"address","nodeType":"ElementaryTypeName","src":"2996:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6787,"mutability":"mutable","name":"tokenId","nameLocation":"3020:7:32","nodeType":"VariableDeclaration","scope":6791,"src":"3012:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6786,"name":"uint256","nodeType":"ElementaryTypeName","src":"3012:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6789,"mutability":"mutable","name":"owner","nameLocation":"3037:5:32","nodeType":"VariableDeclaration","scope":6791,"src":"3029:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6788,"name":"address","nodeType":"ElementaryTypeName","src":"3029:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2995:48:32"},"src":"2969:75:32"},{"documentation":{"id":6792,"nodeType":"StructuredDocumentation","src":"3050:152:32","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"73c6ac6e","id":6796,"name":"ERC721InvalidSender","nameLocation":"3213:19:32","nodeType":"ErrorDefinition","parameters":{"id":6795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6794,"mutability":"mutable","name":"sender","nameLocation":"3241:6:32","nodeType":"VariableDeclaration","scope":6796,"src":"3233:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6793,"name":"address","nodeType":"ElementaryTypeName","src":"3233:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3232:16:32"},"src":"3207:42:32"},{"documentation":{"id":6797,"nodeType":"StructuredDocumentation","src":"3255:159:32","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"64a0ae92","id":6801,"name":"ERC721InvalidReceiver","nameLocation":"3425:21:32","nodeType":"ErrorDefinition","parameters":{"id":6800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6799,"mutability":"mutable","name":"receiver","nameLocation":"3455:8:32","nodeType":"VariableDeclaration","scope":6801,"src":"3447:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6798,"name":"address","nodeType":"ElementaryTypeName","src":"3447:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3446:18:32"},"src":"3419:46:32"},{"documentation":{"id":6802,"nodeType":"StructuredDocumentation","src":"3471:247:32","text":" @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param tokenId Identifier number of a token."},"errorSelector":"177e802f","id":6808,"name":"ERC721InsufficientApproval","nameLocation":"3729:26:32","nodeType":"ErrorDefinition","parameters":{"id":6807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6804,"mutability":"mutable","name":"operator","nameLocation":"3764:8:32","nodeType":"VariableDeclaration","scope":6808,"src":"3756:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6803,"name":"address","nodeType":"ElementaryTypeName","src":"3756:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6806,"mutability":"mutable","name":"tokenId","nameLocation":"3782:7:32","nodeType":"VariableDeclaration","scope":6808,"src":"3774:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6805,"name":"uint256","nodeType":"ElementaryTypeName","src":"3774:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3755:35:32"},"src":"3723:68:32"},{"documentation":{"id":6809,"nodeType":"StructuredDocumentation","src":"3797:174:32","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"a9fbf51f","id":6813,"name":"ERC721InvalidApprover","nameLocation":"3982:21:32","nodeType":"ErrorDefinition","parameters":{"id":6812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6811,"mutability":"mutable","name":"approver","nameLocation":"4012:8:32","nodeType":"VariableDeclaration","scope":6813,"src":"4004:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6810,"name":"address","nodeType":"ElementaryTypeName","src":"4004:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4003:18:32"},"src":"3976:46:32"},{"documentation":{"id":6814,"nodeType":"StructuredDocumentation","src":"4028:197:32","text":" @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"5b08ba18","id":6818,"name":"ERC721InvalidOperator","nameLocation":"4236:21:32","nodeType":"ErrorDefinition","parameters":{"id":6817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6816,"mutability":"mutable","name":"operator","nameLocation":"4266:8:32","nodeType":"VariableDeclaration","scope":6818,"src":"4258:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6815,"name":"address","nodeType":"ElementaryTypeName","src":"4258:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4257:18:32"},"src":"4230:46:32"}],"scope":6867,"src":"2186:2092:32","usedErrors":[6777,6782,6791,6796,6801,6808,6813,6818],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1155Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":6820,"nodeType":"StructuredDocumentation","src":"4280:143:32","text":" @dev Standard ERC1155 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens."},"fullyImplemented":true,"id":6866,"linearizedBaseContracts":[6866],"name":"IERC1155Errors","nameLocation":"4434:14:32","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6821,"nodeType":"StructuredDocumentation","src":"4455:361:32","text":" @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer.\n @param tokenId Identifier number of a token."},"errorSelector":"03dee4c5","id":6831,"name":"ERC1155InsufficientBalance","nameLocation":"4827:26:32","nodeType":"ErrorDefinition","parameters":{"id":6830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6823,"mutability":"mutable","name":"sender","nameLocation":"4862:6:32","nodeType":"VariableDeclaration","scope":6831,"src":"4854:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6822,"name":"address","nodeType":"ElementaryTypeName","src":"4854:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6825,"mutability":"mutable","name":"balance","nameLocation":"4878:7:32","nodeType":"VariableDeclaration","scope":6831,"src":"4870:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6824,"name":"uint256","nodeType":"ElementaryTypeName","src":"4870:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6827,"mutability":"mutable","name":"needed","nameLocation":"4895:6:32","nodeType":"VariableDeclaration","scope":6831,"src":"4887:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6826,"name":"uint256","nodeType":"ElementaryTypeName","src":"4887:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6829,"mutability":"mutable","name":"tokenId","nameLocation":"4911:7:32","nodeType":"VariableDeclaration","scope":6831,"src":"4903:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6828,"name":"uint256","nodeType":"ElementaryTypeName","src":"4903:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4853:66:32"},"src":"4821:99:32"},{"documentation":{"id":6832,"nodeType":"StructuredDocumentation","src":"4926:152:32","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"01a83514","id":6836,"name":"ERC1155InvalidSender","nameLocation":"5089:20:32","nodeType":"ErrorDefinition","parameters":{"id":6835,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6834,"mutability":"mutable","name":"sender","nameLocation":"5118:6:32","nodeType":"VariableDeclaration","scope":6836,"src":"5110:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6833,"name":"address","nodeType":"ElementaryTypeName","src":"5110:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5109:16:32"},"src":"5083:43:32"},{"documentation":{"id":6837,"nodeType":"StructuredDocumentation","src":"5132:159:32","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"57f447ce","id":6841,"name":"ERC1155InvalidReceiver","nameLocation":"5302:22:32","nodeType":"ErrorDefinition","parameters":{"id":6840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6839,"mutability":"mutable","name":"receiver","nameLocation":"5333:8:32","nodeType":"VariableDeclaration","scope":6841,"src":"5325:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6838,"name":"address","nodeType":"ElementaryTypeName","src":"5325:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5324:18:32"},"src":"5296:47:32"},{"documentation":{"id":6842,"nodeType":"StructuredDocumentation","src":"5349:256:32","text":" @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param owner Address of the current owner of a token."},"errorSelector":"e237d922","id":6848,"name":"ERC1155MissingApprovalForAll","nameLocation":"5616:28:32","nodeType":"ErrorDefinition","parameters":{"id":6847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6844,"mutability":"mutable","name":"operator","nameLocation":"5653:8:32","nodeType":"VariableDeclaration","scope":6848,"src":"5645:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6843,"name":"address","nodeType":"ElementaryTypeName","src":"5645:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6846,"mutability":"mutable","name":"owner","nameLocation":"5671:5:32","nodeType":"VariableDeclaration","scope":6848,"src":"5663:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6845,"name":"address","nodeType":"ElementaryTypeName","src":"5663:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5644:33:32"},"src":"5610:68:32"},{"documentation":{"id":6849,"nodeType":"StructuredDocumentation","src":"5684:174:32","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"3e31884e","id":6853,"name":"ERC1155InvalidApprover","nameLocation":"5869:22:32","nodeType":"ErrorDefinition","parameters":{"id":6852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6851,"mutability":"mutable","name":"approver","nameLocation":"5900:8:32","nodeType":"VariableDeclaration","scope":6853,"src":"5892:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6850,"name":"address","nodeType":"ElementaryTypeName","src":"5892:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5891:18:32"},"src":"5863:47:32"},{"documentation":{"id":6854,"nodeType":"StructuredDocumentation","src":"5916:197:32","text":" @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"ced3e100","id":6858,"name":"ERC1155InvalidOperator","nameLocation":"6124:22:32","nodeType":"ErrorDefinition","parameters":{"id":6857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6856,"mutability":"mutable","name":"operator","nameLocation":"6155:8:32","nodeType":"VariableDeclaration","scope":6858,"src":"6147:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6855,"name":"address","nodeType":"ElementaryTypeName","src":"6147:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6146:18:32"},"src":"6118:47:32"},{"documentation":{"id":6859,"nodeType":"StructuredDocumentation","src":"6171:280:32","text":" @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n Used in batch transfers.\n @param idsLength Length of the array of token identifiers\n @param valuesLength Length of the array of token amounts"},"errorSelector":"5b059991","id":6865,"name":"ERC1155InvalidArrayLength","nameLocation":"6462:25:32","nodeType":"ErrorDefinition","parameters":{"id":6864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6861,"mutability":"mutable","name":"idsLength","nameLocation":"6496:9:32","nodeType":"VariableDeclaration","scope":6865,"src":"6488:17:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6860,"name":"uint256","nodeType":"ElementaryTypeName","src":"6488:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6863,"mutability":"mutable","name":"valuesLength","nameLocation":"6515:12:32","nodeType":"VariableDeclaration","scope":6865,"src":"6507:20:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6862,"name":"uint256","nodeType":"ElementaryTypeName","src":"6507:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6487:41:32"},"src":"6456:73:32"}],"scope":6867,"src":"4424:2107:32","usedErrors":[6831,6836,6841,6848,6853,6858,6865],"usedEvents":[]}],"src":"112:6420:32"},"id":32},"@openzeppelin/contracts/proxy/Proxy.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/proxy/Proxy.sol","exportedSymbols":{"Proxy":[6902]},"id":6903,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6868,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"99:24:33"},{"abstract":true,"baseContracts":[],"canonicalName":"Proxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":6869,"nodeType":"StructuredDocumentation","src":"125:598:33","text":" @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n be specified by overriding the virtual {_implementation} function.\n Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n different contract through the {_delegate} function.\n The success and return data of the delegated call will be returned back to the caller of the proxy."},"fullyImplemented":false,"id":6902,"linearizedBaseContracts":[6902],"name":"Proxy","nameLocation":"742:5:33","nodeType":"ContractDefinition","nodes":[{"body":{"id":6876,"nodeType":"Block","src":"1009:835:33","statements":[{"AST":{"nativeSrc":"1028:810:33","nodeType":"YulBlock","src":"1028:810:33","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1281:1:33","nodeType":"YulLiteral","src":"1281:1:33","type":"","value":"0"},{"kind":"number","nativeSrc":"1284:1:33","nodeType":"YulLiteral","src":"1284:1:33","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nativeSrc":"1287:12:33","nodeType":"YulIdentifier","src":"1287:12:33"},"nativeSrc":"1287:14:33","nodeType":"YulFunctionCall","src":"1287:14:33"}],"functionName":{"name":"calldatacopy","nativeSrc":"1268:12:33","nodeType":"YulIdentifier","src":"1268:12:33"},"nativeSrc":"1268:34:33","nodeType":"YulFunctionCall","src":"1268:34:33"},"nativeSrc":"1268:34:33","nodeType":"YulExpressionStatement","src":"1268:34:33"},{"nativeSrc":"1429:74:33","nodeType":"YulVariableDeclaration","src":"1429:74:33","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"1456:3:33","nodeType":"YulIdentifier","src":"1456:3:33"},"nativeSrc":"1456:5:33","nodeType":"YulFunctionCall","src":"1456:5:33"},{"name":"implementation","nativeSrc":"1463:14:33","nodeType":"YulIdentifier","src":"1463:14:33"},{"kind":"number","nativeSrc":"1479:1:33","nodeType":"YulLiteral","src":"1479:1:33","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nativeSrc":"1482:12:33","nodeType":"YulIdentifier","src":"1482:12:33"},"nativeSrc":"1482:14:33","nodeType":"YulFunctionCall","src":"1482:14:33"},{"kind":"number","nativeSrc":"1498:1:33","nodeType":"YulLiteral","src":"1498:1:33","type":"","value":"0"},{"kind":"number","nativeSrc":"1501:1:33","nodeType":"YulLiteral","src":"1501:1:33","type":"","value":"0"}],"functionName":{"name":"delegatecall","nativeSrc":"1443:12:33","nodeType":"YulIdentifier","src":"1443:12:33"},"nativeSrc":"1443:60:33","nodeType":"YulFunctionCall","src":"1443:60:33"},"variables":[{"name":"result","nativeSrc":"1433:6:33","nodeType":"YulTypedName","src":"1433:6:33","type":""}]},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1571:1:33","nodeType":"YulLiteral","src":"1571:1:33","type":"","value":"0"},{"kind":"number","nativeSrc":"1574:1:33","nodeType":"YulLiteral","src":"1574:1:33","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"1577:14:33","nodeType":"YulIdentifier","src":"1577:14:33"},"nativeSrc":"1577:16:33","nodeType":"YulFunctionCall","src":"1577:16:33"}],"functionName":{"name":"returndatacopy","nativeSrc":"1556:14:33","nodeType":"YulIdentifier","src":"1556:14:33"},"nativeSrc":"1556:38:33","nodeType":"YulFunctionCall","src":"1556:38:33"},"nativeSrc":"1556:38:33","nodeType":"YulExpressionStatement","src":"1556:38:33"},{"cases":[{"body":{"nativeSrc":"1689:59:33","nodeType":"YulBlock","src":"1689:59:33","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1714:1:33","nodeType":"YulLiteral","src":"1714:1:33","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"1717:14:33","nodeType":"YulIdentifier","src":"1717:14:33"},"nativeSrc":"1717:16:33","nodeType":"YulFunctionCall","src":"1717:16:33"}],"functionName":{"name":"revert","nativeSrc":"1707:6:33","nodeType":"YulIdentifier","src":"1707:6:33"},"nativeSrc":"1707:27:33","nodeType":"YulFunctionCall","src":"1707:27:33"},"nativeSrc":"1707:27:33","nodeType":"YulExpressionStatement","src":"1707:27:33"}]},"nativeSrc":"1682:66:33","nodeType":"YulCase","src":"1682:66:33","value":{"kind":"number","nativeSrc":"1687:1:33","nodeType":"YulLiteral","src":"1687:1:33","type":"","value":"0"}},{"body":{"nativeSrc":"1769:59:33","nodeType":"YulBlock","src":"1769:59:33","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1794:1:33","nodeType":"YulLiteral","src":"1794:1:33","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"1797:14:33","nodeType":"YulIdentifier","src":"1797:14:33"},"nativeSrc":"1797:16:33","nodeType":"YulFunctionCall","src":"1797:16:33"}],"functionName":{"name":"return","nativeSrc":"1787:6:33","nodeType":"YulIdentifier","src":"1787:6:33"},"nativeSrc":"1787:27:33","nodeType":"YulFunctionCall","src":"1787:27:33"},"nativeSrc":"1787:27:33","nodeType":"YulExpressionStatement","src":"1787:27:33"}]},"nativeSrc":"1761:67:33","nodeType":"YulCase","src":"1761:67:33","value":"default"}],"expression":{"name":"result","nativeSrc":"1615:6:33","nodeType":"YulIdentifier","src":"1615:6:33"},"nativeSrc":"1608:220:33","nodeType":"YulSwitch","src":"1608:220:33"}]},"evmVersion":"cancun","externalReferences":[{"declaration":6872,"isOffset":false,"isSlot":false,"src":"1463:14:33","valueSize":1}],"id":6875,"nodeType":"InlineAssembly","src":"1019:819:33"}]},"documentation":{"id":6870,"nodeType":"StructuredDocumentation","src":"754:190:33","text":" @dev Delegates the current call to `implementation`.\n This function does not return to its internal call site, it will return directly to the external caller."},"id":6877,"implemented":true,"kind":"function","modifiers":[],"name":"_delegate","nameLocation":"958:9:33","nodeType":"FunctionDefinition","parameters":{"id":6873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6872,"mutability":"mutable","name":"implementation","nameLocation":"976:14:33","nodeType":"VariableDeclaration","scope":6877,"src":"968:22:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6871,"name":"address","nodeType":"ElementaryTypeName","src":"968:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"967:24:33"},"returnParameters":{"id":6874,"nodeType":"ParameterList","parameters":[],"src":"1009:0:33"},"scope":6902,"src":"949:895:33","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"documentation":{"id":6878,"nodeType":"StructuredDocumentation","src":"1850:173:33","text":" @dev This is a virtual function that should be overridden so it returns the address to which the fallback\n function and {_fallback} should delegate."},"id":6883,"implemented":false,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"2037:15:33","nodeType":"FunctionDefinition","parameters":{"id":6879,"nodeType":"ParameterList","parameters":[],"src":"2052:2:33"},"returnParameters":{"id":6882,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6881,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6883,"src":"2086:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6880,"name":"address","nodeType":"ElementaryTypeName","src":"2086:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2085:9:33"},"scope":6902,"src":"2028:67:33","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":6892,"nodeType":"Block","src":"2361:45:33","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":6888,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6883,"src":"2381:15:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":6889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2381:17:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6887,"name":"_delegate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6877,"src":"2371:9:33","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":6890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2371:28:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6891,"nodeType":"ExpressionStatement","src":"2371:28:33"}]},"documentation":{"id":6884,"nodeType":"StructuredDocumentation","src":"2101:217:33","text":" @dev Delegates the current call to the address returned by `_implementation()`.\n This function does not return to its internal call site, it will return directly to the external caller."},"id":6893,"implemented":true,"kind":"function","modifiers":[],"name":"_fallback","nameLocation":"2332:9:33","nodeType":"FunctionDefinition","parameters":{"id":6885,"nodeType":"ParameterList","parameters":[],"src":"2341:2:33"},"returnParameters":{"id":6886,"nodeType":"ParameterList","parameters":[],"src":"2361:0:33"},"scope":6902,"src":"2323:83:33","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":6900,"nodeType":"Block","src":"2639:28:33","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6897,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6893,"src":"2649:9:33","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":6898,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2649:11:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6899,"nodeType":"ExpressionStatement","src":"2649:11:33"}]},"documentation":{"id":6894,"nodeType":"StructuredDocumentation","src":"2412:186:33","text":" @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n function in the contract matches the call data."},"id":6901,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":6895,"nodeType":"ParameterList","parameters":[],"src":"2611:2:33"},"returnParameters":{"id":6896,"nodeType":"ParameterList","parameters":[],"src":"2639:0:33"},"scope":6902,"src":"2603:64:33","stateMutability":"payable","virtual":true,"visibility":"external"}],"scope":6903,"src":"724:1945:33","usedErrors":[],"usedEvents":[]}],"src":"99:2571:33"},"id":33},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","exportedSymbols":{"IERC20":[6980]},"id":6981,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6904,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"106:24:34"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":6905,"nodeType":"StructuredDocumentation","src":"132:70:34","text":" @dev Interface of the ERC20 standard as defined in the EIP."},"fullyImplemented":false,"id":6980,"linearizedBaseContracts":[6980],"name":"IERC20","nameLocation":"213:6:34","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":6906,"nodeType":"StructuredDocumentation","src":"226:158:34","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":6914,"name":"Transfer","nameLocation":"395:8:34","nodeType":"EventDefinition","parameters":{"id":6913,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6908,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"420:4:34","nodeType":"VariableDeclaration","scope":6914,"src":"404:20:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6907,"name":"address","nodeType":"ElementaryTypeName","src":"404:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6910,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"442:2:34","nodeType":"VariableDeclaration","scope":6914,"src":"426:18:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6909,"name":"address","nodeType":"ElementaryTypeName","src":"426:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6912,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"454:5:34","nodeType":"VariableDeclaration","scope":6914,"src":"446:13:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6911,"name":"uint256","nodeType":"ElementaryTypeName","src":"446:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"403:57:34"},"src":"389:72:34"},{"anonymous":false,"documentation":{"id":6915,"nodeType":"StructuredDocumentation","src":"467:148:34","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":6923,"name":"Approval","nameLocation":"626:8:34","nodeType":"EventDefinition","parameters":{"id":6922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6917,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"651:5:34","nodeType":"VariableDeclaration","scope":6923,"src":"635:21:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6916,"name":"address","nodeType":"ElementaryTypeName","src":"635:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6919,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"674:7:34","nodeType":"VariableDeclaration","scope":6923,"src":"658:23:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6918,"name":"address","nodeType":"ElementaryTypeName","src":"658:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6921,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"691:5:34","nodeType":"VariableDeclaration","scope":6923,"src":"683:13:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6920,"name":"uint256","nodeType":"ElementaryTypeName","src":"683:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"634:63:34"},"src":"620:78:34"},{"documentation":{"id":6924,"nodeType":"StructuredDocumentation","src":"704:65:34","text":" @dev Returns the value of tokens in existence."},"functionSelector":"18160ddd","id":6929,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"783:11:34","nodeType":"FunctionDefinition","parameters":{"id":6925,"nodeType":"ParameterList","parameters":[],"src":"794:2:34"},"returnParameters":{"id":6928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6927,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6929,"src":"820:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6926,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"819:9:34"},"scope":6980,"src":"774:55:34","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6930,"nodeType":"StructuredDocumentation","src":"835:71:34","text":" @dev Returns the value of tokens owned by `account`."},"functionSelector":"70a08231","id":6937,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"920:9:34","nodeType":"FunctionDefinition","parameters":{"id":6933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6932,"mutability":"mutable","name":"account","nameLocation":"938:7:34","nodeType":"VariableDeclaration","scope":6937,"src":"930:15:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6931,"name":"address","nodeType":"ElementaryTypeName","src":"930:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"929:17:34"},"returnParameters":{"id":6936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6935,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6937,"src":"970:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6934,"name":"uint256","nodeType":"ElementaryTypeName","src":"970:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"969:9:34"},"scope":6980,"src":"911:68:34","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6938,"nodeType":"StructuredDocumentation","src":"985:213:34","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":6947,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1212:8:34","nodeType":"FunctionDefinition","parameters":{"id":6943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6940,"mutability":"mutable","name":"to","nameLocation":"1229:2:34","nodeType":"VariableDeclaration","scope":6947,"src":"1221:10:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6939,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6942,"mutability":"mutable","name":"value","nameLocation":"1241:5:34","nodeType":"VariableDeclaration","scope":6947,"src":"1233:13:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6941,"name":"uint256","nodeType":"ElementaryTypeName","src":"1233:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1220:27:34"},"returnParameters":{"id":6946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6945,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6947,"src":"1266:4:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6944,"name":"bool","nodeType":"ElementaryTypeName","src":"1266:4:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1265:6:34"},"scope":6980,"src":"1203:69:34","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6948,"nodeType":"StructuredDocumentation","src":"1278:264:34","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":6957,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1556:9:34","nodeType":"FunctionDefinition","parameters":{"id":6953,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6950,"mutability":"mutable","name":"owner","nameLocation":"1574:5:34","nodeType":"VariableDeclaration","scope":6957,"src":"1566:13:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6949,"name":"address","nodeType":"ElementaryTypeName","src":"1566:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6952,"mutability":"mutable","name":"spender","nameLocation":"1589:7:34","nodeType":"VariableDeclaration","scope":6957,"src":"1581:15:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6951,"name":"address","nodeType":"ElementaryTypeName","src":"1581:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1565:32:34"},"returnParameters":{"id":6956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6955,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6957,"src":"1621:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6954,"name":"uint256","nodeType":"ElementaryTypeName","src":"1621:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1620:9:34"},"scope":6980,"src":"1547:83:34","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6958,"nodeType":"StructuredDocumentation","src":"1636:667:34","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":6967,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2317:7:34","nodeType":"FunctionDefinition","parameters":{"id":6963,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6960,"mutability":"mutable","name":"spender","nameLocation":"2333:7:34","nodeType":"VariableDeclaration","scope":6967,"src":"2325:15:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6959,"name":"address","nodeType":"ElementaryTypeName","src":"2325:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6962,"mutability":"mutable","name":"value","nameLocation":"2350:5:34","nodeType":"VariableDeclaration","scope":6967,"src":"2342:13:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6961,"name":"uint256","nodeType":"ElementaryTypeName","src":"2342:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2324:32:34"},"returnParameters":{"id":6966,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6965,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6967,"src":"2375:4:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6964,"name":"bool","nodeType":"ElementaryTypeName","src":"2375:4:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2374:6:34"},"scope":6980,"src":"2308:73:34","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6968,"nodeType":"StructuredDocumentation","src":"2387:297:34","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":6979,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2698:12:34","nodeType":"FunctionDefinition","parameters":{"id":6975,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6970,"mutability":"mutable","name":"from","nameLocation":"2719:4:34","nodeType":"VariableDeclaration","scope":6979,"src":"2711:12:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6969,"name":"address","nodeType":"ElementaryTypeName","src":"2711:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6972,"mutability":"mutable","name":"to","nameLocation":"2733:2:34","nodeType":"VariableDeclaration","scope":6979,"src":"2725:10:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6971,"name":"address","nodeType":"ElementaryTypeName","src":"2725:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6974,"mutability":"mutable","name":"value","nameLocation":"2745:5:34","nodeType":"VariableDeclaration","scope":6979,"src":"2737:13:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6973,"name":"uint256","nodeType":"ElementaryTypeName","src":"2737:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2710:41:34"},"returnParameters":{"id":6978,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6977,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6979,"src":"2770:4:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6976,"name":"bool","nodeType":"ElementaryTypeName","src":"2770:4:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2769:6:34"},"scope":6980,"src":"2689:87:34","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":6981,"src":"203:2575:34","usedErrors":[],"usedEvents":[6914,6923]}],"src":"106:2673:34"},"id":34},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","exportedSymbols":{"IERC20":[6980],"IERC20Metadata":[7006]},"id":7007,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6982,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"125:24:35"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":6984,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7007,"sourceUnit":6981,"src":"151:37:35","symbolAliases":[{"foreign":{"id":6983,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"159:6:35","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6986,"name":"IERC20","nameLocations":["305:6:35"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"305:6:35"},"id":6987,"nodeType":"InheritanceSpecifier","src":"305:6:35"}],"canonicalName":"IERC20Metadata","contractDependencies":[],"contractKind":"interface","documentation":{"id":6985,"nodeType":"StructuredDocumentation","src":"190:86:35","text":" @dev Interface for the optional metadata functions from the ERC20 standard."},"fullyImplemented":false,"id":7006,"linearizedBaseContracts":[7006,6980],"name":"IERC20Metadata","nameLocation":"287:14:35","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6988,"nodeType":"StructuredDocumentation","src":"318:54:35","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":6993,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"386:4:35","nodeType":"FunctionDefinition","parameters":{"id":6989,"nodeType":"ParameterList","parameters":[],"src":"390:2:35"},"returnParameters":{"id":6992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6991,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6993,"src":"416:13:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6990,"name":"string","nodeType":"ElementaryTypeName","src":"416:6:35","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"415:15:35"},"scope":7006,"src":"377:54:35","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6994,"nodeType":"StructuredDocumentation","src":"437:56:35","text":" @dev Returns the symbol of the token."},"functionSelector":"95d89b41","id":6999,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"507:6:35","nodeType":"FunctionDefinition","parameters":{"id":6995,"nodeType":"ParameterList","parameters":[],"src":"513:2:35"},"returnParameters":{"id":6998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6997,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6999,"src":"539:13:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6996,"name":"string","nodeType":"ElementaryTypeName","src":"539:6:35","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"538:15:35"},"scope":7006,"src":"498:56:35","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7000,"nodeType":"StructuredDocumentation","src":"560:65:35","text":" @dev Returns the decimals places of the token."},"functionSelector":"313ce567","id":7005,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"639:8:35","nodeType":"FunctionDefinition","parameters":{"id":7001,"nodeType":"ParameterList","parameters":[],"src":"647:2:35"},"returnParameters":{"id":7004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7003,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7005,"src":"673:5:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7002,"name":"uint8","nodeType":"ElementaryTypeName","src":"673:5:35","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"672:7:35"},"scope":7006,"src":"630:50:35","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":7007,"src":"277:405:35","usedErrors":[],"usedEvents":[6914,6923]}],"src":"125:558:35"},"id":35},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","exportedSymbols":{"IERC20Permit":[7042]},"id":7043,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7008,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"123:24:36"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20Permit","contractDependencies":[],"contractKind":"interface","documentation":{"id":7009,"nodeType":"StructuredDocumentation","src":"149:1963:36","text":" @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n need to send a transaction, and thus is not required to hold Ether at all.\n ==== Security Considerations\n There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\n expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\n considered as an intention to spend the allowance in any specific way. The second is that because permits have\n built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\n take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\n generally recommended is:\n ```solidity\n function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\n try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\n doThing(..., value);\n }\n function doThing(..., uint256 value) public {\n token.safeTransferFrom(msg.sender, address(this), value);\n ...\n }\n ```\n Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\n `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\n {SafeERC20-safeTransferFrom}).\n Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\n contracts should have entry points that don't rely on permit."},"fullyImplemented":false,"id":7042,"linearizedBaseContracts":[7042],"name":"IERC20Permit","nameLocation":"2123:12:36","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7010,"nodeType":"StructuredDocumentation","src":"2142:850:36","text":" @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n given ``owner``'s signed approval.\n IMPORTANT: The same issues {IERC20-approve} has related to transaction\n ordering also apply here.\n Emits an {Approval} event.\n Requirements:\n - `spender` cannot be the zero address.\n - `deadline` must be a timestamp in the future.\n - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n over the EIP712-formatted function arguments.\n - the signature must use ``owner``'s current nonce (see {nonces}).\n For more information on the signature format, see the\n https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n section].\n CAUTION: See Security Considerations above."},"functionSelector":"d505accf","id":7027,"implemented":false,"kind":"function","modifiers":[],"name":"permit","nameLocation":"3006:6:36","nodeType":"FunctionDefinition","parameters":{"id":7025,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7012,"mutability":"mutable","name":"owner","nameLocation":"3030:5:36","nodeType":"VariableDeclaration","scope":7027,"src":"3022:13:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7011,"name":"address","nodeType":"ElementaryTypeName","src":"3022:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7014,"mutability":"mutable","name":"spender","nameLocation":"3053:7:36","nodeType":"VariableDeclaration","scope":7027,"src":"3045:15:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7013,"name":"address","nodeType":"ElementaryTypeName","src":"3045:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7016,"mutability":"mutable","name":"value","nameLocation":"3078:5:36","nodeType":"VariableDeclaration","scope":7027,"src":"3070:13:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7015,"name":"uint256","nodeType":"ElementaryTypeName","src":"3070:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7018,"mutability":"mutable","name":"deadline","nameLocation":"3101:8:36","nodeType":"VariableDeclaration","scope":7027,"src":"3093:16:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7017,"name":"uint256","nodeType":"ElementaryTypeName","src":"3093:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7020,"mutability":"mutable","name":"v","nameLocation":"3125:1:36","nodeType":"VariableDeclaration","scope":7027,"src":"3119:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7019,"name":"uint8","nodeType":"ElementaryTypeName","src":"3119:5:36","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":7022,"mutability":"mutable","name":"r","nameLocation":"3144:1:36","nodeType":"VariableDeclaration","scope":7027,"src":"3136:9:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7021,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3136:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7024,"mutability":"mutable","name":"s","nameLocation":"3163:1:36","nodeType":"VariableDeclaration","scope":7027,"src":"3155:9:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7023,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3155:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3012:158:36"},"returnParameters":{"id":7026,"nodeType":"ParameterList","parameters":[],"src":"3179:0:36"},"scope":7042,"src":"2997:183:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":7028,"nodeType":"StructuredDocumentation","src":"3186:294:36","text":" @dev Returns the current nonce for `owner`. This value must be\n included whenever a signature is generated for {permit}.\n Every successful call to {permit} increases ``owner``'s nonce by one. This\n prevents a signature from being used multiple times."},"functionSelector":"7ecebe00","id":7035,"implemented":false,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"3494:6:36","nodeType":"FunctionDefinition","parameters":{"id":7031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7030,"mutability":"mutable","name":"owner","nameLocation":"3509:5:36","nodeType":"VariableDeclaration","scope":7035,"src":"3501:13:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7029,"name":"address","nodeType":"ElementaryTypeName","src":"3501:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3500:15:36"},"returnParameters":{"id":7034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7033,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7035,"src":"3539:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7032,"name":"uint256","nodeType":"ElementaryTypeName","src":"3539:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3538:9:36"},"scope":7042,"src":"3485:63:36","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7036,"nodeType":"StructuredDocumentation","src":"3554:128:36","text":" @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"functionSelector":"3644e515","id":7041,"implemented":false,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"3749:16:36","nodeType":"FunctionDefinition","parameters":{"id":7037,"nodeType":"ParameterList","parameters":[],"src":"3765:2:36"},"returnParameters":{"id":7040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7039,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7041,"src":"3791:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7038,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3791:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3790:9:36"},"scope":7042,"src":"3740:60:36","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":7043,"src":"2113:1689:36","usedErrors":[],"usedEvents":[]}],"src":"123:3680:36"},"id":36},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","exportedSymbols":{"Address":[7585],"IERC20":[6980],"IERC20Permit":[7042],"SafeERC20":[7332]},"id":7333,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7044,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"115:24:37"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":7046,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7333,"sourceUnit":6981,"src":"141:37:37","symbolAliases":[{"foreign":{"id":7045,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"149:6:37","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","file":"../extensions/IERC20Permit.sol","id":7048,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7333,"sourceUnit":7043,"src":"179:60:37","symbolAliases":[{"foreign":{"id":7047,"name":"IERC20Permit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7042,"src":"187:12:37","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"../../../utils/Address.sol","id":7050,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7333,"sourceUnit":7586,"src":"240:51:37","symbolAliases":[{"foreign":{"id":7049,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7585,"src":"248:7:37","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":7051,"nodeType":"StructuredDocumentation","src":"293:457:37","text":" @title SafeERC20\n @dev Wrappers around ERC20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc."},"fullyImplemented":true,"id":7332,"linearizedBaseContracts":[7332],"name":"SafeERC20","nameLocation":"759:9:37","nodeType":"ContractDefinition","nodes":[{"global":false,"id":7054,"libraryName":{"id":7052,"name":"Address","nameLocations":["781:7:37"],"nodeType":"IdentifierPath","referencedDeclaration":7585,"src":"781:7:37"},"nodeType":"UsingForDirective","src":"775:26:37","typeName":{"id":7053,"name":"address","nodeType":"ElementaryTypeName","src":"793:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"documentation":{"id":7055,"nodeType":"StructuredDocumentation","src":"807:64:37","text":" @dev An operation with an ERC20 token failed."},"errorSelector":"5274afe7","id":7059,"name":"SafeERC20FailedOperation","nameLocation":"882:24:37","nodeType":"ErrorDefinition","parameters":{"id":7058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7057,"mutability":"mutable","name":"token","nameLocation":"915:5:37","nodeType":"VariableDeclaration","scope":7059,"src":"907:13:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7056,"name":"address","nodeType":"ElementaryTypeName","src":"907:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"906:15:37"},"src":"876:46:37"},{"documentation":{"id":7060,"nodeType":"StructuredDocumentation","src":"928:71:37","text":" @dev Indicates a failed `decreaseAllowance` request."},"errorSelector":"e570110f","id":7068,"name":"SafeERC20FailedDecreaseAllowance","nameLocation":"1010:32:37","nodeType":"ErrorDefinition","parameters":{"id":7067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7062,"mutability":"mutable","name":"spender","nameLocation":"1051:7:37","nodeType":"VariableDeclaration","scope":7068,"src":"1043:15:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7061,"name":"address","nodeType":"ElementaryTypeName","src":"1043:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7064,"mutability":"mutable","name":"currentAllowance","nameLocation":"1068:16:37","nodeType":"VariableDeclaration","scope":7068,"src":"1060:24:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7063,"name":"uint256","nodeType":"ElementaryTypeName","src":"1060:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7066,"mutability":"mutable","name":"requestedDecrease","nameLocation":"1094:17:37","nodeType":"VariableDeclaration","scope":7068,"src":"1086:25:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7065,"name":"uint256","nodeType":"ElementaryTypeName","src":"1086:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1042:70:37"},"src":"1004:109:37"},{"body":{"id":7091,"nodeType":"Block","src":"1375:88:37","statements":[{"expression":{"arguments":[{"id":7080,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7072,"src":"1405:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":7083,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7072,"src":"1427:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":7084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1433:8:37","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":6947,"src":"1427:14:37","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":7085,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7074,"src":"1444:2:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7086,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7076,"src":"1448:5:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7087,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1443:11:37","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":7081,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1412:3:37","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":7082,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1416:10:37","memberName":"encodeCall","nodeType":"MemberAccess","src":"1412:14:37","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":7088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1412:43:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7079,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7282,"src":"1385:19:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":7089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1385:71:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7090,"nodeType":"ExpressionStatement","src":"1385:71:37"}]},"documentation":{"id":7069,"nodeType":"StructuredDocumentation","src":"1119:179:37","text":" @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":7092,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"1312:12:37","nodeType":"FunctionDefinition","parameters":{"id":7077,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7072,"mutability":"mutable","name":"token","nameLocation":"1332:5:37","nodeType":"VariableDeclaration","scope":7092,"src":"1325:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":7071,"nodeType":"UserDefinedTypeName","pathNode":{"id":7070,"name":"IERC20","nameLocations":["1325:6:37"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"1325:6:37"},"referencedDeclaration":6980,"src":"1325:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":7074,"mutability":"mutable","name":"to","nameLocation":"1347:2:37","nodeType":"VariableDeclaration","scope":7092,"src":"1339:10:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7073,"name":"address","nodeType":"ElementaryTypeName","src":"1339:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7076,"mutability":"mutable","name":"value","nameLocation":"1359:5:37","nodeType":"VariableDeclaration","scope":7092,"src":"1351:13:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7075,"name":"uint256","nodeType":"ElementaryTypeName","src":"1351:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1324:41:37"},"returnParameters":{"id":7078,"nodeType":"ParameterList","parameters":[],"src":"1375:0:37"},"scope":7332,"src":"1303:160:37","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7118,"nodeType":"Block","src":"1792:98:37","statements":[{"expression":{"arguments":[{"id":7106,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7096,"src":"1822:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":7109,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7096,"src":"1844:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":7110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1850:12:37","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":6979,"src":"1844:18:37","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},{"components":[{"id":7111,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7098,"src":"1865:4:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7112,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7100,"src":"1871:2:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7113,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7102,"src":"1875:5:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7114,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1864:17:37","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}],"expression":{"id":7107,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1829:3:37","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":7108,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1833:10:37","memberName":"encodeCall","nodeType":"MemberAccess","src":"1829:14:37","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":7115,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1829:53:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7105,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7282,"src":"1802:19:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":7116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1802:81:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7117,"nodeType":"ExpressionStatement","src":"1802:81:37"}]},"documentation":{"id":7093,"nodeType":"StructuredDocumentation","src":"1469:228:37","text":" @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n calling contract. If `token` returns no value, non-reverting calls are assumed to be successful."},"id":7119,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"1711:16:37","nodeType":"FunctionDefinition","parameters":{"id":7103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7096,"mutability":"mutable","name":"token","nameLocation":"1735:5:37","nodeType":"VariableDeclaration","scope":7119,"src":"1728:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":7095,"nodeType":"UserDefinedTypeName","pathNode":{"id":7094,"name":"IERC20","nameLocations":["1728:6:37"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"1728:6:37"},"referencedDeclaration":6980,"src":"1728:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":7098,"mutability":"mutable","name":"from","nameLocation":"1750:4:37","nodeType":"VariableDeclaration","scope":7119,"src":"1742:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7097,"name":"address","nodeType":"ElementaryTypeName","src":"1742:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7100,"mutability":"mutable","name":"to","nameLocation":"1764:2:37","nodeType":"VariableDeclaration","scope":7119,"src":"1756:10:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7099,"name":"address","nodeType":"ElementaryTypeName","src":"1756:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7102,"mutability":"mutable","name":"value","nameLocation":"1776:5:37","nodeType":"VariableDeclaration","scope":7119,"src":"1768:13:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7101,"name":"uint256","nodeType":"ElementaryTypeName","src":"1768:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1727:55:37"},"returnParameters":{"id":7104,"nodeType":"ParameterList","parameters":[],"src":"1792:0:37"},"scope":7332,"src":"1702:188:37","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7149,"nodeType":"Block","src":"2167:139:37","statements":[{"assignments":[7131],"declarations":[{"constant":false,"id":7131,"mutability":"mutable","name":"oldAllowance","nameLocation":"2185:12:37","nodeType":"VariableDeclaration","scope":7149,"src":"2177:20:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7130,"name":"uint256","nodeType":"ElementaryTypeName","src":"2177:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7140,"initialValue":{"arguments":[{"arguments":[{"id":7136,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2224:4:37","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$7332","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$7332","typeString":"library SafeERC20"}],"id":7135,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2216:7:37","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7134,"name":"address","nodeType":"ElementaryTypeName","src":"2216:7:37","typeDescriptions":{}}},"id":7137,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2216:13:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7138,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7125,"src":"2231:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7132,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7123,"src":"2200:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":7133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2206:9:37","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":6957,"src":"2200:15:37","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":7139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2200:39:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2177:62:37"},{"expression":{"arguments":[{"id":7142,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7123,"src":"2262:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":7143,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7125,"src":"2269:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7144,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7131,"src":"2278:12:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":7145,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7127,"src":"2293:5:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2278:20:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7141,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7240,"src":"2249:12:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":7147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2249:50:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7148,"nodeType":"ExpressionStatement","src":"2249:50:37"}]},"documentation":{"id":7120,"nodeType":"StructuredDocumentation","src":"1896:180:37","text":" @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":7150,"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nameLocation":"2090:21:37","nodeType":"FunctionDefinition","parameters":{"id":7128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7123,"mutability":"mutable","name":"token","nameLocation":"2119:5:37","nodeType":"VariableDeclaration","scope":7150,"src":"2112:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":7122,"nodeType":"UserDefinedTypeName","pathNode":{"id":7121,"name":"IERC20","nameLocations":["2112:6:37"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"2112:6:37"},"referencedDeclaration":6980,"src":"2112:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":7125,"mutability":"mutable","name":"spender","nameLocation":"2134:7:37","nodeType":"VariableDeclaration","scope":7150,"src":"2126:15:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7124,"name":"address","nodeType":"ElementaryTypeName","src":"2126:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7127,"mutability":"mutable","name":"value","nameLocation":"2151:5:37","nodeType":"VariableDeclaration","scope":7150,"src":"2143:13:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7126,"name":"uint256","nodeType":"ElementaryTypeName","src":"2143:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2111:46:37"},"returnParameters":{"id":7129,"nodeType":"ParameterList","parameters":[],"src":"2167:0:37"},"scope":7332,"src":"2081:225:37","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7192,"nodeType":"Block","src":"2607:370:37","statements":[{"id":7191,"nodeType":"UncheckedBlock","src":"2617:354:37","statements":[{"assignments":[7162],"declarations":[{"constant":false,"id":7162,"mutability":"mutable","name":"currentAllowance","nameLocation":"2649:16:37","nodeType":"VariableDeclaration","scope":7191,"src":"2641:24:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7161,"name":"uint256","nodeType":"ElementaryTypeName","src":"2641:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7171,"initialValue":{"arguments":[{"arguments":[{"id":7167,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2692:4:37","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$7332","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$7332","typeString":"library SafeERC20"}],"id":7166,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2684:7:37","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7165,"name":"address","nodeType":"ElementaryTypeName","src":"2684:7:37","typeDescriptions":{}}},"id":7168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2684:13:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7169,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7156,"src":"2699:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7163,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7154,"src":"2668:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":7164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2674:9:37","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":6957,"src":"2668:15:37","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":7170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2668:39:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2641:66:37"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7172,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7162,"src":"2725:16:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7173,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7158,"src":"2744:17:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2725:36:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7182,"nodeType":"IfStatement","src":"2721:160:37","trueBody":{"id":7181,"nodeType":"Block","src":"2763:118:37","statements":[{"errorCall":{"arguments":[{"id":7176,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7156,"src":"2821:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7177,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7162,"src":"2830:16:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7178,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7158,"src":"2848:17:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7175,"name":"SafeERC20FailedDecreaseAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7068,"src":"2788:32:37","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":7179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2788:78:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7180,"nodeType":"RevertStatement","src":"2781:85:37"}]}},{"expression":{"arguments":[{"id":7184,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7154,"src":"2907:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":7185,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7156,"src":"2914:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7186,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7162,"src":"2923:16:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":7187,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7158,"src":"2942:17:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2923:36:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7183,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7240,"src":"2894:12:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":7189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2894:66:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7190,"nodeType":"ExpressionStatement","src":"2894:66:37"}]}]},"documentation":{"id":7151,"nodeType":"StructuredDocumentation","src":"2312:192:37","text":" @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n value, non-reverting calls are assumed to be successful."},"id":7193,"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nameLocation":"2518:21:37","nodeType":"FunctionDefinition","parameters":{"id":7159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7154,"mutability":"mutable","name":"token","nameLocation":"2547:5:37","nodeType":"VariableDeclaration","scope":7193,"src":"2540:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":7153,"nodeType":"UserDefinedTypeName","pathNode":{"id":7152,"name":"IERC20","nameLocations":["2540:6:37"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"2540:6:37"},"referencedDeclaration":6980,"src":"2540:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":7156,"mutability":"mutable","name":"spender","nameLocation":"2562:7:37","nodeType":"VariableDeclaration","scope":7193,"src":"2554:15:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7155,"name":"address","nodeType":"ElementaryTypeName","src":"2554:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7158,"mutability":"mutable","name":"requestedDecrease","nameLocation":"2579:17:37","nodeType":"VariableDeclaration","scope":7193,"src":"2571:25:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7157,"name":"uint256","nodeType":"ElementaryTypeName","src":"2571:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2539:58:37"},"returnParameters":{"id":7160,"nodeType":"ParameterList","parameters":[],"src":"2607:0:37"},"scope":7332,"src":"2509:468:37","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7239,"nodeType":"Block","src":"3373:303:37","statements":[{"assignments":[7205],"declarations":[{"constant":false,"id":7205,"mutability":"mutable","name":"approvalCall","nameLocation":"3396:12:37","nodeType":"VariableDeclaration","scope":7239,"src":"3383:25:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7204,"name":"bytes","nodeType":"ElementaryTypeName","src":"3383:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":7214,"initialValue":{"arguments":[{"expression":{"id":7208,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7197,"src":"3426:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":7209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3432:7:37","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":6967,"src":"3426:13:37","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":7210,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7199,"src":"3442:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7211,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7201,"src":"3451:5:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7212,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3441:16:37","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":7206,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3411:3:37","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":7207,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3415:10:37","memberName":"encodeCall","nodeType":"MemberAccess","src":"3411:14:37","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":7213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3411:47:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3383:75:37"},{"condition":{"id":7219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3473:45:37","subExpression":{"arguments":[{"id":7216,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7197,"src":"3498:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":7217,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7205,"src":"3505:12:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7215,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7331,"src":"3474:23:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":7218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3474:44:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7238,"nodeType":"IfStatement","src":"3469:201:37","trueBody":{"id":7237,"nodeType":"Block","src":"3520:150:37","statements":[{"expression":{"arguments":[{"id":7221,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7197,"src":"3554:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":7224,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7197,"src":"3576:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":7225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3582:7:37","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":6967,"src":"3576:13:37","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":7226,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7199,"src":"3592:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":7227,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3601:1:37","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":7228,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3591:12:37","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}],"expression":{"id":7222,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3561:3:37","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":7223,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3565:10:37","memberName":"encodeCall","nodeType":"MemberAccess","src":"3561:14:37","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":7229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3561:43:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7220,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7282,"src":"3534:19:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":7230,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3534:71:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7231,"nodeType":"ExpressionStatement","src":"3534:71:37"},{"expression":{"arguments":[{"id":7233,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7197,"src":"3639:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":7234,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7205,"src":"3646:12:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7232,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7282,"src":"3619:19:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":7235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3619:40:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7236,"nodeType":"ExpressionStatement","src":"3619:40:37"}]}}]},"documentation":{"id":7194,"nodeType":"StructuredDocumentation","src":"2983:308:37","text":" @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n to be set to zero before setting it to a non-zero value, such as USDT."},"id":7240,"implemented":true,"kind":"function","modifiers":[],"name":"forceApprove","nameLocation":"3305:12:37","nodeType":"FunctionDefinition","parameters":{"id":7202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7197,"mutability":"mutable","name":"token","nameLocation":"3325:5:37","nodeType":"VariableDeclaration","scope":7240,"src":"3318:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":7196,"nodeType":"UserDefinedTypeName","pathNode":{"id":7195,"name":"IERC20","nameLocations":["3318:6:37"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"3318:6:37"},"referencedDeclaration":6980,"src":"3318:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":7199,"mutability":"mutable","name":"spender","nameLocation":"3340:7:37","nodeType":"VariableDeclaration","scope":7240,"src":"3332:15:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7198,"name":"address","nodeType":"ElementaryTypeName","src":"3332:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7201,"mutability":"mutable","name":"value","nameLocation":"3357:5:37","nodeType":"VariableDeclaration","scope":7240,"src":"3349:13:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7200,"name":"uint256","nodeType":"ElementaryTypeName","src":"3349:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3317:46:37"},"returnParameters":{"id":7203,"nodeType":"ParameterList","parameters":[],"src":"3373:0:37"},"scope":7332,"src":"3296:380:37","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7281,"nodeType":"Block","src":"4129:559:37","statements":[{"assignments":[7250],"declarations":[{"constant":false,"id":7250,"mutability":"mutable","name":"returndata","nameLocation":"4491:10:37","nodeType":"VariableDeclaration","scope":7281,"src":"4478:23:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7249,"name":"bytes","nodeType":"ElementaryTypeName","src":"4478:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":7258,"initialValue":{"arguments":[{"id":7256,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7246,"src":"4532:4:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":7253,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7244,"src":"4512:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}],"id":7252,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4504:7:37","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7251,"name":"address","nodeType":"ElementaryTypeName","src":"4504:7:37","typeDescriptions":{}}},"id":7254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4504:14:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4519:12:37","memberName":"functionCall","nodeType":"MemberAccess","referencedDeclaration":7406,"src":"4504:27:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$attached_to$_t_address_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":7257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4504:33:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4478:59:37"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7259,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7250,"src":"4551:10:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4562:6:37","memberName":"length","nodeType":"MemberAccess","src":"4551:17:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":7261,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4572:1:37","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4551:22:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":7270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4577:31:37","subExpression":{"arguments":[{"id":7265,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7250,"src":"4589:10:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":7267,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4602:4:37","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":7266,"name":"bool","nodeType":"ElementaryTypeName","src":"4602:4:37","typeDescriptions":{}}}],"id":7268,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4601:6:37","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":7263,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4578:3:37","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":7264,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4582:6:37","memberName":"decode","nodeType":"MemberAccess","src":"4578:10:37","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":7269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4578:30:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4551:57:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7280,"nodeType":"IfStatement","src":"4547:135:37","trueBody":{"id":7279,"nodeType":"Block","src":"4610:72:37","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":7275,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7244,"src":"4664:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}],"id":7274,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4656:7:37","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7273,"name":"address","nodeType":"ElementaryTypeName","src":"4656:7:37","typeDescriptions":{}}},"id":7276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4656:14:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7272,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7059,"src":"4631:24:37","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":7277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4631:40:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7278,"nodeType":"RevertStatement","src":"4624:47:37"}]}}]},"documentation":{"id":7241,"nodeType":"StructuredDocumentation","src":"3682:372:37","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants)."},"id":7282,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturn","nameLocation":"4068:19:37","nodeType":"FunctionDefinition","parameters":{"id":7247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7244,"mutability":"mutable","name":"token","nameLocation":"4095:5:37","nodeType":"VariableDeclaration","scope":7282,"src":"4088:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":7243,"nodeType":"UserDefinedTypeName","pathNode":{"id":7242,"name":"IERC20","nameLocations":["4088:6:37"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"4088:6:37"},"referencedDeclaration":6980,"src":"4088:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":7246,"mutability":"mutable","name":"data","nameLocation":"4115:4:37","nodeType":"VariableDeclaration","scope":7282,"src":"4102:17:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7245,"name":"bytes","nodeType":"ElementaryTypeName","src":"4102:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4087:33:37"},"returnParameters":{"id":7248,"nodeType":"ParameterList","parameters":[],"src":"4129:0:37"},"scope":7332,"src":"4059:629:37","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":7330,"nodeType":"Block","src":"5278:489:37","statements":[{"assignments":[7294,7296],"declarations":[{"constant":false,"id":7294,"mutability":"mutable","name":"success","nameLocation":"5579:7:37","nodeType":"VariableDeclaration","scope":7330,"src":"5574:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7293,"name":"bool","nodeType":"ElementaryTypeName","src":"5574:4:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7296,"mutability":"mutable","name":"returndata","nameLocation":"5601:10:37","nodeType":"VariableDeclaration","scope":7330,"src":"5588:23:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7295,"name":"bytes","nodeType":"ElementaryTypeName","src":"5588:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":7304,"initialValue":{"arguments":[{"id":7302,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7288,"src":"5635:4:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":7299,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7286,"src":"5623:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}],"id":7298,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5615:7:37","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7297,"name":"address","nodeType":"ElementaryTypeName","src":"5615:7:37","typeDescriptions":{}}},"id":7300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5615:14:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5630:4:37","memberName":"call","nodeType":"MemberAccess","src":"5615:19:37","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":7303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5615:25:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5573:67:37"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7305,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7294,"src":"5657:7:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7306,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7296,"src":"5669:10:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5680:6:37","memberName":"length","nodeType":"MemberAccess","src":"5669:17:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7308,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5690:1:37","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5669:22:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":7312,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7296,"src":"5706:10:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":7314,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5719:4:37","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":7313,"name":"bool","nodeType":"ElementaryTypeName","src":"5719:4:37","typeDescriptions":{}}}],"id":7315,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5718:6:37","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":7310,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5695:3:37","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":7311,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5699:6:37","memberName":"decode","nodeType":"MemberAccess","src":"5695:10:37","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":7316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5695:30:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5669:56:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":7318,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5668:58:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5657:69:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":7322,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7286,"src":"5738:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}],"id":7321,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5730:7:37","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7320,"name":"address","nodeType":"ElementaryTypeName","src":"5730:7:37","typeDescriptions":{}}},"id":7323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5730:14:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5745:4:37","memberName":"code","nodeType":"MemberAccess","src":"5730:19:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5750:6:37","memberName":"length","nodeType":"MemberAccess","src":"5730:26:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":7326,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5759:1:37","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5730:30:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5657:103:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7292,"id":7329,"nodeType":"Return","src":"5650:110:37"}]},"documentation":{"id":7283,"nodeType":"StructuredDocumentation","src":"4694:490:37","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead."},"id":7331,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturnBool","nameLocation":"5198:23:37","nodeType":"FunctionDefinition","parameters":{"id":7289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7286,"mutability":"mutable","name":"token","nameLocation":"5229:5:37","nodeType":"VariableDeclaration","scope":7331,"src":"5222:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":7285,"nodeType":"UserDefinedTypeName","pathNode":{"id":7284,"name":"IERC20","nameLocations":["5222:6:37"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"5222:6:37"},"referencedDeclaration":6980,"src":"5222:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":7288,"mutability":"mutable","name":"data","nameLocation":"5249:4:37","nodeType":"VariableDeclaration","scope":7331,"src":"5236:17:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7287,"name":"bytes","nodeType":"ElementaryTypeName","src":"5236:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5221:33:37"},"returnParameters":{"id":7292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7291,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7331,"src":"5272:4:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7290,"name":"bool","nodeType":"ElementaryTypeName","src":"5272:4:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5271:6:37"},"scope":7332,"src":"5189:578:37","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":7333,"src":"751:5018:37","usedErrors":[7059,7068],"usedEvents":[]}],"src":"115:5655:37"},"id":37},"@openzeppelin/contracts/utils/Address.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","exportedSymbols":{"Address":[7585]},"id":7586,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7334,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:38"},{"abstract":false,"baseContracts":[],"canonicalName":"Address","contractDependencies":[],"contractKind":"library","documentation":{"id":7335,"nodeType":"StructuredDocumentation","src":"127:67:38","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":7585,"linearizedBaseContracts":[7585],"name":"Address","nameLocation":"203:7:38","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7336,"nodeType":"StructuredDocumentation","src":"217:94:38","text":" @dev The ETH balance of the account is not enough to perform the operation."},"errorSelector":"cd786059","id":7340,"name":"AddressInsufficientBalance","nameLocation":"322:26:38","nodeType":"ErrorDefinition","parameters":{"id":7339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7338,"mutability":"mutable","name":"account","nameLocation":"357:7:38","nodeType":"VariableDeclaration","scope":7340,"src":"349:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7337,"name":"address","nodeType":"ElementaryTypeName","src":"349:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"348:17:38"},"src":"316:50:38"},{"documentation":{"id":7341,"nodeType":"StructuredDocumentation","src":"372:75:38","text":" @dev There's no code at `target` (it is not a contract)."},"errorSelector":"9996b315","id":7345,"name":"AddressEmptyCode","nameLocation":"458:16:38","nodeType":"ErrorDefinition","parameters":{"id":7344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7343,"mutability":"mutable","name":"target","nameLocation":"483:6:38","nodeType":"VariableDeclaration","scope":7345,"src":"475:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7342,"name":"address","nodeType":"ElementaryTypeName","src":"475:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"474:16:38"},"src":"452:39:38"},{"documentation":{"id":7346,"nodeType":"StructuredDocumentation","src":"497:89:38","text":" @dev A call to an address target failed. The target may have reverted."},"errorSelector":"1425ea42","id":7348,"name":"FailedInnerCall","nameLocation":"597:15:38","nodeType":"ErrorDefinition","parameters":{"id":7347,"nodeType":"ParameterList","parameters":[],"src":"612:2:38"},"src":"591:24:38"},{"body":{"id":7388,"nodeType":"Block","src":"1602:260:38","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":7358,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1624:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$7585","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$7585","typeString":"library Address"}],"id":7357,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1616:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7356,"name":"address","nodeType":"ElementaryTypeName","src":"1616:7:38","typeDescriptions":{}}},"id":7359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1616:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1630:7:38","memberName":"balance","nodeType":"MemberAccess","src":"1616:21:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7361,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7353,"src":"1640:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1616:30:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7371,"nodeType":"IfStatement","src":"1612:109:38","trueBody":{"id":7370,"nodeType":"Block","src":"1648:73:38","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":7366,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1704:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$7585","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$7585","typeString":"library Address"}],"id":7365,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1696:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7364,"name":"address","nodeType":"ElementaryTypeName","src":"1696:7:38","typeDescriptions":{}}},"id":7367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1696:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7363,"name":"AddressInsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7340,"src":"1669:26:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":7368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1669:41:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7369,"nodeType":"RevertStatement","src":"1662:48:38"}]}},{"assignments":[7373,null],"declarations":[{"constant":false,"id":7373,"mutability":"mutable","name":"success","nameLocation":"1737:7:38","nodeType":"VariableDeclaration","scope":7388,"src":"1732:12:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7372,"name":"bool","nodeType":"ElementaryTypeName","src":"1732:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":7380,"initialValue":{"arguments":[{"hexValue":"","id":7378,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1780:2:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":7374,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7351,"src":"1750:9:38","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":7375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1760:4:38","memberName":"call","nodeType":"MemberAccess","src":"1750:14:38","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":7377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":7376,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7353,"src":"1772:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"1750:29:38","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":7379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1750:33:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1731:52:38"},{"condition":{"id":7382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1797:8:38","subExpression":{"id":7381,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7373,"src":"1798:7:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7387,"nodeType":"IfStatement","src":"1793:63:38","trueBody":{"id":7386,"nodeType":"Block","src":"1807:49:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7383,"name":"FailedInnerCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7348,"src":"1828:15:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7384,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1828:17:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7385,"nodeType":"RevertStatement","src":"1821:24:38"}]}}]},"documentation":{"id":7349,"nodeType":"StructuredDocumentation","src":"621:905:38","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":7389,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"1540:9:38","nodeType":"FunctionDefinition","parameters":{"id":7354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7351,"mutability":"mutable","name":"recipient","nameLocation":"1566:9:38","nodeType":"VariableDeclaration","scope":7389,"src":"1550:25:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":7350,"name":"address","nodeType":"ElementaryTypeName","src":"1550:15:38","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":7353,"mutability":"mutable","name":"amount","nameLocation":"1585:6:38","nodeType":"VariableDeclaration","scope":7389,"src":"1577:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7352,"name":"uint256","nodeType":"ElementaryTypeName","src":"1577:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1549:43:38"},"returnParameters":{"id":7355,"nodeType":"ParameterList","parameters":[],"src":"1602:0:38"},"scope":7585,"src":"1531:331:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7405,"nodeType":"Block","src":"2794:62:38","statements":[{"expression":{"arguments":[{"id":7400,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7392,"src":"2833:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7401,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7394,"src":"2841:4:38","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":7402,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2847:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":7399,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7452,"src":"2811:21:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256) returns (bytes memory)"}},"id":7403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2811:38:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7398,"id":7404,"nodeType":"Return","src":"2804:45:38"}]},"documentation":{"id":7390,"nodeType":"StructuredDocumentation","src":"1868:832:38","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason or custom error, it is bubbled\n up by this function (like regular Solidity function calls). However, if\n the call reverted with no returned reason, this function reverts with a\n {FailedInnerCall} error.\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert."},"id":7406,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"2714:12:38","nodeType":"FunctionDefinition","parameters":{"id":7395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7392,"mutability":"mutable","name":"target","nameLocation":"2735:6:38","nodeType":"VariableDeclaration","scope":7406,"src":"2727:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7391,"name":"address","nodeType":"ElementaryTypeName","src":"2727:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7394,"mutability":"mutable","name":"data","nameLocation":"2756:4:38","nodeType":"VariableDeclaration","scope":7406,"src":"2743:17:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7393,"name":"bytes","nodeType":"ElementaryTypeName","src":"2743:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2726:35:38"},"returnParameters":{"id":7398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7397,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7406,"src":"2780:12:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7396,"name":"bytes","nodeType":"ElementaryTypeName","src":"2780:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2779:14:38"},"scope":7585,"src":"2705:151:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7451,"nodeType":"Block","src":"3293:279:38","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":7420,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3315:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$7585","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$7585","typeString":"library Address"}],"id":7419,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3307:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7418,"name":"address","nodeType":"ElementaryTypeName","src":"3307:7:38","typeDescriptions":{}}},"id":7421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3307:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3321:7:38","memberName":"balance","nodeType":"MemberAccess","src":"3307:21:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7423,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7413,"src":"3331:5:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3307:29:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7433,"nodeType":"IfStatement","src":"3303:108:38","trueBody":{"id":7432,"nodeType":"Block","src":"3338:73:38","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":7428,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3394:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$7585","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$7585","typeString":"library Address"}],"id":7427,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3386:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7426,"name":"address","nodeType":"ElementaryTypeName","src":"3386:7:38","typeDescriptions":{}}},"id":7429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3386:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7425,"name":"AddressInsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7340,"src":"3359:26:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":7430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3359:41:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7431,"nodeType":"RevertStatement","src":"3352:48:38"}]}},{"assignments":[7435,7437],"declarations":[{"constant":false,"id":7435,"mutability":"mutable","name":"success","nameLocation":"3426:7:38","nodeType":"VariableDeclaration","scope":7451,"src":"3421:12:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7434,"name":"bool","nodeType":"ElementaryTypeName","src":"3421:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7437,"mutability":"mutable","name":"returndata","nameLocation":"3448:10:38","nodeType":"VariableDeclaration","scope":7451,"src":"3435:23:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7436,"name":"bytes","nodeType":"ElementaryTypeName","src":"3435:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":7444,"initialValue":{"arguments":[{"id":7442,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7411,"src":"3488:4:38","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":7438,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7409,"src":"3462:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3469:4:38","memberName":"call","nodeType":"MemberAccess","src":"3462:11:38","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":7441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":7440,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7413,"src":"3481:5:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"3462:25:38","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":7443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3462:31:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3420:73:38"},{"expression":{"arguments":[{"id":7446,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7409,"src":"3537:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7447,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7435,"src":"3545:7:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":7448,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7437,"src":"3554:10:38","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7445,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7544,"src":"3510:26:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":7449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3510:55:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7417,"id":7450,"nodeType":"Return","src":"3503:62:38"}]},"documentation":{"id":7407,"nodeType":"StructuredDocumentation","src":"2862:313:38","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`."},"id":7452,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"3189:21:38","nodeType":"FunctionDefinition","parameters":{"id":7414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7409,"mutability":"mutable","name":"target","nameLocation":"3219:6:38","nodeType":"VariableDeclaration","scope":7452,"src":"3211:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7408,"name":"address","nodeType":"ElementaryTypeName","src":"3211:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7411,"mutability":"mutable","name":"data","nameLocation":"3240:4:38","nodeType":"VariableDeclaration","scope":7452,"src":"3227:17:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7410,"name":"bytes","nodeType":"ElementaryTypeName","src":"3227:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":7413,"mutability":"mutable","name":"value","nameLocation":"3254:5:38","nodeType":"VariableDeclaration","scope":7452,"src":"3246:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7412,"name":"uint256","nodeType":"ElementaryTypeName","src":"3246:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3210:50:38"},"returnParameters":{"id":7417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7416,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7452,"src":"3279:12:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7415,"name":"bytes","nodeType":"ElementaryTypeName","src":"3279:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3278:14:38"},"scope":7585,"src":"3180:392:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7477,"nodeType":"Block","src":"3811:154:38","statements":[{"assignments":[7463,7465],"declarations":[{"constant":false,"id":7463,"mutability":"mutable","name":"success","nameLocation":"3827:7:38","nodeType":"VariableDeclaration","scope":7477,"src":"3822:12:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7462,"name":"bool","nodeType":"ElementaryTypeName","src":"3822:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7465,"mutability":"mutable","name":"returndata","nameLocation":"3849:10:38","nodeType":"VariableDeclaration","scope":7477,"src":"3836:23:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7464,"name":"bytes","nodeType":"ElementaryTypeName","src":"3836:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":7470,"initialValue":{"arguments":[{"id":7468,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7457,"src":"3881:4:38","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":7466,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7455,"src":"3863:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3870:10:38","memberName":"staticcall","nodeType":"MemberAccess","src":"3863:17:38","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":7469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3863:23:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3821:65:38"},{"expression":{"arguments":[{"id":7472,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7455,"src":"3930:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7473,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7463,"src":"3938:7:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":7474,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7465,"src":"3947:10:38","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7471,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7544,"src":"3903:26:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":7475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3903:55:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7461,"id":7476,"nodeType":"Return","src":"3896:62:38"}]},"documentation":{"id":7453,"nodeType":"StructuredDocumentation","src":"3578:128:38","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call."},"id":7478,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"3720:18:38","nodeType":"FunctionDefinition","parameters":{"id":7458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7455,"mutability":"mutable","name":"target","nameLocation":"3747:6:38","nodeType":"VariableDeclaration","scope":7478,"src":"3739:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7454,"name":"address","nodeType":"ElementaryTypeName","src":"3739:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7457,"mutability":"mutable","name":"data","nameLocation":"3768:4:38","nodeType":"VariableDeclaration","scope":7478,"src":"3755:17:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7456,"name":"bytes","nodeType":"ElementaryTypeName","src":"3755:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3738:35:38"},"returnParameters":{"id":7461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7460,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7478,"src":"3797:12:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7459,"name":"bytes","nodeType":"ElementaryTypeName","src":"3797:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3796:14:38"},"scope":7585,"src":"3711:254:38","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7503,"nodeType":"Block","src":"4203:156:38","statements":[{"assignments":[7489,7491],"declarations":[{"constant":false,"id":7489,"mutability":"mutable","name":"success","nameLocation":"4219:7:38","nodeType":"VariableDeclaration","scope":7503,"src":"4214:12:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7488,"name":"bool","nodeType":"ElementaryTypeName","src":"4214:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7491,"mutability":"mutable","name":"returndata","nameLocation":"4241:10:38","nodeType":"VariableDeclaration","scope":7503,"src":"4228:23:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7490,"name":"bytes","nodeType":"ElementaryTypeName","src":"4228:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":7496,"initialValue":{"arguments":[{"id":7494,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7483,"src":"4275:4:38","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":7492,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7481,"src":"4255:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4262:12:38","memberName":"delegatecall","nodeType":"MemberAccess","src":"4255:19:38","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":7495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4255:25:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4213:67:38"},{"expression":{"arguments":[{"id":7498,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7481,"src":"4324:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7499,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7489,"src":"4332:7:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":7500,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7491,"src":"4341:10:38","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7497,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7544,"src":"4297:26:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":7501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4297:55:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7487,"id":7502,"nodeType":"Return","src":"4290:62:38"}]},"documentation":{"id":7479,"nodeType":"StructuredDocumentation","src":"3971:130:38","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call."},"id":7504,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"4115:20:38","nodeType":"FunctionDefinition","parameters":{"id":7484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7481,"mutability":"mutable","name":"target","nameLocation":"4144:6:38","nodeType":"VariableDeclaration","scope":7504,"src":"4136:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7480,"name":"address","nodeType":"ElementaryTypeName","src":"4136:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7483,"mutability":"mutable","name":"data","nameLocation":"4165:4:38","nodeType":"VariableDeclaration","scope":7504,"src":"4152:17:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7482,"name":"bytes","nodeType":"ElementaryTypeName","src":"4152:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4135:35:38"},"returnParameters":{"id":7487,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7486,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7504,"src":"4189:12:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7485,"name":"bytes","nodeType":"ElementaryTypeName","src":"4189:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4188:14:38"},"scope":7585,"src":"4106:253:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7543,"nodeType":"Block","src":"4783:424:38","statements":[{"condition":{"id":7517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4797:8:38","subExpression":{"id":7516,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7509,"src":"4798:7:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7541,"nodeType":"Block","src":"4857:344:38","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7523,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7511,"src":"5045:10:38","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5056:6:38","memberName":"length","nodeType":"MemberAccess","src":"5045:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7525,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5066:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5045:22:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":7527,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"5071:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5078:4:38","memberName":"code","nodeType":"MemberAccess","src":"5071:11:38","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5083:6:38","memberName":"length","nodeType":"MemberAccess","src":"5071:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7530,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5093:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5071:23:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5045:49:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7538,"nodeType":"IfStatement","src":"5041:119:38","trueBody":{"id":7537,"nodeType":"Block","src":"5096:64:38","statements":[{"errorCall":{"arguments":[{"id":7534,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"5138:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7533,"name":"AddressEmptyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7345,"src":"5121:16:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":7535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5121:24:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7536,"nodeType":"RevertStatement","src":"5114:31:38"}]}},{"expression":{"id":7539,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7511,"src":"5180:10:38","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7515,"id":7540,"nodeType":"Return","src":"5173:17:38"}]},"id":7542,"nodeType":"IfStatement","src":"4793:408:38","trueBody":{"id":7522,"nodeType":"Block","src":"4807:44:38","statements":[{"expression":{"arguments":[{"id":7519,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7511,"src":"4829:10:38","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7518,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7584,"src":"4821:7:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":7520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4821:19:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7521,"nodeType":"ExpressionStatement","src":"4821:19:38"}]}}]},"documentation":{"id":7505,"nodeType":"StructuredDocumentation","src":"4365:255:38","text":" @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n unsuccessful call."},"id":7544,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"4634:26:38","nodeType":"FunctionDefinition","parameters":{"id":7512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7507,"mutability":"mutable","name":"target","nameLocation":"4678:6:38","nodeType":"VariableDeclaration","scope":7544,"src":"4670:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7506,"name":"address","nodeType":"ElementaryTypeName","src":"4670:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7509,"mutability":"mutable","name":"success","nameLocation":"4699:7:38","nodeType":"VariableDeclaration","scope":7544,"src":"4694:12:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7508,"name":"bool","nodeType":"ElementaryTypeName","src":"4694:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7511,"mutability":"mutable","name":"returndata","nameLocation":"4729:10:38","nodeType":"VariableDeclaration","scope":7544,"src":"4716:23:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7510,"name":"bytes","nodeType":"ElementaryTypeName","src":"4716:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4660:85:38"},"returnParameters":{"id":7515,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7514,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7544,"src":"4769:12:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7513,"name":"bytes","nodeType":"ElementaryTypeName","src":"4769:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4768:14:38"},"scope":7585,"src":"4625:582:38","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7565,"nodeType":"Block","src":"5509:122:38","statements":[{"condition":{"id":7555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5523:8:38","subExpression":{"id":7554,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7547,"src":"5524:7:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7563,"nodeType":"Block","src":"5583:42:38","statements":[{"expression":{"id":7561,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7549,"src":"5604:10:38","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7553,"id":7562,"nodeType":"Return","src":"5597:17:38"}]},"id":7564,"nodeType":"IfStatement","src":"5519:106:38","trueBody":{"id":7560,"nodeType":"Block","src":"5533:44:38","statements":[{"expression":{"arguments":[{"id":7557,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7549,"src":"5555:10:38","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7556,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7584,"src":"5547:7:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":7558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5547:19:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7559,"nodeType":"ExpressionStatement","src":"5547:19:38"}]}}]},"documentation":{"id":7545,"nodeType":"StructuredDocumentation","src":"5213:189:38","text":" @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n revert reason or with a default {FailedInnerCall} error."},"id":7566,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"5416:16:38","nodeType":"FunctionDefinition","parameters":{"id":7550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7547,"mutability":"mutable","name":"success","nameLocation":"5438:7:38","nodeType":"VariableDeclaration","scope":7566,"src":"5433:12:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7546,"name":"bool","nodeType":"ElementaryTypeName","src":"5433:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7549,"mutability":"mutable","name":"returndata","nameLocation":"5460:10:38","nodeType":"VariableDeclaration","scope":7566,"src":"5447:23:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7548,"name":"bytes","nodeType":"ElementaryTypeName","src":"5447:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5432:39:38"},"returnParameters":{"id":7553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7552,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7566,"src":"5495:12:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7551,"name":"bytes","nodeType":"ElementaryTypeName","src":"5495:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5494:14:38"},"scope":7585,"src":"5407:224:38","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7583,"nodeType":"Block","src":"5798:461:38","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7572,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7569,"src":"5874:10:38","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5885:6:38","memberName":"length","nodeType":"MemberAccess","src":"5874:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":7574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5894:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5874:21:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7581,"nodeType":"Block","src":"6204:49:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7578,"name":"FailedInnerCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7348,"src":"6225:15:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6225:17:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7580,"nodeType":"RevertStatement","src":"6218:24:38"}]},"id":7582,"nodeType":"IfStatement","src":"5870:383:38","trueBody":{"id":7577,"nodeType":"Block","src":"5897:301:38","statements":[{"AST":{"nativeSrc":"6055:133:38","nodeType":"YulBlock","src":"6055:133:38","statements":[{"nativeSrc":"6073:40:38","nodeType":"YulVariableDeclaration","src":"6073:40:38","value":{"arguments":[{"name":"returndata","nativeSrc":"6102:10:38","nodeType":"YulIdentifier","src":"6102:10:38"}],"functionName":{"name":"mload","nativeSrc":"6096:5:38","nodeType":"YulIdentifier","src":"6096:5:38"},"nativeSrc":"6096:17:38","nodeType":"YulFunctionCall","src":"6096:17:38"},"variables":[{"name":"returndata_size","nativeSrc":"6077:15:38","nodeType":"YulTypedName","src":"6077:15:38","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"6141:2:38","nodeType":"YulLiteral","src":"6141:2:38","type":"","value":"32"},{"name":"returndata","nativeSrc":"6145:10:38","nodeType":"YulIdentifier","src":"6145:10:38"}],"functionName":{"name":"add","nativeSrc":"6137:3:38","nodeType":"YulIdentifier","src":"6137:3:38"},"nativeSrc":"6137:19:38","nodeType":"YulFunctionCall","src":"6137:19:38"},{"name":"returndata_size","nativeSrc":"6158:15:38","nodeType":"YulIdentifier","src":"6158:15:38"}],"functionName":{"name":"revert","nativeSrc":"6130:6:38","nodeType":"YulIdentifier","src":"6130:6:38"},"nativeSrc":"6130:44:38","nodeType":"YulFunctionCall","src":"6130:44:38"},"nativeSrc":"6130:44:38","nodeType":"YulExpressionStatement","src":"6130:44:38"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7569,"isOffset":false,"isSlot":false,"src":"6102:10:38","valueSize":1},{"declaration":7569,"isOffset":false,"isSlot":false,"src":"6145:10:38","valueSize":1}],"id":7576,"nodeType":"InlineAssembly","src":"6046:142:38"}]}}]},"documentation":{"id":7567,"nodeType":"StructuredDocumentation","src":"5637:101:38","text":" @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}."},"id":7584,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"5752:7:38","nodeType":"FunctionDefinition","parameters":{"id":7570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7569,"mutability":"mutable","name":"returndata","nameLocation":"5773:10:38","nodeType":"VariableDeclaration","scope":7584,"src":"5760:23:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7568,"name":"bytes","nodeType":"ElementaryTypeName","src":"5760:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5759:25:38"},"returnParameters":{"id":7571,"nodeType":"ParameterList","parameters":[],"src":"5798:0:38"},"scope":7585,"src":"5743:516:38","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":7586,"src":"195:6066:38","usedErrors":[7340,7345,7348],"usedEvents":[]}],"src":"101:6161:38"},"id":38},"@openzeppelin/contracts/utils/Nonces.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Nonces.sol","exportedSymbols":{"Nonces":[7653]},"id":7654,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7587,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"99:24:39"},{"abstract":true,"baseContracts":[],"canonicalName":"Nonces","contractDependencies":[],"contractKind":"contract","documentation":{"id":7588,"nodeType":"StructuredDocumentation","src":"125:83:39","text":" @dev Provides tracking nonces for addresses. Nonces will only increment."},"fullyImplemented":true,"id":7653,"linearizedBaseContracts":[7653],"name":"Nonces","nameLocation":"227:6:39","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7589,"nodeType":"StructuredDocumentation","src":"240:90:39","text":" @dev The nonce used for an `account` is not the expected current nonce."},"errorSelector":"752d88c0","id":7595,"name":"InvalidAccountNonce","nameLocation":"341:19:39","nodeType":"ErrorDefinition","parameters":{"id":7594,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7591,"mutability":"mutable","name":"account","nameLocation":"369:7:39","nodeType":"VariableDeclaration","scope":7595,"src":"361:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7590,"name":"address","nodeType":"ElementaryTypeName","src":"361:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7593,"mutability":"mutable","name":"currentNonce","nameLocation":"386:12:39","nodeType":"VariableDeclaration","scope":7595,"src":"378:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7592,"name":"uint256","nodeType":"ElementaryTypeName","src":"378:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"360:39:39"},"src":"335:65:39"},{"constant":false,"id":7599,"mutability":"mutable","name":"_nonces","nameLocation":"450:7:39","nodeType":"VariableDeclaration","scope":7653,"src":"406:51:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":7598,"keyName":"account","keyNameLocation":"422:7:39","keyType":{"id":7596,"name":"address","nodeType":"ElementaryTypeName","src":"414:7:39","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"406:35:39","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":7597,"name":"uint256","nodeType":"ElementaryTypeName","src":"433:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"body":{"id":7611,"nodeType":"Block","src":"607:38:39","statements":[{"expression":{"baseExpression":{"id":7607,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7599,"src":"624:7:39","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":7609,"indexExpression":{"id":7608,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7602,"src":"632:5:39","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"624:14:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7606,"id":7610,"nodeType":"Return","src":"617:21:39"}]},"documentation":{"id":7600,"nodeType":"StructuredDocumentation","src":"464:69:39","text":" @dev Returns the next unused nonce for an address."},"functionSelector":"7ecebe00","id":7612,"implemented":true,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"547:6:39","nodeType":"FunctionDefinition","parameters":{"id":7603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7602,"mutability":"mutable","name":"owner","nameLocation":"562:5:39","nodeType":"VariableDeclaration","scope":7612,"src":"554:13:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7601,"name":"address","nodeType":"ElementaryTypeName","src":"554:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"553:15:39"},"returnParameters":{"id":7606,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7605,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7612,"src":"598:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7604,"name":"uint256","nodeType":"ElementaryTypeName","src":"598:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"597:9:39"},"scope":7653,"src":"538:107:39","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":7626,"nodeType":"Block","src":"828:326:39","statements":[{"id":7625,"nodeType":"UncheckedBlock","src":"1031:117:39","statements":[{"expression":{"id":7623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1121:16:39","subExpression":{"baseExpression":{"id":7620,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7599,"src":"1121:7:39","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":7622,"indexExpression":{"id":7621,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7615,"src":"1129:5:39","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1121:14:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7619,"id":7624,"nodeType":"Return","src":"1114:23:39"}]}]},"documentation":{"id":7613,"nodeType":"StructuredDocumentation","src":"651:103:39","text":" @dev Consumes a nonce.\n Returns the current value and increments nonce."},"id":7627,"implemented":true,"kind":"function","modifiers":[],"name":"_useNonce","nameLocation":"768:9:39","nodeType":"FunctionDefinition","parameters":{"id":7616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7615,"mutability":"mutable","name":"owner","nameLocation":"786:5:39","nodeType":"VariableDeclaration","scope":7627,"src":"778:13:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7614,"name":"address","nodeType":"ElementaryTypeName","src":"778:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"777:15:39"},"returnParameters":{"id":7619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7618,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7627,"src":"819:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7617,"name":"uint256","nodeType":"ElementaryTypeName","src":"819:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"818:9:39"},"scope":7653,"src":"759:395:39","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":7651,"nodeType":"Block","src":"1338:149:39","statements":[{"assignments":[7636],"declarations":[{"constant":false,"id":7636,"mutability":"mutable","name":"current","nameLocation":"1356:7:39","nodeType":"VariableDeclaration","scope":7651,"src":"1348:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7635,"name":"uint256","nodeType":"ElementaryTypeName","src":"1348:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7640,"initialValue":{"arguments":[{"id":7638,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7630,"src":"1376:5:39","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7637,"name":"_useNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7627,"src":"1366:9:39","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$","typeString":"function (address) returns (uint256)"}},"id":7639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1366:16:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1348:34:39"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7641,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7632,"src":"1396:5:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":7642,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7636,"src":"1405:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1396:16:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7650,"nodeType":"IfStatement","src":"1392:89:39","trueBody":{"id":7649,"nodeType":"Block","src":"1414:67:39","statements":[{"errorCall":{"arguments":[{"id":7645,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7630,"src":"1455:5:39","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7646,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7636,"src":"1462:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7644,"name":"InvalidAccountNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7595,"src":"1435:19:39","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256) pure returns (error)"}},"id":7647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1435:35:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7648,"nodeType":"RevertStatement","src":"1428:42:39"}]}}]},"documentation":{"id":7628,"nodeType":"StructuredDocumentation","src":"1160:100:39","text":" @dev Same as {_useNonce} but checking that `nonce` is the next valid for `owner`."},"id":7652,"implemented":true,"kind":"function","modifiers":[],"name":"_useCheckedNonce","nameLocation":"1274:16:39","nodeType":"FunctionDefinition","parameters":{"id":7633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7630,"mutability":"mutable","name":"owner","nameLocation":"1299:5:39","nodeType":"VariableDeclaration","scope":7652,"src":"1291:13:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7629,"name":"address","nodeType":"ElementaryTypeName","src":"1291:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7632,"mutability":"mutable","name":"nonce","nameLocation":"1314:5:39","nodeType":"VariableDeclaration","scope":7652,"src":"1306:13:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7631,"name":"uint256","nodeType":"ElementaryTypeName","src":"1306:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1290:30:39"},"returnParameters":{"id":7634,"nodeType":"ParameterList","parameters":[],"src":"1338:0:39"},"scope":7653,"src":"1265:222:39","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":7654,"src":"209:1280:39","usedErrors":[7595],"usedEvents":[]}],"src":"99:1391:39"},"id":39},"@openzeppelin/contracts/utils/ShortStrings.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/ShortStrings.sol","exportedSymbols":{"ShortString":[7659],"ShortStrings":[7870],"StorageSlot":[7980]},"id":7871,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7655,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"106:24:40"},{"absolutePath":"@openzeppelin/contracts/utils/StorageSlot.sol","file":"./StorageSlot.sol","id":7657,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7871,"sourceUnit":7981,"src":"132:46:40","symbolAliases":[{"foreign":{"id":7656,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7980,"src":"140:11:40","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"ShortString","id":7659,"name":"ShortString","nameLocation":"353:11:40","nodeType":"UserDefinedValueTypeDefinition","src":"348:28:40","underlyingType":{"id":7658,"name":"bytes32","nodeType":"ElementaryTypeName","src":"368:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"abstract":false,"baseContracts":[],"canonicalName":"ShortStrings","contractDependencies":[],"contractKind":"library","documentation":{"id":7660,"nodeType":"StructuredDocumentation","src":"378:876:40","text":" @dev This library provides functions to convert short memory strings\n into a `ShortString` type that can be used as an immutable variable.\n Strings of arbitrary length can be optimized using this library if\n they are short enough (up to 31 bytes) by packing them with their\n length (1 byte) in a single EVM word (32 bytes). Additionally, a\n fallback mechanism can be used for every other case.\n Usage example:\n ```solidity\n contract Named {\n using ShortStrings for *;\n ShortString private immutable _name;\n string private _nameFallback;\n constructor(string memory contractName) {\n _name = contractName.toShortStringWithFallback(_nameFallback);\n }\n function name() external view returns (string memory) {\n return _name.toStringWithFallback(_nameFallback);\n }\n }\n ```"},"fullyImplemented":true,"id":7870,"linearizedBaseContracts":[7870],"name":"ShortStrings","nameLocation":"1263:12:40","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":7663,"mutability":"constant","name":"FALLBACK_SENTINEL","nameLocation":"1370:17:40","nodeType":"VariableDeclaration","scope":7870,"src":"1345:111:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7661,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1345:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030304646","id":7662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1390:66:40","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0x00000000000000000000000000000000000000000000000000000000000000FF"},"visibility":"private"},{"errorSelector":"305a27a9","id":7667,"name":"StringTooLong","nameLocation":"1469:13:40","nodeType":"ErrorDefinition","parameters":{"id":7666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7665,"mutability":"mutable","name":"str","nameLocation":"1490:3:40","nodeType":"VariableDeclaration","scope":7667,"src":"1483:10:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7664,"name":"string","nodeType":"ElementaryTypeName","src":"1483:6:40","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1482:12:40"},"src":"1463:32:40"},{"errorSelector":"b3512b0c","id":7669,"name":"InvalidShortString","nameLocation":"1506:18:40","nodeType":"ErrorDefinition","parameters":{"id":7668,"nodeType":"ParameterList","parameters":[],"src":"1524:2:40"},"src":"1500:27:40"},{"body":{"id":7712,"nodeType":"Block","src":"1786:208:40","statements":[{"assignments":[7679],"declarations":[{"constant":false,"id":7679,"mutability":"mutable","name":"bstr","nameLocation":"1809:4:40","nodeType":"VariableDeclaration","scope":7712,"src":"1796:17:40","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7678,"name":"bytes","nodeType":"ElementaryTypeName","src":"1796:5:40","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":7684,"initialValue":{"arguments":[{"id":7682,"name":"str","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7672,"src":"1822:3:40","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":7681,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1816:5:40","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":7680,"name":"bytes","nodeType":"ElementaryTypeName","src":"1816:5:40","typeDescriptions":{}}},"id":7683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1816:10:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"1796:30:40"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7685,"name":"bstr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7679,"src":"1840:4:40","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1845:6:40","memberName":"length","nodeType":"MemberAccess","src":"1840:11:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3331","id":7687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1854:2:40","typeDescriptions":{"typeIdentifier":"t_rational_31_by_1","typeString":"int_const 31"},"value":"31"},"src":"1840:16:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7694,"nodeType":"IfStatement","src":"1836:72:40","trueBody":{"id":7693,"nodeType":"Block","src":"1858:50:40","statements":[{"errorCall":{"arguments":[{"id":7690,"name":"str","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7672,"src":"1893:3:40","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":7689,"name":"StringTooLong","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7667,"src":"1879:13:40","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":7691,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1879:18:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7692,"nodeType":"RevertStatement","src":"1872:25:40"}]}},{"expression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":7703,"name":"bstr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7679,"src":"1965:4:40","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7702,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1957:7:40","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":7701,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1957:7:40","typeDescriptions":{}}},"id":7704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1957:13:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":7700,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1949:7:40","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":7699,"name":"uint256","nodeType":"ElementaryTypeName","src":"1949:7:40","typeDescriptions":{}}},"id":7705,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1949:22:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"expression":{"id":7706,"name":"bstr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7679,"src":"1974:4:40","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1979:6:40","memberName":"length","nodeType":"MemberAccess","src":"1974:11:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1949:36:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7698,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1941:7:40","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":7697,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1941:7:40","typeDescriptions":{}}},"id":7709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1941:45:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":7695,"name":"ShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7659,"src":"1924:11:40","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_ShortString_$7659_$","typeString":"type(ShortString)"}},"id":7696,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1936:4:40","memberName":"wrap","nodeType":"MemberAccess","src":"1924:16:40","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_ShortString_$7659_$","typeString":"function (bytes32) pure returns (ShortString)"}},"id":7710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1924:63:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}},"functionReturnParameters":7677,"id":7711,"nodeType":"Return","src":"1917:70:40"}]},"documentation":{"id":7670,"nodeType":"StructuredDocumentation","src":"1533:170:40","text":" @dev Encode a string of at most 31 chars into a `ShortString`.\n This will trigger a `StringTooLong` error is the input string is too long."},"id":7713,"implemented":true,"kind":"function","modifiers":[],"name":"toShortString","nameLocation":"1717:13:40","nodeType":"FunctionDefinition","parameters":{"id":7673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7672,"mutability":"mutable","name":"str","nameLocation":"1745:3:40","nodeType":"VariableDeclaration","scope":7713,"src":"1731:17:40","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7671,"name":"string","nodeType":"ElementaryTypeName","src":"1731:6:40","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1730:19:40"},"returnParameters":{"id":7677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7676,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7713,"src":"1773:11:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"},"typeName":{"id":7675,"nodeType":"UserDefinedTypeName","pathNode":{"id":7674,"name":"ShortString","nameLocations":["1773:11:40"],"nodeType":"IdentifierPath","referencedDeclaration":7659,"src":"1773:11:40"},"referencedDeclaration":7659,"src":"1773:11:40","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}},"visibility":"internal"}],"src":"1772:13:40"},"scope":7870,"src":"1708:286:40","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7738,"nodeType":"Block","src":"2152:331:40","statements":[{"assignments":[7723],"declarations":[{"constant":false,"id":7723,"mutability":"mutable","name":"len","nameLocation":"2170:3:40","nodeType":"VariableDeclaration","scope":7738,"src":"2162:11:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7722,"name":"uint256","nodeType":"ElementaryTypeName","src":"2162:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7727,"initialValue":{"arguments":[{"id":7725,"name":"sstr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7717,"src":"2187:4:40","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}],"id":7724,"name":"byteLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7771,"src":"2176:10:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_ShortString_$7659_$returns$_t_uint256_$","typeString":"function (ShortString) pure returns (uint256)"}},"id":7726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2176:16:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2162:30:40"},{"assignments":[7729],"declarations":[{"constant":false,"id":7729,"mutability":"mutable","name":"str","nameLocation":"2294:3:40","nodeType":"VariableDeclaration","scope":7738,"src":"2280:17:40","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7728,"name":"string","nodeType":"ElementaryTypeName","src":"2280:6:40","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":7734,"initialValue":{"arguments":[{"hexValue":"3332","id":7732,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2311:2:40","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"}],"id":7731,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2300:10:40","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256) pure returns (string memory)"},"typeName":{"id":7730,"name":"string","nodeType":"ElementaryTypeName","src":"2304:6:40","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}}},"id":7733,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2300:14:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"2280:34:40"},{"AST":{"nativeSrc":"2376:81:40","nodeType":"YulBlock","src":"2376:81:40","statements":[{"expression":{"arguments":[{"name":"str","nativeSrc":"2397:3:40","nodeType":"YulIdentifier","src":"2397:3:40"},{"name":"len","nativeSrc":"2402:3:40","nodeType":"YulIdentifier","src":"2402:3:40"}],"functionName":{"name":"mstore","nativeSrc":"2390:6:40","nodeType":"YulIdentifier","src":"2390:6:40"},"nativeSrc":"2390:16:40","nodeType":"YulFunctionCall","src":"2390:16:40"},"nativeSrc":"2390:16:40","nodeType":"YulExpressionStatement","src":"2390:16:40"},{"expression":{"arguments":[{"arguments":[{"name":"str","nativeSrc":"2430:3:40","nodeType":"YulIdentifier","src":"2430:3:40"},{"kind":"number","nativeSrc":"2435:4:40","nodeType":"YulLiteral","src":"2435:4:40","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2426:3:40","nodeType":"YulIdentifier","src":"2426:3:40"},"nativeSrc":"2426:14:40","nodeType":"YulFunctionCall","src":"2426:14:40"},{"name":"sstr","nativeSrc":"2442:4:40","nodeType":"YulIdentifier","src":"2442:4:40"}],"functionName":{"name":"mstore","nativeSrc":"2419:6:40","nodeType":"YulIdentifier","src":"2419:6:40"},"nativeSrc":"2419:28:40","nodeType":"YulFunctionCall","src":"2419:28:40"},"nativeSrc":"2419:28:40","nodeType":"YulExpressionStatement","src":"2419:28:40"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7723,"isOffset":false,"isSlot":false,"src":"2402:3:40","valueSize":1},{"declaration":7717,"isOffset":false,"isSlot":false,"src":"2442:4:40","valueSize":1},{"declaration":7729,"isOffset":false,"isSlot":false,"src":"2397:3:40","valueSize":1},{"declaration":7729,"isOffset":false,"isSlot":false,"src":"2430:3:40","valueSize":1}],"id":7735,"nodeType":"InlineAssembly","src":"2367:90:40"},{"expression":{"id":7736,"name":"str","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7729,"src":"2473:3:40","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":7721,"id":7737,"nodeType":"Return","src":"2466:10:40"}]},"documentation":{"id":7714,"nodeType":"StructuredDocumentation","src":"2000:73:40","text":" @dev Decode a `ShortString` back to a \"normal\" string."},"id":7739,"implemented":true,"kind":"function","modifiers":[],"name":"toString","nameLocation":"2087:8:40","nodeType":"FunctionDefinition","parameters":{"id":7718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7717,"mutability":"mutable","name":"sstr","nameLocation":"2108:4:40","nodeType":"VariableDeclaration","scope":7739,"src":"2096:16:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"},"typeName":{"id":7716,"nodeType":"UserDefinedTypeName","pathNode":{"id":7715,"name":"ShortString","nameLocations":["2096:11:40"],"nodeType":"IdentifierPath","referencedDeclaration":7659,"src":"2096:11:40"},"referencedDeclaration":7659,"src":"2096:11:40","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}},"visibility":"internal"}],"src":"2095:18:40"},"returnParameters":{"id":7721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7720,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7739,"src":"2137:13:40","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7719,"name":"string","nodeType":"ElementaryTypeName","src":"2137:6:40","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2136:15:40"},"scope":7870,"src":"2078:405:40","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7770,"nodeType":"Block","src":"2625:175:40","statements":[{"assignments":[7749],"declarations":[{"constant":false,"id":7749,"mutability":"mutable","name":"result","nameLocation":"2643:6:40","nodeType":"VariableDeclaration","scope":7770,"src":"2635:14:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7748,"name":"uint256","nodeType":"ElementaryTypeName","src":"2635:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7759,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":7754,"name":"sstr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7743,"src":"2679:4:40","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}],"expression":{"id":7752,"name":"ShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7659,"src":"2660:11:40","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_ShortString_$7659_$","typeString":"type(ShortString)"}},"id":7753,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2672:6:40","memberName":"unwrap","nodeType":"MemberAccess","src":"2660:18:40","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_ShortString_$7659_$returns$_t_bytes32_$","typeString":"function (ShortString) pure returns (bytes32)"}},"id":7755,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2660:24:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":7751,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2652:7:40","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":7750,"name":"uint256","nodeType":"ElementaryTypeName","src":"2652:7:40","typeDescriptions":{}}},"id":7756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2652:33:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"30784646","id":7757,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2688:4:40","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xFF"},"src":"2652:40:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2635:57:40"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7760,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7749,"src":"2706:6:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3331","id":7761,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2715:2:40","typeDescriptions":{"typeIdentifier":"t_rational_31_by_1","typeString":"int_const 31"},"value":"31"},"src":"2706:11:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7767,"nodeType":"IfStatement","src":"2702:69:40","trueBody":{"id":7766,"nodeType":"Block","src":"2719:52:40","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7763,"name":"InvalidShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7669,"src":"2740:18:40","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2740:20:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7765,"nodeType":"RevertStatement","src":"2733:27:40"}]}},{"expression":{"id":7768,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7749,"src":"2787:6:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7747,"id":7769,"nodeType":"Return","src":"2780:13:40"}]},"documentation":{"id":7740,"nodeType":"StructuredDocumentation","src":"2489:61:40","text":" @dev Return the length of a `ShortString`."},"id":7771,"implemented":true,"kind":"function","modifiers":[],"name":"byteLength","nameLocation":"2564:10:40","nodeType":"FunctionDefinition","parameters":{"id":7744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7743,"mutability":"mutable","name":"sstr","nameLocation":"2587:4:40","nodeType":"VariableDeclaration","scope":7771,"src":"2575:16:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"},"typeName":{"id":7742,"nodeType":"UserDefinedTypeName","pathNode":{"id":7741,"name":"ShortString","nameLocations":["2575:11:40"],"nodeType":"IdentifierPath","referencedDeclaration":7659,"src":"2575:11:40"},"referencedDeclaration":7659,"src":"2575:11:40","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}},"visibility":"internal"}],"src":"2574:18:40"},"returnParameters":{"id":7747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7746,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7771,"src":"2616:7:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7745,"name":"uint256","nodeType":"ElementaryTypeName","src":"2616:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2615:9:40"},"scope":7870,"src":"2555:245:40","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7810,"nodeType":"Block","src":"3023:231:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":7784,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7774,"src":"3043:5:40","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":7783,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3037:5:40","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":7782,"name":"bytes","nodeType":"ElementaryTypeName","src":"3037:5:40","typeDescriptions":{}}},"id":7785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3037:12:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3050:6:40","memberName":"length","nodeType":"MemberAccess","src":"3037:19:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"3332","id":7787,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3059:2:40","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"3037:24:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7808,"nodeType":"Block","src":"3121:127:40","statements":[{"expression":{"id":7801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":7797,"name":"store","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7776,"src":"3161:5:40","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage_ptr","typeString":"string storage pointer"}],"expression":{"id":7794,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7980,"src":"3135:11:40","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$7980_$","typeString":"type(library StorageSlot)"}},"id":7796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3147:13:40","memberName":"getStringSlot","nodeType":"MemberAccess","referencedDeclaration":7957,"src":"3135:25:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_storage_ptr_$returns$_t_struct$_StringSlot_$7888_storage_ptr_$","typeString":"function (string storage pointer) pure returns (struct StorageSlot.StringSlot storage pointer)"}},"id":7798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3135:32:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$7888_storage_ptr","typeString":"struct StorageSlot.StringSlot storage pointer"}},"id":7799,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3168:5:40","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":7887,"src":"3135:38:40","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7800,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7774,"src":"3176:5:40","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"3135:46:40","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":7802,"nodeType":"ExpressionStatement","src":"3135:46:40"},{"expression":{"arguments":[{"id":7805,"name":"FALLBACK_SENTINEL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7663,"src":"3219:17:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":7803,"name":"ShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7659,"src":"3202:11:40","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_ShortString_$7659_$","typeString":"type(ShortString)"}},"id":7804,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3214:4:40","memberName":"wrap","nodeType":"MemberAccess","src":"3202:16:40","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_ShortString_$7659_$","typeString":"function (bytes32) pure returns (ShortString)"}},"id":7806,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3202:35:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}},"functionReturnParameters":7781,"id":7807,"nodeType":"Return","src":"3195:42:40"}]},"id":7809,"nodeType":"IfStatement","src":"3033:215:40","trueBody":{"id":7793,"nodeType":"Block","src":"3063:52:40","statements":[{"expression":{"arguments":[{"id":7790,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7774,"src":"3098:5:40","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":7789,"name":"toShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7713,"src":"3084:13:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_userDefinedValueType$_ShortString_$7659_$","typeString":"function (string memory) pure returns (ShortString)"}},"id":7791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3084:20:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}},"functionReturnParameters":7781,"id":7792,"nodeType":"Return","src":"3077:27:40"}]}}]},"documentation":{"id":7772,"nodeType":"StructuredDocumentation","src":"2806:103:40","text":" @dev Encode a string into a `ShortString`, or write it to storage if it is too long."},"id":7811,"implemented":true,"kind":"function","modifiers":[],"name":"toShortStringWithFallback","nameLocation":"2923:25:40","nodeType":"FunctionDefinition","parameters":{"id":7777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7774,"mutability":"mutable","name":"value","nameLocation":"2963:5:40","nodeType":"VariableDeclaration","scope":7811,"src":"2949:19:40","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7773,"name":"string","nodeType":"ElementaryTypeName","src":"2949:6:40","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":7776,"mutability":"mutable","name":"store","nameLocation":"2985:5:40","nodeType":"VariableDeclaration","scope":7811,"src":"2970:20:40","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":7775,"name":"string","nodeType":"ElementaryTypeName","src":"2970:6:40","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2948:43:40"},"returnParameters":{"id":7781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7780,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7811,"src":"3010:11:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"},"typeName":{"id":7779,"nodeType":"UserDefinedTypeName","pathNode":{"id":7778,"name":"ShortString","nameLocations":["3010:11:40"],"nodeType":"IdentifierPath","referencedDeclaration":7659,"src":"3010:11:40"},"referencedDeclaration":7659,"src":"3010:11:40","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}},"visibility":"internal"}],"src":"3009:13:40"},"scope":7870,"src":"2914:340:40","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7837,"nodeType":"Block","src":"3494:158:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":7827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":7824,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7815,"src":"3527:5:40","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}],"expression":{"id":7822,"name":"ShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7659,"src":"3508:11:40","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_ShortString_$7659_$","typeString":"type(ShortString)"}},"id":7823,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3520:6:40","memberName":"unwrap","nodeType":"MemberAccess","src":"3508:18:40","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_ShortString_$7659_$returns$_t_bytes32_$","typeString":"function (ShortString) pure returns (bytes32)"}},"id":7825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3508:25:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":7826,"name":"FALLBACK_SENTINEL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7663,"src":"3537:17:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3508:46:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7835,"nodeType":"Block","src":"3609:37:40","statements":[{"expression":{"id":7833,"name":"store","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7817,"src":"3630:5:40","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string storage pointer"}},"functionReturnParameters":7821,"id":7834,"nodeType":"Return","src":"3623:12:40"}]},"id":7836,"nodeType":"IfStatement","src":"3504:142:40","trueBody":{"id":7832,"nodeType":"Block","src":"3556:47:40","statements":[{"expression":{"arguments":[{"id":7829,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7815,"src":"3586:5:40","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}],"id":7828,"name":"toString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7739,"src":"3577:8:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_ShortString_$7659_$returns$_t_string_memory_ptr_$","typeString":"function (ShortString) pure returns (string memory)"}},"id":7830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3577:15:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":7821,"id":7831,"nodeType":"Return","src":"3570:22:40"}]}}]},"documentation":{"id":7812,"nodeType":"StructuredDocumentation","src":"3260:120:40","text":" @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}."},"id":7838,"implemented":true,"kind":"function","modifiers":[],"name":"toStringWithFallback","nameLocation":"3394:20:40","nodeType":"FunctionDefinition","parameters":{"id":7818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7815,"mutability":"mutable","name":"value","nameLocation":"3427:5:40","nodeType":"VariableDeclaration","scope":7838,"src":"3415:17:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"},"typeName":{"id":7814,"nodeType":"UserDefinedTypeName","pathNode":{"id":7813,"name":"ShortString","nameLocations":["3415:11:40"],"nodeType":"IdentifierPath","referencedDeclaration":7659,"src":"3415:11:40"},"referencedDeclaration":7659,"src":"3415:11:40","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}},"visibility":"internal"},{"constant":false,"id":7817,"mutability":"mutable","name":"store","nameLocation":"3449:5:40","nodeType":"VariableDeclaration","scope":7838,"src":"3434:20:40","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":7816,"name":"string","nodeType":"ElementaryTypeName","src":"3434:6:40","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3414:41:40"},"returnParameters":{"id":7821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7820,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7838,"src":"3479:13:40","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7819,"name":"string","nodeType":"ElementaryTypeName","src":"3479:6:40","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3478:15:40"},"scope":7870,"src":"3385:267:40","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7868,"nodeType":"Block","src":"4132:174:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":7854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":7851,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7842,"src":"4165:5:40","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}],"expression":{"id":7849,"name":"ShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7659,"src":"4146:11:40","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_ShortString_$7659_$","typeString":"type(ShortString)"}},"id":7850,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4158:6:40","memberName":"unwrap","nodeType":"MemberAccess","src":"4146:18:40","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_ShortString_$7659_$returns$_t_bytes32_$","typeString":"function (ShortString) pure returns (bytes32)"}},"id":7852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4146:25:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":7853,"name":"FALLBACK_SENTINEL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7663,"src":"4175:17:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4146:46:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7866,"nodeType":"Block","src":"4249:51:40","statements":[{"expression":{"expression":{"arguments":[{"id":7862,"name":"store","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7844,"src":"4276:5:40","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage_ptr","typeString":"string storage pointer"}],"id":7861,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4270:5:40","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":7860,"name":"bytes","nodeType":"ElementaryTypeName","src":"4270:5:40","typeDescriptions":{}}},"id":7863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4270:12:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes storage pointer"}},"id":7864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4283:6:40","memberName":"length","nodeType":"MemberAccess","src":"4270:19:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7848,"id":7865,"nodeType":"Return","src":"4263:26:40"}]},"id":7867,"nodeType":"IfStatement","src":"4142:158:40","trueBody":{"id":7859,"nodeType":"Block","src":"4194:49:40","statements":[{"expression":{"arguments":[{"id":7856,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7842,"src":"4226:5:40","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}],"id":7855,"name":"byteLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7771,"src":"4215:10:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_ShortString_$7659_$returns$_t_uint256_$","typeString":"function (ShortString) pure returns (uint256)"}},"id":7857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4215:17:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7848,"id":7858,"nodeType":"Return","src":"4208:24:40"}]}}]},"documentation":{"id":7839,"nodeType":"StructuredDocumentation","src":"3658:364:40","text":" @dev Return the length of a string that was encoded to `ShortString` or written to storage using\n {setWithFallback}.\n WARNING: This will return the \"byte length\" of the string. This may not reflect the actual length in terms of\n actual characters as the UTF-8 encoding of a single character can span over multiple bytes."},"id":7869,"implemented":true,"kind":"function","modifiers":[],"name":"byteLengthWithFallback","nameLocation":"4036:22:40","nodeType":"FunctionDefinition","parameters":{"id":7845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7842,"mutability":"mutable","name":"value","nameLocation":"4071:5:40","nodeType":"VariableDeclaration","scope":7869,"src":"4059:17:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"},"typeName":{"id":7841,"nodeType":"UserDefinedTypeName","pathNode":{"id":7840,"name":"ShortString","nameLocations":["4059:11:40"],"nodeType":"IdentifierPath","referencedDeclaration":7659,"src":"4059:11:40"},"referencedDeclaration":7659,"src":"4059:11:40","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}},"visibility":"internal"},{"constant":false,"id":7844,"mutability":"mutable","name":"store","nameLocation":"4093:5:40","nodeType":"VariableDeclaration","scope":7869,"src":"4078:20:40","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":7843,"name":"string","nodeType":"ElementaryTypeName","src":"4078:6:40","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4058:41:40"},"returnParameters":{"id":7848,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7847,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7869,"src":"4123:7:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7846,"name":"uint256","nodeType":"ElementaryTypeName","src":"4123:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4122:9:40"},"scope":7870,"src":"4027:279:40","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":7871,"src":"1255:3053:40","usedErrors":[7667,7669],"usedEvents":[]}],"src":"106:4203:40"},"id":40},"@openzeppelin/contracts/utils/StorageSlot.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/StorageSlot.sol","exportedSymbols":{"StorageSlot":[7980]},"id":7981,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7872,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"193:24:41"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlot","contractDependencies":[],"contractKind":"library","documentation":{"id":7873,"nodeType":"StructuredDocumentation","src":"219:1025:41","text":" @dev Library for reading and writing primitive types to specific storage slots.\n Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n This library helps with reading and writing to such slots without the need for inline assembly.\n The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n Example usage to set ERC1967 implementation slot:\n ```solidity\n contract ERC1967 {\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n function _setImplementation(address newImplementation) internal {\n require(newImplementation.code.length > 0);\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n }\n ```"},"fullyImplemented":true,"id":7980,"linearizedBaseContracts":[7980],"name":"StorageSlot","nameLocation":"1253:11:41","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlot.AddressSlot","id":7876,"members":[{"constant":false,"id":7875,"mutability":"mutable","name":"value","nameLocation":"1308:5:41","nodeType":"VariableDeclaration","scope":7876,"src":"1300:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7874,"name":"address","nodeType":"ElementaryTypeName","src":"1300:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"AddressSlot","nameLocation":"1278:11:41","nodeType":"StructDefinition","scope":7980,"src":"1271:49:41","visibility":"public"},{"canonicalName":"StorageSlot.BooleanSlot","id":7879,"members":[{"constant":false,"id":7878,"mutability":"mutable","name":"value","nameLocation":"1360:5:41","nodeType":"VariableDeclaration","scope":7879,"src":"1355:10:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7877,"name":"bool","nodeType":"ElementaryTypeName","src":"1355:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"BooleanSlot","nameLocation":"1333:11:41","nodeType":"StructDefinition","scope":7980,"src":"1326:46:41","visibility":"public"},{"canonicalName":"StorageSlot.Bytes32Slot","id":7882,"members":[{"constant":false,"id":7881,"mutability":"mutable","name":"value","nameLocation":"1415:5:41","nodeType":"VariableDeclaration","scope":7882,"src":"1407:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7880,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1407:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"Bytes32Slot","nameLocation":"1385:11:41","nodeType":"StructDefinition","scope":7980,"src":"1378:49:41","visibility":"public"},{"canonicalName":"StorageSlot.Uint256Slot","id":7885,"members":[{"constant":false,"id":7884,"mutability":"mutable","name":"value","nameLocation":"1470:5:41","nodeType":"VariableDeclaration","scope":7885,"src":"1462:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7883,"name":"uint256","nodeType":"ElementaryTypeName","src":"1462:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Uint256Slot","nameLocation":"1440:11:41","nodeType":"StructDefinition","scope":7980,"src":"1433:49:41","visibility":"public"},{"canonicalName":"StorageSlot.StringSlot","id":7888,"members":[{"constant":false,"id":7887,"mutability":"mutable","name":"value","nameLocation":"1523:5:41","nodeType":"VariableDeclaration","scope":7888,"src":"1516:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":7886,"name":"string","nodeType":"ElementaryTypeName","src":"1516:6:41","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"name":"StringSlot","nameLocation":"1495:10:41","nodeType":"StructDefinition","scope":7980,"src":"1488:47:41","visibility":"public"},{"canonicalName":"StorageSlot.BytesSlot","id":7891,"members":[{"constant":false,"id":7890,"mutability":"mutable","name":"value","nameLocation":"1574:5:41","nodeType":"VariableDeclaration","scope":7891,"src":"1568:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":7889,"name":"bytes","nodeType":"ElementaryTypeName","src":"1568:5:41","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"BytesSlot","nameLocation":"1548:9:41","nodeType":"StructDefinition","scope":7980,"src":"1541:45:41","visibility":"public"},{"body":{"id":7901,"nodeType":"Block","src":"1768:106:41","statements":[{"AST":{"nativeSrc":"1830:38:41","nodeType":"YulBlock","src":"1830:38:41","statements":[{"nativeSrc":"1844:14:41","nodeType":"YulAssignment","src":"1844:14:41","value":{"name":"slot","nativeSrc":"1854:4:41","nodeType":"YulIdentifier","src":"1854:4:41"},"variableNames":[{"name":"r.slot","nativeSrc":"1844:6:41","nodeType":"YulIdentifier","src":"1844:6:41"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7898,"isOffset":false,"isSlot":true,"src":"1844:6:41","suffix":"slot","valueSize":1},{"declaration":7894,"isOffset":false,"isSlot":false,"src":"1854:4:41","valueSize":1}],"id":7900,"nodeType":"InlineAssembly","src":"1821:47:41"}]},"documentation":{"id":7892,"nodeType":"StructuredDocumentation","src":"1592:87:41","text":" @dev Returns an `AddressSlot` with member `value` located at `slot`."},"id":7902,"implemented":true,"kind":"function","modifiers":[],"name":"getAddressSlot","nameLocation":"1693:14:41","nodeType":"FunctionDefinition","parameters":{"id":7895,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7894,"mutability":"mutable","name":"slot","nameLocation":"1716:4:41","nodeType":"VariableDeclaration","scope":7902,"src":"1708:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7893,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1708:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1707:14:41"},"returnParameters":{"id":7899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7898,"mutability":"mutable","name":"r","nameLocation":"1765:1:41","nodeType":"VariableDeclaration","scope":7902,"src":"1745:21:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$7876_storage_ptr","typeString":"struct StorageSlot.AddressSlot"},"typeName":{"id":7897,"nodeType":"UserDefinedTypeName","pathNode":{"id":7896,"name":"AddressSlot","nameLocations":["1745:11:41"],"nodeType":"IdentifierPath","referencedDeclaration":7876,"src":"1745:11:41"},"referencedDeclaration":7876,"src":"1745:11:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$7876_storage_ptr","typeString":"struct StorageSlot.AddressSlot"}},"visibility":"internal"}],"src":"1744:23:41"},"scope":7980,"src":"1684:190:41","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7912,"nodeType":"Block","src":"2056:106:41","statements":[{"AST":{"nativeSrc":"2118:38:41","nodeType":"YulBlock","src":"2118:38:41","statements":[{"nativeSrc":"2132:14:41","nodeType":"YulAssignment","src":"2132:14:41","value":{"name":"slot","nativeSrc":"2142:4:41","nodeType":"YulIdentifier","src":"2142:4:41"},"variableNames":[{"name":"r.slot","nativeSrc":"2132:6:41","nodeType":"YulIdentifier","src":"2132:6:41"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7909,"isOffset":false,"isSlot":true,"src":"2132:6:41","suffix":"slot","valueSize":1},{"declaration":7905,"isOffset":false,"isSlot":false,"src":"2142:4:41","valueSize":1}],"id":7911,"nodeType":"InlineAssembly","src":"2109:47:41"}]},"documentation":{"id":7903,"nodeType":"StructuredDocumentation","src":"1880:87:41","text":" @dev Returns an `BooleanSlot` with member `value` located at `slot`."},"id":7913,"implemented":true,"kind":"function","modifiers":[],"name":"getBooleanSlot","nameLocation":"1981:14:41","nodeType":"FunctionDefinition","parameters":{"id":7906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7905,"mutability":"mutable","name":"slot","nameLocation":"2004:4:41","nodeType":"VariableDeclaration","scope":7913,"src":"1996:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7904,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1996:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1995:14:41"},"returnParameters":{"id":7910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7909,"mutability":"mutable","name":"r","nameLocation":"2053:1:41","nodeType":"VariableDeclaration","scope":7913,"src":"2033:21:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$7879_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"},"typeName":{"id":7908,"nodeType":"UserDefinedTypeName","pathNode":{"id":7907,"name":"BooleanSlot","nameLocations":["2033:11:41"],"nodeType":"IdentifierPath","referencedDeclaration":7879,"src":"2033:11:41"},"referencedDeclaration":7879,"src":"2033:11:41","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$7879_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"}},"visibility":"internal"}],"src":"2032:23:41"},"scope":7980,"src":"1972:190:41","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7923,"nodeType":"Block","src":"2344:106:41","statements":[{"AST":{"nativeSrc":"2406:38:41","nodeType":"YulBlock","src":"2406:38:41","statements":[{"nativeSrc":"2420:14:41","nodeType":"YulAssignment","src":"2420:14:41","value":{"name":"slot","nativeSrc":"2430:4:41","nodeType":"YulIdentifier","src":"2430:4:41"},"variableNames":[{"name":"r.slot","nativeSrc":"2420:6:41","nodeType":"YulIdentifier","src":"2420:6:41"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7920,"isOffset":false,"isSlot":true,"src":"2420:6:41","suffix":"slot","valueSize":1},{"declaration":7916,"isOffset":false,"isSlot":false,"src":"2430:4:41","valueSize":1}],"id":7922,"nodeType":"InlineAssembly","src":"2397:47:41"}]},"documentation":{"id":7914,"nodeType":"StructuredDocumentation","src":"2168:87:41","text":" @dev Returns an `Bytes32Slot` with member `value` located at `slot`."},"id":7924,"implemented":true,"kind":"function","modifiers":[],"name":"getBytes32Slot","nameLocation":"2269:14:41","nodeType":"FunctionDefinition","parameters":{"id":7917,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7916,"mutability":"mutable","name":"slot","nameLocation":"2292:4:41","nodeType":"VariableDeclaration","scope":7924,"src":"2284:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7915,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2284:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2283:14:41"},"returnParameters":{"id":7921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7920,"mutability":"mutable","name":"r","nameLocation":"2341:1:41","nodeType":"VariableDeclaration","scope":7924,"src":"2321:21:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$7882_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"},"typeName":{"id":7919,"nodeType":"UserDefinedTypeName","pathNode":{"id":7918,"name":"Bytes32Slot","nameLocations":["2321:11:41"],"nodeType":"IdentifierPath","referencedDeclaration":7882,"src":"2321:11:41"},"referencedDeclaration":7882,"src":"2321:11:41","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$7882_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"}},"visibility":"internal"}],"src":"2320:23:41"},"scope":7980,"src":"2260:190:41","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7934,"nodeType":"Block","src":"2632:106:41","statements":[{"AST":{"nativeSrc":"2694:38:41","nodeType":"YulBlock","src":"2694:38:41","statements":[{"nativeSrc":"2708:14:41","nodeType":"YulAssignment","src":"2708:14:41","value":{"name":"slot","nativeSrc":"2718:4:41","nodeType":"YulIdentifier","src":"2718:4:41"},"variableNames":[{"name":"r.slot","nativeSrc":"2708:6:41","nodeType":"YulIdentifier","src":"2708:6:41"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7931,"isOffset":false,"isSlot":true,"src":"2708:6:41","suffix":"slot","valueSize":1},{"declaration":7927,"isOffset":false,"isSlot":false,"src":"2718:4:41","valueSize":1}],"id":7933,"nodeType":"InlineAssembly","src":"2685:47:41"}]},"documentation":{"id":7925,"nodeType":"StructuredDocumentation","src":"2456:87:41","text":" @dev Returns an `Uint256Slot` with member `value` located at `slot`."},"id":7935,"implemented":true,"kind":"function","modifiers":[],"name":"getUint256Slot","nameLocation":"2557:14:41","nodeType":"FunctionDefinition","parameters":{"id":7928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7927,"mutability":"mutable","name":"slot","nameLocation":"2580:4:41","nodeType":"VariableDeclaration","scope":7935,"src":"2572:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7926,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2572:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2571:14:41"},"returnParameters":{"id":7932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7931,"mutability":"mutable","name":"r","nameLocation":"2629:1:41","nodeType":"VariableDeclaration","scope":7935,"src":"2609:21:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$7885_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"},"typeName":{"id":7930,"nodeType":"UserDefinedTypeName","pathNode":{"id":7929,"name":"Uint256Slot","nameLocations":["2609:11:41"],"nodeType":"IdentifierPath","referencedDeclaration":7885,"src":"2609:11:41"},"referencedDeclaration":7885,"src":"2609:11:41","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$7885_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"}},"visibility":"internal"}],"src":"2608:23:41"},"scope":7980,"src":"2548:190:41","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7945,"nodeType":"Block","src":"2917:106:41","statements":[{"AST":{"nativeSrc":"2979:38:41","nodeType":"YulBlock","src":"2979:38:41","statements":[{"nativeSrc":"2993:14:41","nodeType":"YulAssignment","src":"2993:14:41","value":{"name":"slot","nativeSrc":"3003:4:41","nodeType":"YulIdentifier","src":"3003:4:41"},"variableNames":[{"name":"r.slot","nativeSrc":"2993:6:41","nodeType":"YulIdentifier","src":"2993:6:41"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7942,"isOffset":false,"isSlot":true,"src":"2993:6:41","suffix":"slot","valueSize":1},{"declaration":7938,"isOffset":false,"isSlot":false,"src":"3003:4:41","valueSize":1}],"id":7944,"nodeType":"InlineAssembly","src":"2970:47:41"}]},"documentation":{"id":7936,"nodeType":"StructuredDocumentation","src":"2744:86:41","text":" @dev Returns an `StringSlot` with member `value` located at `slot`."},"id":7946,"implemented":true,"kind":"function","modifiers":[],"name":"getStringSlot","nameLocation":"2844:13:41","nodeType":"FunctionDefinition","parameters":{"id":7939,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7938,"mutability":"mutable","name":"slot","nameLocation":"2866:4:41","nodeType":"VariableDeclaration","scope":7946,"src":"2858:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7937,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2858:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2857:14:41"},"returnParameters":{"id":7943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7942,"mutability":"mutable","name":"r","nameLocation":"2914:1:41","nodeType":"VariableDeclaration","scope":7946,"src":"2895:20:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$7888_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":7941,"nodeType":"UserDefinedTypeName","pathNode":{"id":7940,"name":"StringSlot","nameLocations":["2895:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":7888,"src":"2895:10:41"},"referencedDeclaration":7888,"src":"2895:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$7888_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"2894:22:41"},"scope":7980,"src":"2835:188:41","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7956,"nodeType":"Block","src":"3225:112:41","statements":[{"AST":{"nativeSrc":"3287:44:41","nodeType":"YulBlock","src":"3287:44:41","statements":[{"nativeSrc":"3301:20:41","nodeType":"YulAssignment","src":"3301:20:41","value":{"name":"store.slot","nativeSrc":"3311:10:41","nodeType":"YulIdentifier","src":"3311:10:41"},"variableNames":[{"name":"r.slot","nativeSrc":"3301:6:41","nodeType":"YulIdentifier","src":"3301:6:41"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7953,"isOffset":false,"isSlot":true,"src":"3301:6:41","suffix":"slot","valueSize":1},{"declaration":7949,"isOffset":false,"isSlot":true,"src":"3311:10:41","suffix":"slot","valueSize":1}],"id":7955,"nodeType":"InlineAssembly","src":"3278:53:41"}]},"documentation":{"id":7947,"nodeType":"StructuredDocumentation","src":"3029:101:41","text":" @dev Returns an `StringSlot` representation of the string storage pointer `store`."},"id":7957,"implemented":true,"kind":"function","modifiers":[],"name":"getStringSlot","nameLocation":"3144:13:41","nodeType":"FunctionDefinition","parameters":{"id":7950,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7949,"mutability":"mutable","name":"store","nameLocation":"3173:5:41","nodeType":"VariableDeclaration","scope":7957,"src":"3158:20:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":7948,"name":"string","nodeType":"ElementaryTypeName","src":"3158:6:41","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3157:22:41"},"returnParameters":{"id":7954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7953,"mutability":"mutable","name":"r","nameLocation":"3222:1:41","nodeType":"VariableDeclaration","scope":7957,"src":"3203:20:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$7888_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":7952,"nodeType":"UserDefinedTypeName","pathNode":{"id":7951,"name":"StringSlot","nameLocations":["3203:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":7888,"src":"3203:10:41"},"referencedDeclaration":7888,"src":"3203:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$7888_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"3202:22:41"},"scope":7980,"src":"3135:202:41","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7967,"nodeType":"Block","src":"3513:106:41","statements":[{"AST":{"nativeSrc":"3575:38:41","nodeType":"YulBlock","src":"3575:38:41","statements":[{"nativeSrc":"3589:14:41","nodeType":"YulAssignment","src":"3589:14:41","value":{"name":"slot","nativeSrc":"3599:4:41","nodeType":"YulIdentifier","src":"3599:4:41"},"variableNames":[{"name":"r.slot","nativeSrc":"3589:6:41","nodeType":"YulIdentifier","src":"3589:6:41"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7964,"isOffset":false,"isSlot":true,"src":"3589:6:41","suffix":"slot","valueSize":1},{"declaration":7960,"isOffset":false,"isSlot":false,"src":"3599:4:41","valueSize":1}],"id":7966,"nodeType":"InlineAssembly","src":"3566:47:41"}]},"documentation":{"id":7958,"nodeType":"StructuredDocumentation","src":"3343:85:41","text":" @dev Returns an `BytesSlot` with member `value` located at `slot`."},"id":7968,"implemented":true,"kind":"function","modifiers":[],"name":"getBytesSlot","nameLocation":"3442:12:41","nodeType":"FunctionDefinition","parameters":{"id":7961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7960,"mutability":"mutable","name":"slot","nameLocation":"3463:4:41","nodeType":"VariableDeclaration","scope":7968,"src":"3455:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7959,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3455:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3454:14:41"},"returnParameters":{"id":7965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7964,"mutability":"mutable","name":"r","nameLocation":"3510:1:41","nodeType":"VariableDeclaration","scope":7968,"src":"3492:19:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$7891_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":7963,"nodeType":"UserDefinedTypeName","pathNode":{"id":7962,"name":"BytesSlot","nameLocations":["3492:9:41"],"nodeType":"IdentifierPath","referencedDeclaration":7891,"src":"3492:9:41"},"referencedDeclaration":7891,"src":"3492:9:41","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$7891_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"3491:21:41"},"scope":7980,"src":"3433:186:41","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7978,"nodeType":"Block","src":"3816:112:41","statements":[{"AST":{"nativeSrc":"3878:44:41","nodeType":"YulBlock","src":"3878:44:41","statements":[{"nativeSrc":"3892:20:41","nodeType":"YulAssignment","src":"3892:20:41","value":{"name":"store.slot","nativeSrc":"3902:10:41","nodeType":"YulIdentifier","src":"3902:10:41"},"variableNames":[{"name":"r.slot","nativeSrc":"3892:6:41","nodeType":"YulIdentifier","src":"3892:6:41"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7975,"isOffset":false,"isSlot":true,"src":"3892:6:41","suffix":"slot","valueSize":1},{"declaration":7971,"isOffset":false,"isSlot":true,"src":"3902:10:41","suffix":"slot","valueSize":1}],"id":7977,"nodeType":"InlineAssembly","src":"3869:53:41"}]},"documentation":{"id":7969,"nodeType":"StructuredDocumentation","src":"3625:99:41","text":" @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`."},"id":7979,"implemented":true,"kind":"function","modifiers":[],"name":"getBytesSlot","nameLocation":"3738:12:41","nodeType":"FunctionDefinition","parameters":{"id":7972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7971,"mutability":"mutable","name":"store","nameLocation":"3765:5:41","nodeType":"VariableDeclaration","scope":7979,"src":"3751:19:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":7970,"name":"bytes","nodeType":"ElementaryTypeName","src":"3751:5:41","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3750:21:41"},"returnParameters":{"id":7976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7975,"mutability":"mutable","name":"r","nameLocation":"3813:1:41","nodeType":"VariableDeclaration","scope":7979,"src":"3795:19:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$7891_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":7974,"nodeType":"UserDefinedTypeName","pathNode":{"id":7973,"name":"BytesSlot","nameLocations":["3795:9:41"],"nodeType":"IdentifierPath","referencedDeclaration":7891,"src":"3795:9:41"},"referencedDeclaration":7891,"src":"3795:9:41","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$7891_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"3794:21:41"},"scope":7980,"src":"3729:199:41","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":7981,"src":"1245:2685:41","usedErrors":[],"usedEvents":[]}],"src":"193:3738:41"},"id":41},"@openzeppelin/contracts/utils/Strings.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Strings.sol","exportedSymbols":{"Math":[9974],"SignedMath":[11834],"Strings":[8235]},"id":8236,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7982,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:42"},{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","file":"./math/Math.sol","id":7984,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8236,"sourceUnit":9975,"src":"127:37:42","symbolAliases":[{"foreign":{"id":7983,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9974,"src":"135:4:42","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SignedMath.sol","file":"./math/SignedMath.sol","id":7986,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8236,"sourceUnit":11835,"src":"165:49:42","symbolAliases":[{"foreign":{"id":7985,"name":"SignedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11834,"src":"173:10:42","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Strings","contractDependencies":[],"contractKind":"library","documentation":{"id":7987,"nodeType":"StructuredDocumentation","src":"216:34:42","text":" @dev String operations."},"fullyImplemented":true,"id":8235,"linearizedBaseContracts":[8235],"name":"Strings","nameLocation":"259:7:42","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":7990,"mutability":"constant","name":"HEX_DIGITS","nameLocation":"298:10:42","nodeType":"VariableDeclaration","scope":8235,"src":"273:56:42","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"typeName":{"id":7988,"name":"bytes16","nodeType":"ElementaryTypeName","src":"273:7:42","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"value":{"hexValue":"30313233343536373839616263646566","id":7989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"311:18:42","typeDescriptions":{"typeIdentifier":"t_stringliteral_cb29997ed99ead0db59ce4d12b7d3723198c827273e5796737c926d78019c39f","typeString":"literal_string \"0123456789abcdef\""},"value":"0123456789abcdef"},"visibility":"private"},{"constant":true,"id":7993,"mutability":"constant","name":"ADDRESS_LENGTH","nameLocation":"358:14:42","nodeType":"VariableDeclaration","scope":8235,"src":"335:42:42","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7991,"name":"uint8","nodeType":"ElementaryTypeName","src":"335:5:42","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"3230","id":7992,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"375:2:42","typeDescriptions":{"typeIdentifier":"t_rational_20_by_1","typeString":"int_const 20"},"value":"20"},"visibility":"private"},{"documentation":{"id":7994,"nodeType":"StructuredDocumentation","src":"384:81:42","text":" @dev The `value` string doesn't fit in the specified `length`."},"errorSelector":"e22e27eb","id":8000,"name":"StringsInsufficientHexLength","nameLocation":"476:28:42","nodeType":"ErrorDefinition","parameters":{"id":7999,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7996,"mutability":"mutable","name":"value","nameLocation":"513:5:42","nodeType":"VariableDeclaration","scope":8000,"src":"505:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7995,"name":"uint256","nodeType":"ElementaryTypeName","src":"505:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7998,"mutability":"mutable","name":"length","nameLocation":"528:6:42","nodeType":"VariableDeclaration","scope":8000,"src":"520:14:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7997,"name":"uint256","nodeType":"ElementaryTypeName","src":"520:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"504:31:42"},"src":"470:66:42"},{"body":{"id":8047,"nodeType":"Block","src":"708:627:42","statements":[{"id":8046,"nodeType":"UncheckedBlock","src":"718:611:42","statements":[{"assignments":[8009],"declarations":[{"constant":false,"id":8009,"mutability":"mutable","name":"length","nameLocation":"750:6:42","nodeType":"VariableDeclaration","scope":8046,"src":"742:14:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8008,"name":"uint256","nodeType":"ElementaryTypeName","src":"742:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8016,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":8012,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8003,"src":"770:5:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8010,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9974,"src":"759:4:42","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$9974_$","typeString":"type(library Math)"}},"id":8011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"764:5:42","memberName":"log10","nodeType":"MemberAccess","referencedDeclaration":9794,"src":"759:10:42","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":8013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"759:17:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":8014,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"779:1:42","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"759:21:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"742:38:42"},{"assignments":[8018],"declarations":[{"constant":false,"id":8018,"mutability":"mutable","name":"buffer","nameLocation":"808:6:42","nodeType":"VariableDeclaration","scope":8046,"src":"794:20:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8017,"name":"string","nodeType":"ElementaryTypeName","src":"794:6:42","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":8023,"initialValue":{"arguments":[{"id":8021,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8009,"src":"828:6:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8020,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"817:10:42","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256) pure returns (string memory)"},"typeName":{"id":8019,"name":"string","nodeType":"ElementaryTypeName","src":"821:6:42","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}}},"id":8022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"817:18:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"794:41:42"},{"assignments":[8025],"declarations":[{"constant":false,"id":8025,"mutability":"mutable","name":"ptr","nameLocation":"857:3:42","nodeType":"VariableDeclaration","scope":8046,"src":"849:11:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8024,"name":"uint256","nodeType":"ElementaryTypeName","src":"849:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8026,"nodeType":"VariableDeclarationStatement","src":"849:11:42"},{"AST":{"nativeSrc":"930:67:42","nodeType":"YulBlock","src":"930:67:42","statements":[{"nativeSrc":"948:35:42","nodeType":"YulAssignment","src":"948:35:42","value":{"arguments":[{"name":"buffer","nativeSrc":"959:6:42","nodeType":"YulIdentifier","src":"959:6:42"},{"arguments":[{"kind":"number","nativeSrc":"971:2:42","nodeType":"YulLiteral","src":"971:2:42","type":"","value":"32"},{"name":"length","nativeSrc":"975:6:42","nodeType":"YulIdentifier","src":"975:6:42"}],"functionName":{"name":"add","nativeSrc":"967:3:42","nodeType":"YulIdentifier","src":"967:3:42"},"nativeSrc":"967:15:42","nodeType":"YulFunctionCall","src":"967:15:42"}],"functionName":{"name":"add","nativeSrc":"955:3:42","nodeType":"YulIdentifier","src":"955:3:42"},"nativeSrc":"955:28:42","nodeType":"YulFunctionCall","src":"955:28:42"},"variableNames":[{"name":"ptr","nativeSrc":"948:3:42","nodeType":"YulIdentifier","src":"948:3:42"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":8018,"isOffset":false,"isSlot":false,"src":"959:6:42","valueSize":1},{"declaration":8009,"isOffset":false,"isSlot":false,"src":"975:6:42","valueSize":1},{"declaration":8025,"isOffset":false,"isSlot":false,"src":"948:3:42","valueSize":1}],"id":8027,"nodeType":"InlineAssembly","src":"921:76:42"},{"body":{"id":8042,"nodeType":"Block","src":"1023:269:42","statements":[{"expression":{"id":8030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":false,"src":"1041:5:42","subExpression":{"id":8029,"name":"ptr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8025,"src":"1041:3:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8031,"nodeType":"ExpressionStatement","src":"1041:5:42"},{"AST":{"nativeSrc":"1124:86:42","nodeType":"YulBlock","src":"1124:86:42","statements":[{"expression":{"arguments":[{"name":"ptr","nativeSrc":"1154:3:42","nodeType":"YulIdentifier","src":"1154:3:42"},{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1168:5:42","nodeType":"YulIdentifier","src":"1168:5:42"},{"kind":"number","nativeSrc":"1175:2:42","nodeType":"YulLiteral","src":"1175:2:42","type":"","value":"10"}],"functionName":{"name":"mod","nativeSrc":"1164:3:42","nodeType":"YulIdentifier","src":"1164:3:42"},"nativeSrc":"1164:14:42","nodeType":"YulFunctionCall","src":"1164:14:42"},{"name":"HEX_DIGITS","nativeSrc":"1180:10:42","nodeType":"YulIdentifier","src":"1180:10:42"}],"functionName":{"name":"byte","nativeSrc":"1159:4:42","nodeType":"YulIdentifier","src":"1159:4:42"},"nativeSrc":"1159:32:42","nodeType":"YulFunctionCall","src":"1159:32:42"}],"functionName":{"name":"mstore8","nativeSrc":"1146:7:42","nodeType":"YulIdentifier","src":"1146:7:42"},"nativeSrc":"1146:46:42","nodeType":"YulFunctionCall","src":"1146:46:42"},"nativeSrc":"1146:46:42","nodeType":"YulExpressionStatement","src":"1146:46:42"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7990,"isOffset":false,"isSlot":false,"src":"1180:10:42","valueSize":1},{"declaration":8025,"isOffset":false,"isSlot":false,"src":"1154:3:42","valueSize":1},{"declaration":8003,"isOffset":false,"isSlot":false,"src":"1168:5:42","valueSize":1}],"id":8032,"nodeType":"InlineAssembly","src":"1115:95:42"},{"expression":{"id":8035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8033,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8003,"src":"1227:5:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"hexValue":"3130","id":8034,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1236:2:42","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"1227:11:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8036,"nodeType":"ExpressionStatement","src":"1227:11:42"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8037,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8003,"src":"1260:5:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":8038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1269:1:42","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1260:10:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8041,"nodeType":"IfStatement","src":"1256:21:42","trueBody":{"id":8040,"nodeType":"Break","src":"1272:5:42"}}]},"condition":{"hexValue":"74727565","id":8028,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1017:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"id":8043,"nodeType":"WhileStatement","src":"1010:282:42"},{"expression":{"id":8044,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8018,"src":"1312:6:42","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":8007,"id":8045,"nodeType":"Return","src":"1305:13:42"}]}]},"documentation":{"id":8001,"nodeType":"StructuredDocumentation","src":"542:90:42","text":" @dev Converts a `uint256` to its ASCII `string` decimal representation."},"id":8048,"implemented":true,"kind":"function","modifiers":[],"name":"toString","nameLocation":"646:8:42","nodeType":"FunctionDefinition","parameters":{"id":8004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8003,"mutability":"mutable","name":"value","nameLocation":"663:5:42","nodeType":"VariableDeclaration","scope":8048,"src":"655:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8002,"name":"uint256","nodeType":"ElementaryTypeName","src":"655:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"654:15:42"},"returnParameters":{"id":8007,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8006,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8048,"src":"693:13:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8005,"name":"string","nodeType":"ElementaryTypeName","src":"693:6:42","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"692:15:42"},"scope":8235,"src":"637:698:42","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8073,"nodeType":"Block","src":"1511:92:42","statements":[{"expression":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8059,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8051,"src":"1542:5:42","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":8060,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1550:1:42","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1542:9:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"","id":8063,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1560:2:42","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},"id":8064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"1542:20:42","trueExpression":{"hexValue":"2d","id":8062,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1554:3:42","typeDescriptions":{"typeIdentifier":"t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561","typeString":"literal_string \"-\""},"value":"-"},"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"arguments":[{"arguments":[{"id":8068,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8051,"src":"1588:5:42","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"expression":{"id":8066,"name":"SignedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11834,"src":"1573:10:42","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SignedMath_$11834_$","typeString":"type(library SignedMath)"}},"id":8067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1584:3:42","memberName":"abs","nodeType":"MemberAccess","referencedDeclaration":11833,"src":"1573:14:42","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$","typeString":"function (int256) pure returns (uint256)"}},"id":8069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1573:21:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8065,"name":"toString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8048,"src":"1564:8:42","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256) pure returns (string memory)"}},"id":8070,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1564:31:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":8057,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1528:6:42","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":8056,"name":"string","nodeType":"ElementaryTypeName","src":"1528:6:42","typeDescriptions":{}}},"id":8058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1535:6:42","memberName":"concat","nodeType":"MemberAccess","src":"1528:13:42","typeDescriptions":{"typeIdentifier":"t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$","typeString":"function () pure returns (string memory)"}},"id":8071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1528:68:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":8055,"id":8072,"nodeType":"Return","src":"1521:75:42"}]},"documentation":{"id":8049,"nodeType":"StructuredDocumentation","src":"1341:89:42","text":" @dev Converts a `int256` to its ASCII `string` decimal representation."},"id":8074,"implemented":true,"kind":"function","modifiers":[],"name":"toStringSigned","nameLocation":"1444:14:42","nodeType":"FunctionDefinition","parameters":{"id":8052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8051,"mutability":"mutable","name":"value","nameLocation":"1466:5:42","nodeType":"VariableDeclaration","scope":8074,"src":"1459:12:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8050,"name":"int256","nodeType":"ElementaryTypeName","src":"1459:6:42","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1458:14:42"},"returnParameters":{"id":8055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8054,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8074,"src":"1496:13:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8053,"name":"string","nodeType":"ElementaryTypeName","src":"1496:6:42","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1495:15:42"},"scope":8235,"src":"1435:168:42","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8093,"nodeType":"Block","src":"1782:100:42","statements":[{"id":8092,"nodeType":"UncheckedBlock","src":"1792:84:42","statements":[{"expression":{"arguments":[{"id":8083,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8077,"src":"1835:5:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":8086,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8077,"src":"1854:5:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8084,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9974,"src":"1842:4:42","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$9974_$","typeString":"type(library Math)"}},"id":8085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1847:6:42","memberName":"log256","nodeType":"MemberAccess","referencedDeclaration":9916,"src":"1842:11:42","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":8087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1842:18:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":8088,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1863:1:42","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1842:22:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8082,"name":"toHexString","nodeType":"Identifier","overloadedDeclarations":[8094,8177,8197],"referencedDeclaration":8177,"src":"1823:11:42","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (string memory)"}},"id":8090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1823:42:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":8081,"id":8091,"nodeType":"Return","src":"1816:49:42"}]}]},"documentation":{"id":8075,"nodeType":"StructuredDocumentation","src":"1609:94:42","text":" @dev Converts a `uint256` to its ASCII `string` hexadecimal representation."},"id":8094,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"1717:11:42","nodeType":"FunctionDefinition","parameters":{"id":8078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8077,"mutability":"mutable","name":"value","nameLocation":"1737:5:42","nodeType":"VariableDeclaration","scope":8094,"src":"1729:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8076,"name":"uint256","nodeType":"ElementaryTypeName","src":"1729:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1728:15:42"},"returnParameters":{"id":8081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8080,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8094,"src":"1767:13:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8079,"name":"string","nodeType":"ElementaryTypeName","src":"1767:6:42","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1766:15:42"},"scope":8235,"src":"1708:174:42","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8176,"nodeType":"Block","src":"2095:435:42","statements":[{"assignments":[8105],"declarations":[{"constant":false,"id":8105,"mutability":"mutable","name":"localValue","nameLocation":"2113:10:42","nodeType":"VariableDeclaration","scope":8176,"src":"2105:18:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8104,"name":"uint256","nodeType":"ElementaryTypeName","src":"2105:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8107,"initialValue":{"id":8106,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8097,"src":"2126:5:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2105:26:42"},{"assignments":[8109],"declarations":[{"constant":false,"id":8109,"mutability":"mutable","name":"buffer","nameLocation":"2154:6:42","nodeType":"VariableDeclaration","scope":8176,"src":"2141:19:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":8108,"name":"bytes","nodeType":"ElementaryTypeName","src":"2141:5:42","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":8118,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":8112,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2173:1:42","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8113,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8099,"src":"2177:6:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2173:10:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"32","id":8115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2186:1:42","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"2173:14:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8111,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2163:9:42","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":8110,"name":"bytes","nodeType":"ElementaryTypeName","src":"2167:5:42","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":8117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2163:25:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"2141:47:42"},{"expression":{"id":8123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8119,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8109,"src":"2198:6:42","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8121,"indexExpression":{"hexValue":"30","id":8120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2205:1:42","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2198:9:42","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":8122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2210:3:42","typeDescriptions":{"typeIdentifier":"t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d","typeString":"literal_string \"0\""},"value":"0"},"src":"2198:15:42","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":8124,"nodeType":"ExpressionStatement","src":"2198:15:42"},{"expression":{"id":8129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8125,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8109,"src":"2223:6:42","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8127,"indexExpression":{"hexValue":"31","id":8126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2230:1:42","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2223:9:42","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"78","id":8128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2235:3:42","typeDescriptions":{"typeIdentifier":"t_stringliteral_7521d1cadbcfa91eec65aa16715b94ffc1c9654ba57ea2ef1a2127bca1127a83","typeString":"literal_string \"x\""},"value":"x"},"src":"2223:15:42","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":8130,"nodeType":"ExpressionStatement","src":"2223:15:42"},{"body":{"id":8159,"nodeType":"Block","src":"2293:95:42","statements":[{"expression":{"id":8153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8145,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8109,"src":"2307:6:42","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8147,"indexExpression":{"id":8146,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8132,"src":"2314:1:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2307:9:42","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":8148,"name":"HEX_DIGITS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7990,"src":"2319:10:42","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"id":8152,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8149,"name":"localValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8105,"src":"2330:10:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307866","id":8150,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2343:3:42","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"0xf"},"src":"2330:16:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2319:28:42","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"2307:40:42","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":8154,"nodeType":"ExpressionStatement","src":"2307:40:42"},{"expression":{"id":8157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8155,"name":"localValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8105,"src":"2361:10:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"34","id":8156,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2376:1:42","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"2361:16:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8158,"nodeType":"ExpressionStatement","src":"2361:16:42"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8139,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8132,"src":"2281:1:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"31","id":8140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2285:1:42","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2281:5:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8160,"initializationExpression":{"assignments":[8132],"declarations":[{"constant":false,"id":8132,"mutability":"mutable","name":"i","nameLocation":"2261:1:42","nodeType":"VariableDeclaration","scope":8160,"src":"2253:9:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8131,"name":"uint256","nodeType":"ElementaryTypeName","src":"2253:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8138,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":8133,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2265:1:42","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8134,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8099,"src":"2269:6:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2265:10:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":8136,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2278:1:42","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2265:14:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2253:26:42"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":8143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":true,"src":"2288:3:42","subExpression":{"id":8142,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8132,"src":"2290:1:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8144,"nodeType":"ExpressionStatement","src":"2288:3:42"},"nodeType":"ForStatement","src":"2248:140:42"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8161,"name":"localValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8105,"src":"2401:10:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":8162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2415:1:42","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2401:15:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8170,"nodeType":"IfStatement","src":"2397:96:42","trueBody":{"id":8169,"nodeType":"Block","src":"2418:75:42","statements":[{"errorCall":{"arguments":[{"id":8165,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8097,"src":"2468:5:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8166,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8099,"src":"2475:6:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8164,"name":"StringsInsufficientHexLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8000,"src":"2439:28:42","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":8167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2439:43:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8168,"nodeType":"RevertStatement","src":"2432:50:42"}]}},{"expression":{"arguments":[{"id":8173,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8109,"src":"2516:6:42","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":8172,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2509:6:42","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":8171,"name":"string","nodeType":"ElementaryTypeName","src":"2509:6:42","typeDescriptions":{}}},"id":8174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2509:14:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":8103,"id":8175,"nodeType":"Return","src":"2502:21:42"}]},"documentation":{"id":8095,"nodeType":"StructuredDocumentation","src":"1888:112:42","text":" @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length."},"id":8177,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"2014:11:42","nodeType":"FunctionDefinition","parameters":{"id":8100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8097,"mutability":"mutable","name":"value","nameLocation":"2034:5:42","nodeType":"VariableDeclaration","scope":8177,"src":"2026:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8096,"name":"uint256","nodeType":"ElementaryTypeName","src":"2026:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8099,"mutability":"mutable","name":"length","nameLocation":"2049:6:42","nodeType":"VariableDeclaration","scope":8177,"src":"2041:14:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8098,"name":"uint256","nodeType":"ElementaryTypeName","src":"2041:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2025:31:42"},"returnParameters":{"id":8103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8102,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8177,"src":"2080:13:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8101,"name":"string","nodeType":"ElementaryTypeName","src":"2080:6:42","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2079:15:42"},"scope":8235,"src":"2005:525:42","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8196,"nodeType":"Block","src":"2762:75:42","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":8190,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8180,"src":"2807:4:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8189,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2799:7:42","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":8188,"name":"uint160","nodeType":"ElementaryTypeName","src":"2799:7:42","typeDescriptions":{}}},"id":8191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2799:13:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":8187,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2791:7:42","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":8186,"name":"uint256","nodeType":"ElementaryTypeName","src":"2791:7:42","typeDescriptions":{}}},"id":8192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2791:22:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8193,"name":"ADDRESS_LENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7993,"src":"2815:14:42","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":8185,"name":"toHexString","nodeType":"Identifier","overloadedDeclarations":[8094,8177,8197],"referencedDeclaration":8177,"src":"2779:11:42","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (string memory)"}},"id":8194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2779:51:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":8184,"id":8195,"nodeType":"Return","src":"2772:58:42"}]},"documentation":{"id":8178,"nodeType":"StructuredDocumentation","src":"2536:148:42","text":" @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n representation."},"id":8197,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"2698:11:42","nodeType":"FunctionDefinition","parameters":{"id":8181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8180,"mutability":"mutable","name":"addr","nameLocation":"2718:4:42","nodeType":"VariableDeclaration","scope":8197,"src":"2710:12:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8179,"name":"address","nodeType":"ElementaryTypeName","src":"2710:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2709:14:42"},"returnParameters":{"id":8184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8183,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8197,"src":"2747:13:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8182,"name":"string","nodeType":"ElementaryTypeName","src":"2747:6:42","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2746:15:42"},"scope":8235,"src":"2689:148:42","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8233,"nodeType":"Block","src":"2992:104:42","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":8209,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8200,"src":"3015:1:42","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8208,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3009:5:42","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8207,"name":"bytes","nodeType":"ElementaryTypeName","src":"3009:5:42","typeDescriptions":{}}},"id":8210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3009:8:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3018:6:42","memberName":"length","nodeType":"MemberAccess","src":"3009:15:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":8214,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8202,"src":"3034:1:42","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8213,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3028:5:42","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8212,"name":"bytes","nodeType":"ElementaryTypeName","src":"3028:5:42","typeDescriptions":{}}},"id":8215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3028:8:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3037:6:42","memberName":"length","nodeType":"MemberAccess","src":"3028:15:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3009:34:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":8230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":8221,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8200,"src":"3063:1:42","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8220,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3057:5:42","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8219,"name":"bytes","nodeType":"ElementaryTypeName","src":"3057:5:42","typeDescriptions":{}}},"id":8222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3057:8:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":8218,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3047:9:42","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":8223,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3047:19:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"arguments":[{"id":8227,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8202,"src":"3086:1:42","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8226,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3080:5:42","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8225,"name":"bytes","nodeType":"ElementaryTypeName","src":"3080:5:42","typeDescriptions":{}}},"id":8228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3080:8:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":8224,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3070:9:42","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":8229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3070:19:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3047:42:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3009:80:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":8206,"id":8232,"nodeType":"Return","src":"3002:87:42"}]},"documentation":{"id":8198,"nodeType":"StructuredDocumentation","src":"2843:66:42","text":" @dev Returns true if the two strings are equal."},"id":8234,"implemented":true,"kind":"function","modifiers":[],"name":"equal","nameLocation":"2923:5:42","nodeType":"FunctionDefinition","parameters":{"id":8203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8200,"mutability":"mutable","name":"a","nameLocation":"2943:1:42","nodeType":"VariableDeclaration","scope":8234,"src":"2929:15:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8199,"name":"string","nodeType":"ElementaryTypeName","src":"2929:6:42","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8202,"mutability":"mutable","name":"b","nameLocation":"2960:1:42","nodeType":"VariableDeclaration","scope":8234,"src":"2946:15:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8201,"name":"string","nodeType":"ElementaryTypeName","src":"2946:6:42","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2928:34:42"},"returnParameters":{"id":8206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8205,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8234,"src":"2986:4:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8204,"name":"bool","nodeType":"ElementaryTypeName","src":"2986:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2985:6:42"},"scope":8235,"src":"2914:182:42","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":8236,"src":"251:2847:42","usedErrors":[8000],"usedEvents":[]}],"src":"101:2998:42"},"id":42},"@openzeppelin/contracts/utils/cryptography/ECDSA.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/cryptography/ECDSA.sol","exportedSymbols":{"ECDSA":[8583]},"id":8584,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":8237,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"112:24:43"},{"abstract":false,"baseContracts":[],"canonicalName":"ECDSA","contractDependencies":[],"contractKind":"library","documentation":{"id":8238,"nodeType":"StructuredDocumentation","src":"138:205:43","text":" @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n These functions can be used to verify that a message was signed by the holder\n of the private keys of a given address."},"fullyImplemented":true,"id":8583,"linearizedBaseContracts":[8583],"name":"ECDSA","nameLocation":"352:5:43","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ECDSA.RecoverError","id":8243,"members":[{"id":8239,"name":"NoError","nameLocation":"392:7:43","nodeType":"EnumValue","src":"392:7:43"},{"id":8240,"name":"InvalidSignature","nameLocation":"409:16:43","nodeType":"EnumValue","src":"409:16:43"},{"id":8241,"name":"InvalidSignatureLength","nameLocation":"435:22:43","nodeType":"EnumValue","src":"435:22:43"},{"id":8242,"name":"InvalidSignatureS","nameLocation":"467:17:43","nodeType":"EnumValue","src":"467:17:43"}],"name":"RecoverError","nameLocation":"369:12:43","nodeType":"EnumDefinition","src":"364:126:43"},{"documentation":{"id":8244,"nodeType":"StructuredDocumentation","src":"496:63:43","text":" @dev The signature derives the `address(0)`."},"errorSelector":"f645eedf","id":8246,"name":"ECDSAInvalidSignature","nameLocation":"570:21:43","nodeType":"ErrorDefinition","parameters":{"id":8245,"nodeType":"ParameterList","parameters":[],"src":"591:2:43"},"src":"564:30:43"},{"documentation":{"id":8247,"nodeType":"StructuredDocumentation","src":"600:60:43","text":" @dev The signature has an invalid length."},"errorSelector":"fce698f7","id":8251,"name":"ECDSAInvalidSignatureLength","nameLocation":"671:27:43","nodeType":"ErrorDefinition","parameters":{"id":8250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8249,"mutability":"mutable","name":"length","nameLocation":"707:6:43","nodeType":"VariableDeclaration","scope":8251,"src":"699:14:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8248,"name":"uint256","nodeType":"ElementaryTypeName","src":"699:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"698:16:43"},"src":"665:50:43"},{"documentation":{"id":8252,"nodeType":"StructuredDocumentation","src":"721:85:43","text":" @dev The signature has an S value that is in the upper half order."},"errorSelector":"d78bce0c","id":8256,"name":"ECDSAInvalidSignatureS","nameLocation":"817:22:43","nodeType":"ErrorDefinition","parameters":{"id":8255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8254,"mutability":"mutable","name":"s","nameLocation":"848:1:43","nodeType":"VariableDeclaration","scope":8256,"src":"840:9:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8253,"name":"bytes32","nodeType":"ElementaryTypeName","src":"840:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"839:11:43"},"src":"811:40:43"},{"body":{"id":8308,"nodeType":"Block","src":"2242:653:43","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":8271,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8261,"src":"2256:9:43","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2266:6:43","memberName":"length","nodeType":"MemberAccess","src":"2256:16:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3635","id":8273,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2276:2:43","typeDescriptions":{"typeIdentifier":"t_rational_65_by_1","typeString":"int_const 65"},"value":"65"},"src":"2256:22:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8306,"nodeType":"Block","src":"2781:108:43","statements":[{"expression":{"components":[{"arguments":[{"hexValue":"30","id":8295,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2811:1:43","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8294,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2803:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8293,"name":"address","nodeType":"ElementaryTypeName","src":"2803:7:43","typeDescriptions":{}}},"id":8296,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2803:10:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":8297,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8243,"src":"2815:12:43","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$8243_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":8298,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2828:22:43","memberName":"InvalidSignatureLength","nodeType":"MemberAccess","referencedDeclaration":8241,"src":"2815:35:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},{"arguments":[{"expression":{"id":8301,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8261,"src":"2860:9:43","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2870:6:43","memberName":"length","nodeType":"MemberAccess","src":"2860:16:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8300,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2852:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":8299,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2852:7:43","typeDescriptions":{}}},"id":8303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2852:25:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":8304,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2802:76:43","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$8243_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"functionReturnParameters":8270,"id":8305,"nodeType":"Return","src":"2795:83:43"}]},"id":8307,"nodeType":"IfStatement","src":"2252:637:43","trueBody":{"id":8292,"nodeType":"Block","src":"2280:495:43","statements":[{"assignments":[8276],"declarations":[{"constant":false,"id":8276,"mutability":"mutable","name":"r","nameLocation":"2302:1:43","nodeType":"VariableDeclaration","scope":8292,"src":"2294:9:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8275,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2294:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":8277,"nodeType":"VariableDeclarationStatement","src":"2294:9:43"},{"assignments":[8279],"declarations":[{"constant":false,"id":8279,"mutability":"mutable","name":"s","nameLocation":"2325:1:43","nodeType":"VariableDeclaration","scope":8292,"src":"2317:9:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8278,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2317:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":8280,"nodeType":"VariableDeclarationStatement","src":"2317:9:43"},{"assignments":[8282],"declarations":[{"constant":false,"id":8282,"mutability":"mutable","name":"v","nameLocation":"2346:1:43","nodeType":"VariableDeclaration","scope":8292,"src":"2340:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8281,"name":"uint8","nodeType":"ElementaryTypeName","src":"2340:5:43","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":8283,"nodeType":"VariableDeclarationStatement","src":"2340:7:43"},{"AST":{"nativeSrc":"2548:171:43","nodeType":"YulBlock","src":"2548:171:43","statements":[{"nativeSrc":"2566:32:43","nodeType":"YulAssignment","src":"2566:32:43","value":{"arguments":[{"arguments":[{"name":"signature","nativeSrc":"2581:9:43","nodeType":"YulIdentifier","src":"2581:9:43"},{"kind":"number","nativeSrc":"2592:4:43","nodeType":"YulLiteral","src":"2592:4:43","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2577:3:43","nodeType":"YulIdentifier","src":"2577:3:43"},"nativeSrc":"2577:20:43","nodeType":"YulFunctionCall","src":"2577:20:43"}],"functionName":{"name":"mload","nativeSrc":"2571:5:43","nodeType":"YulIdentifier","src":"2571:5:43"},"nativeSrc":"2571:27:43","nodeType":"YulFunctionCall","src":"2571:27:43"},"variableNames":[{"name":"r","nativeSrc":"2566:1:43","nodeType":"YulIdentifier","src":"2566:1:43"}]},{"nativeSrc":"2615:32:43","nodeType":"YulAssignment","src":"2615:32:43","value":{"arguments":[{"arguments":[{"name":"signature","nativeSrc":"2630:9:43","nodeType":"YulIdentifier","src":"2630:9:43"},{"kind":"number","nativeSrc":"2641:4:43","nodeType":"YulLiteral","src":"2641:4:43","type":"","value":"0x40"}],"functionName":{"name":"add","nativeSrc":"2626:3:43","nodeType":"YulIdentifier","src":"2626:3:43"},"nativeSrc":"2626:20:43","nodeType":"YulFunctionCall","src":"2626:20:43"}],"functionName":{"name":"mload","nativeSrc":"2620:5:43","nodeType":"YulIdentifier","src":"2620:5:43"},"nativeSrc":"2620:27:43","nodeType":"YulFunctionCall","src":"2620:27:43"},"variableNames":[{"name":"s","nativeSrc":"2615:1:43","nodeType":"YulIdentifier","src":"2615:1:43"}]},{"nativeSrc":"2664:41:43","nodeType":"YulAssignment","src":"2664:41:43","value":{"arguments":[{"kind":"number","nativeSrc":"2674:1:43","nodeType":"YulLiteral","src":"2674:1:43","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"signature","nativeSrc":"2687:9:43","nodeType":"YulIdentifier","src":"2687:9:43"},{"kind":"number","nativeSrc":"2698:4:43","nodeType":"YulLiteral","src":"2698:4:43","type":"","value":"0x60"}],"functionName":{"name":"add","nativeSrc":"2683:3:43","nodeType":"YulIdentifier","src":"2683:3:43"},"nativeSrc":"2683:20:43","nodeType":"YulFunctionCall","src":"2683:20:43"}],"functionName":{"name":"mload","nativeSrc":"2677:5:43","nodeType":"YulIdentifier","src":"2677:5:43"},"nativeSrc":"2677:27:43","nodeType":"YulFunctionCall","src":"2677:27:43"}],"functionName":{"name":"byte","nativeSrc":"2669:4:43","nodeType":"YulIdentifier","src":"2669:4:43"},"nativeSrc":"2669:36:43","nodeType":"YulFunctionCall","src":"2669:36:43"},"variableNames":[{"name":"v","nativeSrc":"2664:1:43","nodeType":"YulIdentifier","src":"2664:1:43"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":8276,"isOffset":false,"isSlot":false,"src":"2566:1:43","valueSize":1},{"declaration":8279,"isOffset":false,"isSlot":false,"src":"2615:1:43","valueSize":1},{"declaration":8261,"isOffset":false,"isSlot":false,"src":"2581:9:43","valueSize":1},{"declaration":8261,"isOffset":false,"isSlot":false,"src":"2630:9:43","valueSize":1},{"declaration":8261,"isOffset":false,"isSlot":false,"src":"2687:9:43","valueSize":1},{"declaration":8282,"isOffset":false,"isSlot":false,"src":"2664:1:43","valueSize":1}],"id":8284,"nodeType":"InlineAssembly","src":"2539:180:43"},{"expression":{"arguments":[{"id":8286,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8259,"src":"2750:4:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":8287,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8282,"src":"2756:1:43","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":8288,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8276,"src":"2759:1:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":8289,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8279,"src":"2762:1:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":8285,"name":"tryRecover","nodeType":"Identifier","overloadedDeclarations":[8309,8389,8497],"referencedDeclaration":8497,"src":"2739:10:43","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$8243_$_t_bytes32_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)"}},"id":8290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2739:25:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$8243_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"functionReturnParameters":8270,"id":8291,"nodeType":"Return","src":"2732:32:43"}]}}]},"documentation":{"id":8257,"nodeType":"StructuredDocumentation","src":"857:1267:43","text":" @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\n return address(0) without also returning an error description. Errors are documented using an enum (error type)\n and a bytes32 providing additional information about the error.\n If no error is returned, then the address can be used for verification purposes.\n The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n this function rejects them by requiring the `s` value to be in the lower\n half order, and the `v` value to be either 27 or 28.\n IMPORTANT: `hash` _must_ be the result of a hash operation for the\n verification to be secure: it is possible to craft signatures that\n recover to arbitrary addresses for non-hashed data. A safe way to ensure\n this is by receiving a hash of the original message (which may otherwise\n be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n Documentation for signature generation:\n - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]"},"id":8309,"implemented":true,"kind":"function","modifiers":[],"name":"tryRecover","nameLocation":"2138:10:43","nodeType":"FunctionDefinition","parameters":{"id":8262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8259,"mutability":"mutable","name":"hash","nameLocation":"2157:4:43","nodeType":"VariableDeclaration","scope":8309,"src":"2149:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8258,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2149:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":8261,"mutability":"mutable","name":"signature","nameLocation":"2176:9:43","nodeType":"VariableDeclaration","scope":8309,"src":"2163:22:43","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":8260,"name":"bytes","nodeType":"ElementaryTypeName","src":"2163:5:43","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2148:38:43"},"returnParameters":{"id":8270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8264,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8309,"src":"2210:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8263,"name":"address","nodeType":"ElementaryTypeName","src":"2210:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8267,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8309,"src":"2219:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":8266,"nodeType":"UserDefinedTypeName","pathNode":{"id":8265,"name":"RecoverError","nameLocations":["2219:12:43"],"nodeType":"IdentifierPath","referencedDeclaration":8243,"src":"2219:12:43"},"referencedDeclaration":8243,"src":"2219:12:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":8269,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8309,"src":"2233:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8268,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2233:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2209:32:43"},"scope":8583,"src":"2129:766:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8338,"nodeType":"Block","src":"3789:168:43","statements":[{"assignments":[8320,8323,8325],"declarations":[{"constant":false,"id":8320,"mutability":"mutable","name":"recovered","nameLocation":"3808:9:43","nodeType":"VariableDeclaration","scope":8338,"src":"3800:17:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8319,"name":"address","nodeType":"ElementaryTypeName","src":"3800:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8323,"mutability":"mutable","name":"error","nameLocation":"3832:5:43","nodeType":"VariableDeclaration","scope":8338,"src":"3819:18:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":8322,"nodeType":"UserDefinedTypeName","pathNode":{"id":8321,"name":"RecoverError","nameLocations":["3819:12:43"],"nodeType":"IdentifierPath","referencedDeclaration":8243,"src":"3819:12:43"},"referencedDeclaration":8243,"src":"3819:12:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":8325,"mutability":"mutable","name":"errorArg","nameLocation":"3847:8:43","nodeType":"VariableDeclaration","scope":8338,"src":"3839:16:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8324,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3839:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":8330,"initialValue":{"arguments":[{"id":8327,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8312,"src":"3870:4:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":8328,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8314,"src":"3876:9:43","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":8326,"name":"tryRecover","nodeType":"Identifier","overloadedDeclarations":[8309,8389,8497],"referencedDeclaration":8309,"src":"3859:10:43","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$_t_enum$_RecoverError_$8243_$_t_bytes32_$","typeString":"function (bytes32,bytes memory) pure returns (address,enum ECDSA.RecoverError,bytes32)"}},"id":8329,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3859:27:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$8243_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"3799:87:43"},{"expression":{"arguments":[{"id":8332,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8323,"src":"3908:5:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},{"id":8333,"name":"errorArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8325,"src":"3915:8:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":8331,"name":"_throwError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8582,"src":"3896:11:43","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_RecoverError_$8243_$_t_bytes32_$returns$__$","typeString":"function (enum ECDSA.RecoverError,bytes32) pure"}},"id":8334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3896:28:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8335,"nodeType":"ExpressionStatement","src":"3896:28:43"},{"expression":{"id":8336,"name":"recovered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8320,"src":"3941:9:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":8318,"id":8337,"nodeType":"Return","src":"3934:16:43"}]},"documentation":{"id":8310,"nodeType":"StructuredDocumentation","src":"2901:796:43","text":" @dev Returns the address that signed a hashed message (`hash`) with\n `signature`. This address can then be used for verification purposes.\n The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n this function rejects them by requiring the `s` value to be in the lower\n half order, and the `v` value to be either 27 or 28.\n IMPORTANT: `hash` _must_ be the result of a hash operation for the\n verification to be secure: it is possible to craft signatures that\n recover to arbitrary addresses for non-hashed data. A safe way to ensure\n this is by receiving a hash of the original message (which may otherwise\n be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it."},"id":8339,"implemented":true,"kind":"function","modifiers":[],"name":"recover","nameLocation":"3711:7:43","nodeType":"FunctionDefinition","parameters":{"id":8315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8312,"mutability":"mutable","name":"hash","nameLocation":"3727:4:43","nodeType":"VariableDeclaration","scope":8339,"src":"3719:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8311,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3719:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":8314,"mutability":"mutable","name":"signature","nameLocation":"3746:9:43","nodeType":"VariableDeclaration","scope":8339,"src":"3733:22:43","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":8313,"name":"bytes","nodeType":"ElementaryTypeName","src":"3733:5:43","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3718:38:43"},"returnParameters":{"id":8318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8317,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8339,"src":"3780:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8316,"name":"address","nodeType":"ElementaryTypeName","src":"3780:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3779:9:43"},"scope":8583,"src":"3702:255:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8388,"nodeType":"Block","src":"4285:342:43","statements":[{"id":8387,"nodeType":"UncheckedBlock","src":"4295:326:43","statements":[{"assignments":[8357],"declarations":[{"constant":false,"id":8357,"mutability":"mutable","name":"s","nameLocation":"4327:1:43","nodeType":"VariableDeclaration","scope":8387,"src":"4319:9:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8356,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4319:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":8364,"initialValue":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":8363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8358,"name":"vs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8346,"src":"4331:2:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"arguments":[{"hexValue":"307837666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666","id":8361,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4344:66:43","typeDescriptions":{"typeIdentifier":"t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819967_by_1","typeString":"int_const 5789...(69 digits omitted)...9967"},"value":"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819967_by_1","typeString":"int_const 5789...(69 digits omitted)...9967"}],"id":8360,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4336:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":8359,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4336:7:43","typeDescriptions":{}}},"id":8362,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4336:75:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4331:80:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4319:92:43"},{"assignments":[8366],"declarations":[{"constant":false,"id":8366,"mutability":"mutable","name":"v","nameLocation":"4528:1:43","nodeType":"VariableDeclaration","scope":8387,"src":"4522:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8365,"name":"uint8","nodeType":"ElementaryTypeName","src":"4522:5:43","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":8379,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":8371,"name":"vs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8346,"src":"4547:2:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":8370,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4539:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":8369,"name":"uint256","nodeType":"ElementaryTypeName","src":"4539:7:43","typeDescriptions":{}}},"id":8372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4539:11:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":8373,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4554:3:43","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"4539:18:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8375,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4538:20:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"3237","id":8376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4561:2:43","typeDescriptions":{"typeIdentifier":"t_rational_27_by_1","typeString":"int_const 27"},"value":"27"},"src":"4538:25:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8368,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4532:5:43","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":8367,"name":"uint8","nodeType":"ElementaryTypeName","src":"4532:5:43","typeDescriptions":{}}},"id":8378,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4532:32:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"4522:42:43"},{"expression":{"arguments":[{"id":8381,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8342,"src":"4596:4:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":8382,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8366,"src":"4602:1:43","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":8383,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8344,"src":"4605:1:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":8384,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8357,"src":"4608:1:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":8380,"name":"tryRecover","nodeType":"Identifier","overloadedDeclarations":[8309,8389,8497],"referencedDeclaration":8497,"src":"4585:10:43","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$8243_$_t_bytes32_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)"}},"id":8385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4585:25:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$8243_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"functionReturnParameters":8355,"id":8386,"nodeType":"Return","src":"4578:32:43"}]}]},"documentation":{"id":8340,"nodeType":"StructuredDocumentation","src":"3963:205:43","text":" @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]"},"id":8389,"implemented":true,"kind":"function","modifiers":[],"name":"tryRecover","nameLocation":"4182:10:43","nodeType":"FunctionDefinition","parameters":{"id":8347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8342,"mutability":"mutable","name":"hash","nameLocation":"4201:4:43","nodeType":"VariableDeclaration","scope":8389,"src":"4193:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8341,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4193:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":8344,"mutability":"mutable","name":"r","nameLocation":"4215:1:43","nodeType":"VariableDeclaration","scope":8389,"src":"4207:9:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8343,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4207:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":8346,"mutability":"mutable","name":"vs","nameLocation":"4226:2:43","nodeType":"VariableDeclaration","scope":8389,"src":"4218:10:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8345,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4218:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4192:37:43"},"returnParameters":{"id":8355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8349,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8389,"src":"4253:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8348,"name":"address","nodeType":"ElementaryTypeName","src":"4253:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8352,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8389,"src":"4262:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":8351,"nodeType":"UserDefinedTypeName","pathNode":{"id":8350,"name":"RecoverError","nameLocations":["4262:12:43"],"nodeType":"IdentifierPath","referencedDeclaration":8243,"src":"4262:12:43"},"referencedDeclaration":8243,"src":"4262:12:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":8354,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8389,"src":"4276:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8353,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4276:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4252:32:43"},"scope":8583,"src":"4173:454:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8421,"nodeType":"Block","src":"4840:164:43","statements":[{"assignments":[8402,8405,8407],"declarations":[{"constant":false,"id":8402,"mutability":"mutable","name":"recovered","nameLocation":"4859:9:43","nodeType":"VariableDeclaration","scope":8421,"src":"4851:17:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8401,"name":"address","nodeType":"ElementaryTypeName","src":"4851:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8405,"mutability":"mutable","name":"error","nameLocation":"4883:5:43","nodeType":"VariableDeclaration","scope":8421,"src":"4870:18:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":8404,"nodeType":"UserDefinedTypeName","pathNode":{"id":8403,"name":"RecoverError","nameLocations":["4870:12:43"],"nodeType":"IdentifierPath","referencedDeclaration":8243,"src":"4870:12:43"},"referencedDeclaration":8243,"src":"4870:12:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":8407,"mutability":"mutable","name":"errorArg","nameLocation":"4898:8:43","nodeType":"VariableDeclaration","scope":8421,"src":"4890:16:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8406,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4890:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":8413,"initialValue":{"arguments":[{"id":8409,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8392,"src":"4921:4:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":8410,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8394,"src":"4927:1:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":8411,"name":"vs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8396,"src":"4930:2:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":8408,"name":"tryRecover","nodeType":"Identifier","overloadedDeclarations":[8309,8389,8497],"referencedDeclaration":8389,"src":"4910:10:43","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$8243_$_t_bytes32_$","typeString":"function (bytes32,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)"}},"id":8412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4910:23:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$8243_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"4850:83:43"},{"expression":{"arguments":[{"id":8415,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8405,"src":"4955:5:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},{"id":8416,"name":"errorArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8407,"src":"4962:8:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":8414,"name":"_throwError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8582,"src":"4943:11:43","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_RecoverError_$8243_$_t_bytes32_$returns$__$","typeString":"function (enum ECDSA.RecoverError,bytes32) pure"}},"id":8417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4943:28:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8418,"nodeType":"ExpressionStatement","src":"4943:28:43"},{"expression":{"id":8419,"name":"recovered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8402,"src":"4988:9:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":8400,"id":8420,"nodeType":"Return","src":"4981:16:43"}]},"documentation":{"id":8390,"nodeType":"StructuredDocumentation","src":"4633:116:43","text":" @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately."},"id":8422,"implemented":true,"kind":"function","modifiers":[],"name":"recover","nameLocation":"4763:7:43","nodeType":"FunctionDefinition","parameters":{"id":8397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8392,"mutability":"mutable","name":"hash","nameLocation":"4779:4:43","nodeType":"VariableDeclaration","scope":8422,"src":"4771:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8391,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4771:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":8394,"mutability":"mutable","name":"r","nameLocation":"4793:1:43","nodeType":"VariableDeclaration","scope":8422,"src":"4785:9:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8393,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4785:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":8396,"mutability":"mutable","name":"vs","nameLocation":"4804:2:43","nodeType":"VariableDeclaration","scope":8422,"src":"4796:10:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8395,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4796:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4770:37:43"},"returnParameters":{"id":8400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8399,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8422,"src":"4831:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8398,"name":"address","nodeType":"ElementaryTypeName","src":"4831:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4830:9:43"},"scope":8583,"src":"4754:250:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8496,"nodeType":"Block","src":"5298:1372:43","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":8443,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8431,"src":"6194:1:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":8442,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6186:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":8441,"name":"uint256","nodeType":"ElementaryTypeName","src":"6186:7:43","typeDescriptions":{}}},"id":8444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6186:10:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307837464646464646464646464646464646464646464646464646464646464646463544353736453733353741343530314444464539324634363638314232304130","id":8445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6199:66:43","typeDescriptions":{"typeIdentifier":"t_rational_57896044618658097711785492504343953926418782139537452191302581570759080747168_by_1","typeString":"int_const 5789...(69 digits omitted)...7168"},"value":"0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0"},"src":"6186:79:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8457,"nodeType":"IfStatement","src":"6182:164:43","trueBody":{"id":8456,"nodeType":"Block","src":"6267:79:43","statements":[{"expression":{"components":[{"arguments":[{"hexValue":"30","id":8449,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6297:1:43","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8448,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6289:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8447,"name":"address","nodeType":"ElementaryTypeName","src":"6289:7:43","typeDescriptions":{}}},"id":8450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6289:10:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":8451,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8243,"src":"6301:12:43","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$8243_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":8452,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6314:17:43","memberName":"InvalidSignatureS","nodeType":"MemberAccess","referencedDeclaration":8242,"src":"6301:30:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},{"id":8453,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8431,"src":"6333:1:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":8454,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6288:47:43","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$8243_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"functionReturnParameters":8440,"id":8455,"nodeType":"Return","src":"6281:54:43"}]}},{"assignments":[8459],"declarations":[{"constant":false,"id":8459,"mutability":"mutable","name":"signer","nameLocation":"6448:6:43","nodeType":"VariableDeclaration","scope":8496,"src":"6440:14:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8458,"name":"address","nodeType":"ElementaryTypeName","src":"6440:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":8466,"initialValue":{"arguments":[{"id":8461,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8425,"src":"6467:4:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":8462,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8427,"src":"6473:1:43","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":8463,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8429,"src":"6476:1:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":8464,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8431,"src":"6479:1:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":8460,"name":"ecrecover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-6,"src":"6457:9:43","typeDescriptions":{"typeIdentifier":"t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address)"}},"id":8465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6457:24:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6440:41:43"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8467,"name":"signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8459,"src":"6495:6:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":8470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6513:1:43","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8469,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6505:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8468,"name":"address","nodeType":"ElementaryTypeName","src":"6505:7:43","typeDescriptions":{}}},"id":8471,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6505:10:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6495:20:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8486,"nodeType":"IfStatement","src":"6491:113:43","trueBody":{"id":8485,"nodeType":"Block","src":"6517:87:43","statements":[{"expression":{"components":[{"arguments":[{"hexValue":"30","id":8475,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6547:1:43","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8474,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6539:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8473,"name":"address","nodeType":"ElementaryTypeName","src":"6539:7:43","typeDescriptions":{}}},"id":8476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6539:10:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":8477,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8243,"src":"6551:12:43","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$8243_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":8478,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6564:16:43","memberName":"InvalidSignature","nodeType":"MemberAccess","referencedDeclaration":8240,"src":"6551:29:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},{"arguments":[{"hexValue":"30","id":8481,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6590:1:43","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8480,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6582:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":8479,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6582:7:43","typeDescriptions":{}}},"id":8482,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6582:10:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":8483,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6538:55:43","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$8243_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"functionReturnParameters":8440,"id":8484,"nodeType":"Return","src":"6531:62:43"}]}},{"expression":{"components":[{"id":8487,"name":"signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8459,"src":"6622:6:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":8488,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8243,"src":"6630:12:43","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$8243_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":8489,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6643:7:43","memberName":"NoError","nodeType":"MemberAccess","referencedDeclaration":8239,"src":"6630:20:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},{"arguments":[{"hexValue":"30","id":8492,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6660:1:43","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8491,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6652:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":8490,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6652:7:43","typeDescriptions":{}}},"id":8493,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6652:10:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":8494,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6621:42:43","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$8243_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"functionReturnParameters":8440,"id":8495,"nodeType":"Return","src":"6614:49:43"}]},"documentation":{"id":8423,"nodeType":"StructuredDocumentation","src":"5010:125:43","text":" @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n `r` and `s` signature fields separately."},"id":8497,"implemented":true,"kind":"function","modifiers":[],"name":"tryRecover","nameLocation":"5149:10:43","nodeType":"FunctionDefinition","parameters":{"id":8432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8425,"mutability":"mutable","name":"hash","nameLocation":"5177:4:43","nodeType":"VariableDeclaration","scope":8497,"src":"5169:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8424,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5169:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":8427,"mutability":"mutable","name":"v","nameLocation":"5197:1:43","nodeType":"VariableDeclaration","scope":8497,"src":"5191:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8426,"name":"uint8","nodeType":"ElementaryTypeName","src":"5191:5:43","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":8429,"mutability":"mutable","name":"r","nameLocation":"5216:1:43","nodeType":"VariableDeclaration","scope":8497,"src":"5208:9:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8428,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5208:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":8431,"mutability":"mutable","name":"s","nameLocation":"5235:1:43","nodeType":"VariableDeclaration","scope":8497,"src":"5227:9:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8430,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5227:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5159:83:43"},"returnParameters":{"id":8440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8434,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8497,"src":"5266:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8433,"name":"address","nodeType":"ElementaryTypeName","src":"5266:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8437,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8497,"src":"5275:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":8436,"nodeType":"UserDefinedTypeName","pathNode":{"id":8435,"name":"RecoverError","nameLocations":["5275:12:43"],"nodeType":"IdentifierPath","referencedDeclaration":8243,"src":"5275:12:43"},"referencedDeclaration":8243,"src":"5275:12:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":8439,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8497,"src":"5289:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8438,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5289:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5265:32:43"},"scope":8583,"src":"5140:1530:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8532,"nodeType":"Block","src":"6897:166:43","statements":[{"assignments":[8512,8515,8517],"declarations":[{"constant":false,"id":8512,"mutability":"mutable","name":"recovered","nameLocation":"6916:9:43","nodeType":"VariableDeclaration","scope":8532,"src":"6908:17:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8511,"name":"address","nodeType":"ElementaryTypeName","src":"6908:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8515,"mutability":"mutable","name":"error","nameLocation":"6940:5:43","nodeType":"VariableDeclaration","scope":8532,"src":"6927:18:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":8514,"nodeType":"UserDefinedTypeName","pathNode":{"id":8513,"name":"RecoverError","nameLocations":["6927:12:43"],"nodeType":"IdentifierPath","referencedDeclaration":8243,"src":"6927:12:43"},"referencedDeclaration":8243,"src":"6927:12:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":8517,"mutability":"mutable","name":"errorArg","nameLocation":"6955:8:43","nodeType":"VariableDeclaration","scope":8532,"src":"6947:16:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8516,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6947:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":8524,"initialValue":{"arguments":[{"id":8519,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8500,"src":"6978:4:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":8520,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8502,"src":"6984:1:43","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":8521,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8504,"src":"6987:1:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":8522,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8506,"src":"6990:1:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":8518,"name":"tryRecover","nodeType":"Identifier","overloadedDeclarations":[8309,8389,8497],"referencedDeclaration":8497,"src":"6967:10:43","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$8243_$_t_bytes32_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)"}},"id":8523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6967:25:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$8243_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"6907:85:43"},{"expression":{"arguments":[{"id":8526,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8515,"src":"7014:5:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},{"id":8527,"name":"errorArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8517,"src":"7021:8:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":8525,"name":"_throwError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8582,"src":"7002:11:43","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_RecoverError_$8243_$_t_bytes32_$returns$__$","typeString":"function (enum ECDSA.RecoverError,bytes32) pure"}},"id":8528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7002:28:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8529,"nodeType":"ExpressionStatement","src":"7002:28:43"},{"expression":{"id":8530,"name":"recovered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8512,"src":"7047:9:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":8510,"id":8531,"nodeType":"Return","src":"7040:16:43"}]},"documentation":{"id":8498,"nodeType":"StructuredDocumentation","src":"6676:122:43","text":" @dev Overload of {ECDSA-recover} that receives the `v`,\n `r` and `s` signature fields separately."},"id":8533,"implemented":true,"kind":"function","modifiers":[],"name":"recover","nameLocation":"6812:7:43","nodeType":"FunctionDefinition","parameters":{"id":8507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8500,"mutability":"mutable","name":"hash","nameLocation":"6828:4:43","nodeType":"VariableDeclaration","scope":8533,"src":"6820:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8499,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6820:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":8502,"mutability":"mutable","name":"v","nameLocation":"6840:1:43","nodeType":"VariableDeclaration","scope":8533,"src":"6834:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8501,"name":"uint8","nodeType":"ElementaryTypeName","src":"6834:5:43","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":8504,"mutability":"mutable","name":"r","nameLocation":"6851:1:43","nodeType":"VariableDeclaration","scope":8533,"src":"6843:9:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8503,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6843:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":8506,"mutability":"mutable","name":"s","nameLocation":"6862:1:43","nodeType":"VariableDeclaration","scope":8533,"src":"6854:9:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8505,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6854:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6819:45:43"},"returnParameters":{"id":8510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8509,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8533,"src":"6888:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8508,"name":"address","nodeType":"ElementaryTypeName","src":"6888:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6887:9:43"},"scope":8583,"src":"6803:260:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8581,"nodeType":"Block","src":"7268:460:43","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"},"id":8545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8542,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8537,"src":"7282:5:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":8543,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8243,"src":"7291:12:43","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$8243_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":8544,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7304:7:43","memberName":"NoError","nodeType":"MemberAccess","referencedDeclaration":8239,"src":"7291:20:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},"src":"7282:29:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"},"id":8551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8548,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8537,"src":"7378:5:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":8549,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8243,"src":"7387:12:43","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$8243_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":8550,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7400:16:43","memberName":"InvalidSignature","nodeType":"MemberAccess","referencedDeclaration":8240,"src":"7387:29:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},"src":"7378:38:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"},"id":8559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8556,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8537,"src":"7483:5:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":8557,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8243,"src":"7492:12:43","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$8243_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":8558,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7505:22:43","memberName":"InvalidSignatureLength","nodeType":"MemberAccess","referencedDeclaration":8241,"src":"7492:35:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},"src":"7483:44:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"},"id":8571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8568,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8537,"src":"7617:5:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":8569,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8243,"src":"7626:12:43","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$8243_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":8570,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7639:17:43","memberName":"InvalidSignatureS","nodeType":"MemberAccess","referencedDeclaration":8242,"src":"7626:30:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},"src":"7617:39:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8577,"nodeType":"IfStatement","src":"7613:109:43","trueBody":{"id":8576,"nodeType":"Block","src":"7658:64:43","statements":[{"errorCall":{"arguments":[{"id":8573,"name":"errorArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8539,"src":"7702:8:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":8572,"name":"ECDSAInvalidSignatureS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8256,"src":"7679:22:43","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_bytes32_$returns$_t_error_$","typeString":"function (bytes32) pure returns (error)"}},"id":8574,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7679:32:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8575,"nodeType":"RevertStatement","src":"7672:39:43"}]}},"id":8578,"nodeType":"IfStatement","src":"7479:243:43","trueBody":{"id":8567,"nodeType":"Block","src":"7529:78:43","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":8563,"name":"errorArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8539,"src":"7586:8:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":8562,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7578:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":8561,"name":"uint256","nodeType":"ElementaryTypeName","src":"7578:7:43","typeDescriptions":{}}},"id":8564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7578:17:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8560,"name":"ECDSAInvalidSignatureLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8251,"src":"7550:27:43","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":8565,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7550:46:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8566,"nodeType":"RevertStatement","src":"7543:53:43"}]}},"id":8579,"nodeType":"IfStatement","src":"7374:348:43","trueBody":{"id":8555,"nodeType":"Block","src":"7418:55:43","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":8552,"name":"ECDSAInvalidSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8246,"src":"7439:21:43","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":8553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7439:23:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8554,"nodeType":"RevertStatement","src":"7432:30:43"}]}},"id":8580,"nodeType":"IfStatement","src":"7278:444:43","trueBody":{"id":8547,"nodeType":"Block","src":"7313:55:43","statements":[{"functionReturnParameters":8541,"id":8546,"nodeType":"Return","src":"7327:7:43"}]}}]},"documentation":{"id":8534,"nodeType":"StructuredDocumentation","src":"7069:122:43","text":" @dev Optionally reverts with the corresponding custom error according to the `error` argument provided."},"id":8582,"implemented":true,"kind":"function","modifiers":[],"name":"_throwError","nameLocation":"7205:11:43","nodeType":"FunctionDefinition","parameters":{"id":8540,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8537,"mutability":"mutable","name":"error","nameLocation":"7230:5:43","nodeType":"VariableDeclaration","scope":8582,"src":"7217:18:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":8536,"nodeType":"UserDefinedTypeName","pathNode":{"id":8535,"name":"RecoverError","nameLocations":["7217:12:43"],"nodeType":"IdentifierPath","referencedDeclaration":8243,"src":"7217:12:43"},"referencedDeclaration":8243,"src":"7217:12:43","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$8243","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":8539,"mutability":"mutable","name":"errorArg","nameLocation":"7245:8:43","nodeType":"VariableDeclaration","scope":8582,"src":"7237:16:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8538,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7237:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7216:38:43"},"returnParameters":{"id":8541,"nodeType":"ParameterList","parameters":[],"src":"7268:0:43"},"scope":8583,"src":"7196:532:43","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":8584,"src":"344:7386:43","usedErrors":[8246,8251,8256],"usedEvents":[]}],"src":"112:7619:43"},"id":43},"@openzeppelin/contracts/utils/cryptography/EIP712.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/cryptography/EIP712.sol","exportedSymbols":{"EIP712":[8810],"IERC5267":[6729],"MessageHashUtils":[8884],"ShortString":[7659],"ShortStrings":[7870]},"id":8811,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":8585,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"113:24:44"},{"absolutePath":"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol","file":"./MessageHashUtils.sol","id":8587,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8811,"sourceUnit":8885,"src":"139:56:44","symbolAliases":[{"foreign":{"id":8586,"name":"MessageHashUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8884,"src":"147:16:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/ShortStrings.sol","file":"../ShortStrings.sol","id":8590,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8811,"sourceUnit":7871,"src":"196:62:44","symbolAliases":[{"foreign":{"id":8588,"name":"ShortStrings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7870,"src":"204:12:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":8589,"name":"ShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7659,"src":"218:11:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC5267.sol","file":"../../interfaces/IERC5267.sol","id":8592,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8811,"sourceUnit":6730,"src":"259:55:44","symbolAliases":[{"foreign":{"id":8591,"name":"IERC5267","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6729,"src":"267:8:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":8594,"name":"IERC5267","nameLocations":["1988:8:44"],"nodeType":"IdentifierPath","referencedDeclaration":6729,"src":"1988:8:44"},"id":8595,"nodeType":"InheritanceSpecifier","src":"1988:8:44"}],"canonicalName":"EIP712","contractDependencies":[],"contractKind":"contract","documentation":{"id":8593,"nodeType":"StructuredDocumentation","src":"316:1643:44","text":" @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\n encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\n does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\n produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\n This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n ({_hashTypedDataV4}).\n The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n the chain id to protect against replay attacks on an eventual fork of the chain.\n NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\n separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\n separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\n @custom:oz-upgrades-unsafe-allow state-variable-immutable"},"fullyImplemented":true,"id":8810,"linearizedBaseContracts":[8810,6729],"name":"EIP712","nameLocation":"1978:6:44","nodeType":"ContractDefinition","nodes":[{"global":false,"id":8597,"libraryName":{"id":8596,"name":"ShortStrings","nameLocations":["2009:12:44"],"nodeType":"IdentifierPath","referencedDeclaration":7870,"src":"2009:12:44"},"nodeType":"UsingForDirective","src":"2003:25:44"},{"constant":true,"id":8602,"mutability":"constant","name":"TYPE_HASH","nameLocation":"2059:9:44","nodeType":"VariableDeclaration","scope":8810,"src":"2034:140:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8598,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2034:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429","id":8600,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2089:84:44","typeDescriptions":{"typeIdentifier":"t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f","typeString":"literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\""},"value":"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f","typeString":"literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\""}],"id":8599,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2079:9:44","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":8601,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2079:95:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":8604,"mutability":"immutable","name":"_cachedDomainSeparator","nameLocation":"2399:22:44","nodeType":"VariableDeclaration","scope":8810,"src":"2373:48:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8603,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2373:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":8606,"mutability":"immutable","name":"_cachedChainId","nameLocation":"2453:14:44","nodeType":"VariableDeclaration","scope":8810,"src":"2427:40:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8605,"name":"uint256","nodeType":"ElementaryTypeName","src":"2427:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":8608,"mutability":"immutable","name":"_cachedThis","nameLocation":"2499:11:44","nodeType":"VariableDeclaration","scope":8810,"src":"2473:37:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8607,"name":"address","nodeType":"ElementaryTypeName","src":"2473:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":8610,"mutability":"immutable","name":"_hashedName","nameLocation":"2543:11:44","nodeType":"VariableDeclaration","scope":8810,"src":"2517:37:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8609,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2517:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":8612,"mutability":"immutable","name":"_hashedVersion","nameLocation":"2586:14:44","nodeType":"VariableDeclaration","scope":8810,"src":"2560:40:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8611,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2560:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":8615,"mutability":"immutable","name":"_name","nameLocation":"2637:5:44","nodeType":"VariableDeclaration","scope":8810,"src":"2607:35:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"},"typeName":{"id":8614,"nodeType":"UserDefinedTypeName","pathNode":{"id":8613,"name":"ShortString","nameLocations":["2607:11:44"],"nodeType":"IdentifierPath","referencedDeclaration":7659,"src":"2607:11:44"},"referencedDeclaration":7659,"src":"2607:11:44","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}},"visibility":"private"},{"constant":false,"id":8618,"mutability":"immutable","name":"_version","nameLocation":"2678:8:44","nodeType":"VariableDeclaration","scope":8810,"src":"2648:38:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"},"typeName":{"id":8617,"nodeType":"UserDefinedTypeName","pathNode":{"id":8616,"name":"ShortString","nameLocations":["2648:11:44"],"nodeType":"IdentifierPath","referencedDeclaration":7659,"src":"2648:11:44"},"referencedDeclaration":7659,"src":"2648:11:44","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}},"visibility":"private"},{"constant":false,"id":8620,"mutability":"mutable","name":"_nameFallback","nameLocation":"2707:13:44","nodeType":"VariableDeclaration","scope":8810,"src":"2692:28:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":8619,"name":"string","nodeType":"ElementaryTypeName","src":"2692:6:44","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":8622,"mutability":"mutable","name":"_versionFallback","nameLocation":"2741:16:44","nodeType":"VariableDeclaration","scope":8810,"src":"2726:31:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":8621,"name":"string","nodeType":"ElementaryTypeName","src":"2726:6:44","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":8679,"nodeType":"Block","src":"3383:376:44","statements":[{"expression":{"id":8635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8630,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8615,"src":"3393:5:44","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8633,"name":"_nameFallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8620,"src":"3432:13:44","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}],"expression":{"id":8631,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8625,"src":"3401:4:44","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":8632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3406:25:44","memberName":"toShortStringWithFallback","nodeType":"MemberAccess","referencedDeclaration":7811,"src":"3401:30:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_storage_ptr_$returns$_t_userDefinedValueType$_ShortString_$7659_$attached_to$_t_string_memory_ptr_$","typeString":"function (string memory,string storage pointer) returns (ShortString)"}},"id":8634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3401:45:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}},"src":"3393:53:44","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}},"id":8636,"nodeType":"ExpressionStatement","src":"3393:53:44"},{"expression":{"id":8642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8637,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8618,"src":"3456:8:44","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8640,"name":"_versionFallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8622,"src":"3501:16:44","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}],"expression":{"id":8638,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8627,"src":"3467:7:44","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":8639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3475:25:44","memberName":"toShortStringWithFallback","nodeType":"MemberAccess","referencedDeclaration":7811,"src":"3467:33:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_storage_ptr_$returns$_t_userDefinedValueType$_ShortString_$7659_$attached_to$_t_string_memory_ptr_$","typeString":"function (string memory,string storage pointer) returns (ShortString)"}},"id":8641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3467:51:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}},"src":"3456:62:44","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}},"id":8643,"nodeType":"ExpressionStatement","src":"3456:62:44"},{"expression":{"id":8651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8644,"name":"_hashedName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8610,"src":"3528:11:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":8648,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8625,"src":"3558:4:44","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8647,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3552:5:44","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8646,"name":"bytes","nodeType":"ElementaryTypeName","src":"3552:5:44","typeDescriptions":{}}},"id":8649,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3552:11:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":8645,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3542:9:44","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":8650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3542:22:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3528:36:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":8652,"nodeType":"ExpressionStatement","src":"3528:36:44"},{"expression":{"id":8660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8653,"name":"_hashedVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8612,"src":"3574:14:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":8657,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8627,"src":"3607:7:44","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8656,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3601:5:44","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8655,"name":"bytes","nodeType":"ElementaryTypeName","src":"3601:5:44","typeDescriptions":{}}},"id":8658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3601:14:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":8654,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3591:9:44","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":8659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3591:25:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3574:42:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":8661,"nodeType":"ExpressionStatement","src":"3574:42:44"},{"expression":{"id":8665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8662,"name":"_cachedChainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8606,"src":"3627:14:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":8663,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3644:5:44","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":8664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3650:7:44","memberName":"chainid","nodeType":"MemberAccess","src":"3644:13:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3627:30:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8666,"nodeType":"ExpressionStatement","src":"3627:30:44"},{"expression":{"id":8670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8667,"name":"_cachedDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8604,"src":"3667:22:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":8668,"name":"_buildDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8727,"src":"3692:21:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":8669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3692:23:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3667:48:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":8671,"nodeType":"ExpressionStatement","src":"3667:48:44"},{"expression":{"id":8677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8672,"name":"_cachedThis","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8608,"src":"3725:11:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8675,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3747:4:44","typeDescriptions":{"typeIdentifier":"t_contract$_EIP712_$8810","typeString":"contract EIP712"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_EIP712_$8810","typeString":"contract EIP712"}],"id":8674,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3739:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8673,"name":"address","nodeType":"ElementaryTypeName","src":"3739:7:44","typeDescriptions":{}}},"id":8676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3739:13:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3725:27:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":8678,"nodeType":"ExpressionStatement","src":"3725:27:44"}]},"documentation":{"id":8623,"nodeType":"StructuredDocumentation","src":"2764:559:44","text":" @dev Initializes the domain separator and parameter caches.\n The meaning of `name` and `version` is specified in\n https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n - `version`: the current major version of the signing domain.\n NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n contract upgrade]."},"id":8680,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":8628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8625,"mutability":"mutable","name":"name","nameLocation":"3354:4:44","nodeType":"VariableDeclaration","scope":8680,"src":"3340:18:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8624,"name":"string","nodeType":"ElementaryTypeName","src":"3340:6:44","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8627,"mutability":"mutable","name":"version","nameLocation":"3374:7:44","nodeType":"VariableDeclaration","scope":8680,"src":"3360:21:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8626,"name":"string","nodeType":"ElementaryTypeName","src":"3360:6:44","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3339:43:44"},"returnParameters":{"id":8629,"nodeType":"ParameterList","parameters":[],"src":"3383:0:44"},"scope":8810,"src":"3328:431:44","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":8705,"nodeType":"Block","src":"3907:200:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":8688,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3929:4:44","typeDescriptions":{"typeIdentifier":"t_contract$_EIP712_$8810","typeString":"contract EIP712"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_EIP712_$8810","typeString":"contract EIP712"}],"id":8687,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3921:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8686,"name":"address","nodeType":"ElementaryTypeName","src":"3921:7:44","typeDescriptions":{}}},"id":8689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3921:13:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":8690,"name":"_cachedThis","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8608,"src":"3938:11:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3921:28:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":8692,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3953:5:44","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":8693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3959:7:44","memberName":"chainid","nodeType":"MemberAccess","src":"3953:13:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":8694,"name":"_cachedChainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8606,"src":"3970:14:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3953:31:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3921:63:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8703,"nodeType":"Block","src":"4046:55:44","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":8700,"name":"_buildDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8727,"src":"4067:21:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":8701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4067:23:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":8685,"id":8702,"nodeType":"Return","src":"4060:30:44"}]},"id":8704,"nodeType":"IfStatement","src":"3917:184:44","trueBody":{"id":8699,"nodeType":"Block","src":"3986:54:44","statements":[{"expression":{"id":8697,"name":"_cachedDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8604,"src":"4007:22:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":8685,"id":8698,"nodeType":"Return","src":"4000:29:44"}]}}]},"documentation":{"id":8681,"nodeType":"StructuredDocumentation","src":"3765:75:44","text":" @dev Returns the domain separator for the current chain."},"id":8706,"implemented":true,"kind":"function","modifiers":[],"name":"_domainSeparatorV4","nameLocation":"3854:18:44","nodeType":"FunctionDefinition","parameters":{"id":8682,"nodeType":"ParameterList","parameters":[],"src":"3872:2:44"},"returnParameters":{"id":8685,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8684,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8706,"src":"3898:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8683,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3898:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3897:9:44"},"scope":8810,"src":"3845:262:44","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":8726,"nodeType":"Block","src":"4177:115:44","statements":[{"expression":{"arguments":[{"arguments":[{"id":8714,"name":"TYPE_HASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8602,"src":"4215:9:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":8715,"name":"_hashedName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8610,"src":"4226:11:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":8716,"name":"_hashedVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8612,"src":"4239:14:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":8717,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4255:5:44","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":8718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4261:7:44","memberName":"chainid","nodeType":"MemberAccess","src":"4255:13:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":8721,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4278:4:44","typeDescriptions":{"typeIdentifier":"t_contract$_EIP712_$8810","typeString":"contract EIP712"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_EIP712_$8810","typeString":"contract EIP712"}],"id":8720,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4270:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8719,"name":"address","nodeType":"ElementaryTypeName","src":"4270:7:44","typeDescriptions":{}}},"id":8722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4270:13:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8712,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4204:3:44","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":8713,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4208:6:44","memberName":"encode","nodeType":"MemberAccess","src":"4204:10:44","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":8723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4204:80:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":8711,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4194:9:44","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":8724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4194:91:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":8710,"id":8725,"nodeType":"Return","src":"4187:98:44"}]},"id":8727,"implemented":true,"kind":"function","modifiers":[],"name":"_buildDomainSeparator","nameLocation":"4122:21:44","nodeType":"FunctionDefinition","parameters":{"id":8707,"nodeType":"ParameterList","parameters":[],"src":"4143:2:44"},"returnParameters":{"id":8710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8709,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8727,"src":"4168:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8708,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4168:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4167:9:44"},"scope":8810,"src":"4113:179:44","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":8742,"nodeType":"Block","src":"5003:90:44","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":8737,"name":"_domainSeparatorV4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8706,"src":"5053:18:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":8738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5053:20:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":8739,"name":"structHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8730,"src":"5075:10:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":8735,"name":"MessageHashUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8884,"src":"5020:16:44","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MessageHashUtils_$8884_$","typeString":"type(library MessageHashUtils)"}},"id":8736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5037:15:44","memberName":"toTypedDataHash","nodeType":"MemberAccess","referencedDeclaration":8883,"src":"5020:32:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32) pure returns (bytes32)"}},"id":8740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5020:66:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":8734,"id":8741,"nodeType":"Return","src":"5013:73:44"}]},"documentation":{"id":8728,"nodeType":"StructuredDocumentation","src":"4298:614:44","text":" @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n function returns the hash of the fully encoded EIP712 message for this domain.\n This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n ```solidity\n bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n keccak256(\"Mail(address to,string contents)\"),\n mailTo,\n keccak256(bytes(mailContents))\n )));\n address signer = ECDSA.recover(digest, signature);\n ```"},"id":8743,"implemented":true,"kind":"function","modifiers":[],"name":"_hashTypedDataV4","nameLocation":"4926:16:44","nodeType":"FunctionDefinition","parameters":{"id":8731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8730,"mutability":"mutable","name":"structHash","nameLocation":"4951:10:44","nodeType":"VariableDeclaration","scope":8743,"src":"4943:18:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8729,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4943:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4942:20:44"},"returnParameters":{"id":8734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8733,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8743,"src":"4994:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8732,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4994:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4993:9:44"},"scope":8810,"src":"4917:176:44","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[6728],"body":{"id":8784,"nodeType":"Block","src":"5472:229:44","statements":[{"expression":{"components":[{"hexValue":"0f","id":8762,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"5503:7:44","typeDescriptions":{"typeIdentifier":"t_stringliteral_3d725c5ee53025f027da36bea8d3af3b6a3e9d2d1542d47c162631de48e66c1c","typeString":"literal_string hex\"0f\""},"value":"\u000f"},{"arguments":[],"expression":{"argumentTypes":[],"id":8763,"name":"_EIP712Name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8797,"src":"5533:11:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view returns (string memory)"}},"id":8764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5533:13:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"arguments":[],"expression":{"argumentTypes":[],"id":8765,"name":"_EIP712Version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8809,"src":"5560:14:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view returns (string memory)"}},"id":8766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5560:16:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"expression":{"id":8767,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"5590:5:44","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":8768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5596:7:44","memberName":"chainid","nodeType":"MemberAccess","src":"5590:13:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":8771,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5625:4:44","typeDescriptions":{"typeIdentifier":"t_contract$_EIP712_$8810","typeString":"contract EIP712"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_EIP712_$8810","typeString":"contract EIP712"}],"id":8770,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5617:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8769,"name":"address","nodeType":"ElementaryTypeName","src":"5617:7:44","typeDescriptions":{}}},"id":8772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5617:13:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":8775,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5652:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8774,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5644:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":8773,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5644:7:44","typeDescriptions":{}}},"id":8776,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5644:10:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"hexValue":"30","id":8780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5682:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8779,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"5668:13:44","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":8777,"name":"uint256","nodeType":"ElementaryTypeName","src":"5672:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8778,"nodeType":"ArrayTypeName","src":"5672:9:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":8781,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5668:16:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":8782,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5489:205:44","typeDescriptions":{"typeIdentifier":"t_tuple$_t_stringliteral_3d725c5ee53025f027da36bea8d3af3b6a3e9d2d1542d47c162631de48e66c1c_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint256_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(literal_string hex\"0f\",string memory,string memory,uint256,address,bytes32,uint256[] memory)"}},"functionReturnParameters":8761,"id":8783,"nodeType":"Return","src":"5482:212:44"}]},"documentation":{"id":8744,"nodeType":"StructuredDocumentation","src":"5099:40:44","text":" @dev See {IERC-5267}."},"functionSelector":"84b0196e","id":8785,"implemented":true,"kind":"function","modifiers":[],"name":"eip712Domain","nameLocation":"5153:12:44","nodeType":"FunctionDefinition","parameters":{"id":8745,"nodeType":"ParameterList","parameters":[],"src":"5165:2:44"},"returnParameters":{"id":8761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8747,"mutability":"mutable","name":"fields","nameLocation":"5249:6:44","nodeType":"VariableDeclaration","scope":8785,"src":"5242:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":8746,"name":"bytes1","nodeType":"ElementaryTypeName","src":"5242:6:44","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"},{"constant":false,"id":8749,"mutability":"mutable","name":"name","nameLocation":"5283:4:44","nodeType":"VariableDeclaration","scope":8785,"src":"5269:18:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8748,"name":"string","nodeType":"ElementaryTypeName","src":"5269:6:44","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8751,"mutability":"mutable","name":"version","nameLocation":"5315:7:44","nodeType":"VariableDeclaration","scope":8785,"src":"5301:21:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8750,"name":"string","nodeType":"ElementaryTypeName","src":"5301:6:44","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8753,"mutability":"mutable","name":"chainId","nameLocation":"5344:7:44","nodeType":"VariableDeclaration","scope":8785,"src":"5336:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8752,"name":"uint256","nodeType":"ElementaryTypeName","src":"5336:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8755,"mutability":"mutable","name":"verifyingContract","nameLocation":"5373:17:44","nodeType":"VariableDeclaration","scope":8785,"src":"5365:25:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8754,"name":"address","nodeType":"ElementaryTypeName","src":"5365:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8757,"mutability":"mutable","name":"salt","nameLocation":"5412:4:44","nodeType":"VariableDeclaration","scope":8785,"src":"5404:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8756,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5404:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":8760,"mutability":"mutable","name":"extensions","nameLocation":"5447:10:44","nodeType":"VariableDeclaration","scope":8785,"src":"5430:27:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":8758,"name":"uint256","nodeType":"ElementaryTypeName","src":"5430:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8759,"nodeType":"ArrayTypeName","src":"5430:9:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"5228:239:44"},"scope":8810,"src":"5144:557:44","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":8796,"nodeType":"Block","src":"6082:65:44","statements":[{"expression":{"arguments":[{"id":8793,"name":"_nameFallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8620,"src":"6126:13:44","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}],"expression":{"id":8791,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8615,"src":"6099:5:44","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}},"id":8792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6105:20:44","memberName":"toStringWithFallback","nodeType":"MemberAccess","referencedDeclaration":7838,"src":"6099:26:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_ShortString_$7659_$_t_string_storage_ptr_$returns$_t_string_memory_ptr_$attached_to$_t_userDefinedValueType$_ShortString_$7659_$","typeString":"function (ShortString,string storage pointer) pure returns (string memory)"}},"id":8794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6099:41:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":8790,"id":8795,"nodeType":"Return","src":"6092:48:44"}]},"documentation":{"id":8786,"nodeType":"StructuredDocumentation","src":"5707:256:44","text":" @dev The name parameter for the EIP712 domain.\n NOTE: By default this function reads _name which is an immutable value.\n It only reads from storage if necessary (in case the value is too large to fit in a ShortString)."},"id":8797,"implemented":true,"kind":"function","modifiers":[],"name":"_EIP712Name","nameLocation":"6030:11:44","nodeType":"FunctionDefinition","parameters":{"id":8787,"nodeType":"ParameterList","parameters":[],"src":"6041:2:44"},"returnParameters":{"id":8790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8789,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8797,"src":"6067:13:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8788,"name":"string","nodeType":"ElementaryTypeName","src":"6067:6:44","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6066:15:44"},"scope":8810,"src":"6021:126:44","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":8808,"nodeType":"Block","src":"6537:71:44","statements":[{"expression":{"arguments":[{"id":8805,"name":"_versionFallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8622,"src":"6584:16:44","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}],"expression":{"id":8803,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8618,"src":"6554:8:44","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7659","typeString":"ShortString"}},"id":8804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6563:20:44","memberName":"toStringWithFallback","nodeType":"MemberAccess","referencedDeclaration":7838,"src":"6554:29:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_ShortString_$7659_$_t_string_storage_ptr_$returns$_t_string_memory_ptr_$attached_to$_t_userDefinedValueType$_ShortString_$7659_$","typeString":"function (ShortString,string storage pointer) pure returns (string memory)"}},"id":8806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6554:47:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":8802,"id":8807,"nodeType":"Return","src":"6547:54:44"}]},"documentation":{"id":8798,"nodeType":"StructuredDocumentation","src":"6153:262:44","text":" @dev The version parameter for the EIP712 domain.\n NOTE: By default this function reads _version which is an immutable value.\n It only reads from storage if necessary (in case the value is too large to fit in a ShortString)."},"id":8809,"implemented":true,"kind":"function","modifiers":[],"name":"_EIP712Version","nameLocation":"6482:14:44","nodeType":"FunctionDefinition","parameters":{"id":8799,"nodeType":"ParameterList","parameters":[],"src":"6496:2:44"},"returnParameters":{"id":8802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8801,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8809,"src":"6522:13:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8800,"name":"string","nodeType":"ElementaryTypeName","src":"6522:6:44","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6521:15:44"},"scope":8810,"src":"6473:135:44","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":8811,"src":"1960:4650:44","usedErrors":[7667,7669],"usedEvents":[6709]}],"src":"113:6498:44"},"id":44},"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol","exportedSymbols":{"MessageHashUtils":[8884],"Strings":[8235]},"id":8885,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":8812,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"123:24:45"},{"absolutePath":"@openzeppelin/contracts/utils/Strings.sol","file":"../Strings.sol","id":8814,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8885,"sourceUnit":8236,"src":"149:39:45","symbolAliases":[{"foreign":{"id":8813,"name":"Strings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8235,"src":"157:7:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"MessageHashUtils","contractDependencies":[],"contractKind":"library","documentation":{"id":8815,"nodeType":"StructuredDocumentation","src":"190:330:45","text":" @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\n The library provides methods for generating a hash of a message that conforms to the\n https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\n specifications."},"fullyImplemented":true,"id":8884,"linearizedBaseContracts":[8884],"name":"MessageHashUtils","nameLocation":"529:16:45","nodeType":"ContractDefinition","nodes":[{"body":{"id":8824,"nodeType":"Block","src":"1314:368:45","statements":[{"AST":{"nativeSrc":"1376:300:45","nodeType":"YulBlock","src":"1376:300:45","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1397:4:45","nodeType":"YulLiteral","src":"1397:4:45","type":"","value":"0x00"},{"hexValue":"19457468657265756d205369676e6564204d6573736167653a0a3332","kind":"string","nativeSrc":"1403:34:45","nodeType":"YulLiteral","src":"1403:34:45","type":"","value":"\u0019Ethereum Signed Message:\n32"}],"functionName":{"name":"mstore","nativeSrc":"1390:6:45","nodeType":"YulIdentifier","src":"1390:6:45"},"nativeSrc":"1390:48:45","nodeType":"YulFunctionCall","src":"1390:48:45"},"nativeSrc":"1390:48:45","nodeType":"YulExpressionStatement","src":"1390:48:45"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1499:4:45","nodeType":"YulLiteral","src":"1499:4:45","type":"","value":"0x1c"},{"name":"messageHash","nativeSrc":"1505:11:45","nodeType":"YulIdentifier","src":"1505:11:45"}],"functionName":{"name":"mstore","nativeSrc":"1492:6:45","nodeType":"YulIdentifier","src":"1492:6:45"},"nativeSrc":"1492:25:45","nodeType":"YulFunctionCall","src":"1492:25:45"},"nativeSrc":"1492:25:45","nodeType":"YulExpressionStatement","src":"1492:25:45"},{"nativeSrc":"1571:31:45","nodeType":"YulAssignment","src":"1571:31:45","value":{"arguments":[{"kind":"number","nativeSrc":"1591:4:45","nodeType":"YulLiteral","src":"1591:4:45","type":"","value":"0x00"},{"kind":"number","nativeSrc":"1597:4:45","nodeType":"YulLiteral","src":"1597:4:45","type":"","value":"0x3c"}],"functionName":{"name":"keccak256","nativeSrc":"1581:9:45","nodeType":"YulIdentifier","src":"1581:9:45"},"nativeSrc":"1581:21:45","nodeType":"YulFunctionCall","src":"1581:21:45"},"variableNames":[{"name":"digest","nativeSrc":"1571:6:45","nodeType":"YulIdentifier","src":"1571:6:45"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":8821,"isOffset":false,"isSlot":false,"src":"1571:6:45","valueSize":1},{"declaration":8818,"isOffset":false,"isSlot":false,"src":"1505:11:45","valueSize":1}],"id":8823,"nodeType":"InlineAssembly","src":"1367:309:45"}]},"documentation":{"id":8816,"nodeType":"StructuredDocumentation","src":"552:665:45","text":" @dev Returns the keccak256 digest of an EIP-191 signed data with version\n `0x45` (`personal_sign` messages).\n The digest is calculated by prefixing a bytes32 `messageHash` with\n `\"\\x19Ethereum Signed Message:\\n32\"` and hashing the result. It corresponds with the\n hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\n keccak256, although any bytes32 value can be safely used because the final digest will\n be re-hashed.\n See {ECDSA-recover}."},"id":8825,"implemented":true,"kind":"function","modifiers":[],"name":"toEthSignedMessageHash","nameLocation":"1231:22:45","nodeType":"FunctionDefinition","parameters":{"id":8819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8818,"mutability":"mutable","name":"messageHash","nameLocation":"1262:11:45","nodeType":"VariableDeclaration","scope":8825,"src":"1254:19:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8817,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1254:7:45","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1253:21:45"},"returnParameters":{"id":8822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8821,"mutability":"mutable","name":"digest","nameLocation":"1306:6:45","nodeType":"VariableDeclaration","scope":8825,"src":"1298:14:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8820,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1298:7:45","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1297:16:45"},"scope":8884,"src":"1222:460:45","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8850,"nodeType":"Block","src":"2234:143:45","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"19457468657265756d205369676e6564204d6573736167653a0a","id":8837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2286:32:45","typeDescriptions":{"typeIdentifier":"t_stringliteral_9af2d9c228f6cfddaa6d1e5b94e0bce4ab16bd9a472a2b7fbfd74ebff4c720b4","typeString":"literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a\""},"value":"\u0019Ethereum Signed Message:\n"},{"arguments":[{"arguments":[{"expression":{"id":8842,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8828,"src":"2343:7:45","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2351:6:45","memberName":"length","nodeType":"MemberAccess","src":"2343:14:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8840,"name":"Strings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8235,"src":"2326:7:45","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Strings_$8235_$","typeString":"type(library Strings)"}},"id":8841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2334:8:45","memberName":"toString","nodeType":"MemberAccess","referencedDeclaration":8048,"src":"2326:16:45","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256) pure returns (string memory)"}},"id":8844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2326:32:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8839,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2320:5:45","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8838,"name":"bytes","nodeType":"ElementaryTypeName","src":"2320:5:45","typeDescriptions":{}}},"id":8845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2320:39:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":8846,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8828,"src":"2361:7:45","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_9af2d9c228f6cfddaa6d1e5b94e0bce4ab16bd9a472a2b7fbfd74ebff4c720b4","typeString":"literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a\""},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":8835,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2273:5:45","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8834,"name":"bytes","nodeType":"ElementaryTypeName","src":"2273:5:45","typeDescriptions":{}}},"id":8836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2279:6:45","memberName":"concat","nodeType":"MemberAccess","src":"2273:12:45","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":8847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2273:96:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":8833,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2263:9:45","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":8848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2263:107:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":8832,"id":8849,"nodeType":"Return","src":"2244:126:45"}]},"documentation":{"id":8826,"nodeType":"StructuredDocumentation","src":"1688:455:45","text":" @dev Returns the keccak256 digest of an EIP-191 signed data with version\n `0x45` (`personal_sign` messages).\n The digest is calculated by prefixing an arbitrary `message` with\n `\"\\x19Ethereum Signed Message:\\n\" + len(message)` and hashing the result. It corresponds with the\n hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n See {ECDSA-recover}."},"id":8851,"implemented":true,"kind":"function","modifiers":[],"name":"toEthSignedMessageHash","nameLocation":"2157:22:45","nodeType":"FunctionDefinition","parameters":{"id":8829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8828,"mutability":"mutable","name":"message","nameLocation":"2193:7:45","nodeType":"VariableDeclaration","scope":8851,"src":"2180:20:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":8827,"name":"bytes","nodeType":"ElementaryTypeName","src":"2180:5:45","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2179:22:45"},"returnParameters":{"id":8832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8831,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8851,"src":"2225:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8830,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2225:7:45","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2224:9:45"},"scope":8884,"src":"2148:229:45","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8870,"nodeType":"Block","src":"2831:80:45","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"1900","id":8864,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"2875:10:45","typeDescriptions":{"typeIdentifier":"t_stringliteral_73fd5d154550a4a103564cb191928cd38898034de1b952dc21b290898b4b697a","typeString":"literal_string hex\"1900\""},"value":"\u0019\u0000"},{"id":8865,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8854,"src":"2887:9:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8866,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8856,"src":"2898:4:45","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_73fd5d154550a4a103564cb191928cd38898034de1b952dc21b290898b4b697a","typeString":"literal_string hex\"1900\""},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":8862,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2858:3:45","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":8863,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2862:12:45","memberName":"encodePacked","nodeType":"MemberAccess","src":"2858:16:45","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":8867,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2858:45:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":8861,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2848:9:45","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":8868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2848:56:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":8860,"id":8869,"nodeType":"Return","src":"2841:63:45"}]},"documentation":{"id":8852,"nodeType":"StructuredDocumentation","src":"2383:332:45","text":" @dev Returns the keccak256 digest of an EIP-191 signed data with version\n `0x00` (data with intended validator).\n The digest is calculated by prefixing an arbitrary `data` with `\"\\x19\\x00\"` and the intended\n `validator` address. Then hashing the result.\n See {ECDSA-recover}."},"id":8871,"implemented":true,"kind":"function","modifiers":[],"name":"toDataWithIntendedValidatorHash","nameLocation":"2729:31:45","nodeType":"FunctionDefinition","parameters":{"id":8857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8854,"mutability":"mutable","name":"validator","nameLocation":"2769:9:45","nodeType":"VariableDeclaration","scope":8871,"src":"2761:17:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8853,"name":"address","nodeType":"ElementaryTypeName","src":"2761:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8856,"mutability":"mutable","name":"data","nameLocation":"2793:4:45","nodeType":"VariableDeclaration","scope":8871,"src":"2780:17:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":8855,"name":"bytes","nodeType":"ElementaryTypeName","src":"2780:5:45","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2760:38:45"},"returnParameters":{"id":8860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8859,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8871,"src":"2822:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8858,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2822:7:45","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2821:9:45"},"scope":8884,"src":"2720:191:45","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8882,"nodeType":"Block","src":"3462:292:45","statements":[{"AST":{"nativeSrc":"3524:224:45","nodeType":"YulBlock","src":"3524:224:45","statements":[{"nativeSrc":"3538:22:45","nodeType":"YulVariableDeclaration","src":"3538:22:45","value":{"arguments":[{"kind":"number","nativeSrc":"3555:4:45","nodeType":"YulLiteral","src":"3555:4:45","type":"","value":"0x40"}],"functionName":{"name":"mload","nativeSrc":"3549:5:45","nodeType":"YulIdentifier","src":"3549:5:45"},"nativeSrc":"3549:11:45","nodeType":"YulFunctionCall","src":"3549:11:45"},"variables":[{"name":"ptr","nativeSrc":"3542:3:45","nodeType":"YulTypedName","src":"3542:3:45","type":""}]},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"3580:3:45","nodeType":"YulIdentifier","src":"3580:3:45"},{"hexValue":"1901","kind":"string","nativeSrc":"3585:10:45","nodeType":"YulLiteral","src":"3585:10:45","type":"","value":"\u0019\u0001"}],"functionName":{"name":"mstore","nativeSrc":"3573:6:45","nodeType":"YulIdentifier","src":"3573:6:45"},"nativeSrc":"3573:23:45","nodeType":"YulFunctionCall","src":"3573:23:45"},"nativeSrc":"3573:23:45","nodeType":"YulExpressionStatement","src":"3573:23:45"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"3620:3:45","nodeType":"YulIdentifier","src":"3620:3:45"},{"kind":"number","nativeSrc":"3625:4:45","nodeType":"YulLiteral","src":"3625:4:45","type":"","value":"0x02"}],"functionName":{"name":"add","nativeSrc":"3616:3:45","nodeType":"YulIdentifier","src":"3616:3:45"},"nativeSrc":"3616:14:45","nodeType":"YulFunctionCall","src":"3616:14:45"},{"name":"domainSeparator","nativeSrc":"3632:15:45","nodeType":"YulIdentifier","src":"3632:15:45"}],"functionName":{"name":"mstore","nativeSrc":"3609:6:45","nodeType":"YulIdentifier","src":"3609:6:45"},"nativeSrc":"3609:39:45","nodeType":"YulFunctionCall","src":"3609:39:45"},"nativeSrc":"3609:39:45","nodeType":"YulExpressionStatement","src":"3609:39:45"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"3672:3:45","nodeType":"YulIdentifier","src":"3672:3:45"},{"kind":"number","nativeSrc":"3677:4:45","nodeType":"YulLiteral","src":"3677:4:45","type":"","value":"0x22"}],"functionName":{"name":"add","nativeSrc":"3668:3:45","nodeType":"YulIdentifier","src":"3668:3:45"},"nativeSrc":"3668:14:45","nodeType":"YulFunctionCall","src":"3668:14:45"},{"name":"structHash","nativeSrc":"3684:10:45","nodeType":"YulIdentifier","src":"3684:10:45"}],"functionName":{"name":"mstore","nativeSrc":"3661:6:45","nodeType":"YulIdentifier","src":"3661:6:45"},"nativeSrc":"3661:34:45","nodeType":"YulFunctionCall","src":"3661:34:45"},"nativeSrc":"3661:34:45","nodeType":"YulExpressionStatement","src":"3661:34:45"},{"nativeSrc":"3708:30:45","nodeType":"YulAssignment","src":"3708:30:45","value":{"arguments":[{"name":"ptr","nativeSrc":"3728:3:45","nodeType":"YulIdentifier","src":"3728:3:45"},{"kind":"number","nativeSrc":"3733:4:45","nodeType":"YulLiteral","src":"3733:4:45","type":"","value":"0x42"}],"functionName":{"name":"keccak256","nativeSrc":"3718:9:45","nodeType":"YulIdentifier","src":"3718:9:45"},"nativeSrc":"3718:20:45","nodeType":"YulFunctionCall","src":"3718:20:45"},"variableNames":[{"name":"digest","nativeSrc":"3708:6:45","nodeType":"YulIdentifier","src":"3708:6:45"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":8879,"isOffset":false,"isSlot":false,"src":"3708:6:45","valueSize":1},{"declaration":8874,"isOffset":false,"isSlot":false,"src":"3632:15:45","valueSize":1},{"declaration":8876,"isOffset":false,"isSlot":false,"src":"3684:10:45","valueSize":1}],"id":8881,"nodeType":"InlineAssembly","src":"3515:233:45"}]},"documentation":{"id":8872,"nodeType":"StructuredDocumentation","src":"2917:431:45","text":" @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\n The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\n `\\x19\\x01` and hashing the result. It corresponds to the hash signed by the\n https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\n See {ECDSA-recover}."},"id":8883,"implemented":true,"kind":"function","modifiers":[],"name":"toTypedDataHash","nameLocation":"3362:15:45","nodeType":"FunctionDefinition","parameters":{"id":8877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8874,"mutability":"mutable","name":"domainSeparator","nameLocation":"3386:15:45","nodeType":"VariableDeclaration","scope":8883,"src":"3378:23:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8873,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3378:7:45","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":8876,"mutability":"mutable","name":"structHash","nameLocation":"3411:10:45","nodeType":"VariableDeclaration","scope":8883,"src":"3403:18:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8875,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3403:7:45","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3377:45:45"},"returnParameters":{"id":8880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8879,"mutability":"mutable","name":"digest","nameLocation":"3454:6:45","nodeType":"VariableDeclaration","scope":8883,"src":"3446:14:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8878,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3446:7:45","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3445:16:45"},"scope":8884,"src":"3353:401:45","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":8885,"src":"521:3235:45","usedErrors":[],"usedEvents":[]}],"src":"123:3634:45"},"id":45},"@openzeppelin/contracts/utils/introspection/ERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/introspection/ERC165.sol","exportedSymbols":{"ERC165":[8908],"IERC165":[8920]},"id":8909,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":8886,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"114:24:46"},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"./IERC165.sol","id":8888,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8909,"sourceUnit":8921,"src":"140:38:46","symbolAliases":[{"foreign":{"id":8887,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8920,"src":"148:7:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":8890,"name":"IERC165","nameLocations":["687:7:46"],"nodeType":"IdentifierPath","referencedDeclaration":8920,"src":"687:7:46"},"id":8891,"nodeType":"InheritanceSpecifier","src":"687:7:46"}],"canonicalName":"ERC165","contractDependencies":[],"contractKind":"contract","documentation":{"id":8889,"nodeType":"StructuredDocumentation","src":"180:478:46","text":" @dev Implementation of the {IERC165} interface.\n Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n for the additional interface id that will be supported. For example:\n ```solidity\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n }\n ```"},"fullyImplemented":true,"id":8908,"linearizedBaseContracts":[8908,8920],"name":"ERC165","nameLocation":"677:6:46","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[8919],"body":{"id":8906,"nodeType":"Block","src":"844:64:46","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":8904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8899,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8894,"src":"861:11:46","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":8901,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8920,"src":"881:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC165_$8920_$","typeString":"type(contract IERC165)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC165_$8920_$","typeString":"type(contract IERC165)"}],"id":8900,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"876:4:46","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8902,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"876:13:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC165_$8920","typeString":"type(contract IERC165)"}},"id":8903,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"890:11:46","memberName":"interfaceId","nodeType":"MemberAccess","src":"876:25:46","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"861:40:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":8898,"id":8905,"nodeType":"Return","src":"854:47:46"}]},"documentation":{"id":8892,"nodeType":"StructuredDocumentation","src":"701:56:46","text":" @dev See {IERC165-supportsInterface}."},"functionSelector":"01ffc9a7","id":8907,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"771:17:46","nodeType":"FunctionDefinition","parameters":{"id":8895,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8894,"mutability":"mutable","name":"interfaceId","nameLocation":"796:11:46","nodeType":"VariableDeclaration","scope":8907,"src":"789:18:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":8893,"name":"bytes4","nodeType":"ElementaryTypeName","src":"789:6:46","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"788:20:46"},"returnParameters":{"id":8898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8897,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8907,"src":"838:4:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8896,"name":"bool","nodeType":"ElementaryTypeName","src":"838:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"837:6:46"},"scope":8908,"src":"762:146:46","stateMutability":"view","virtual":true,"visibility":"public"}],"scope":8909,"src":"659:251:46","usedErrors":[],"usedEvents":[]}],"src":"114:797:46"},"id":46},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","exportedSymbols":{"IERC165":[8920]},"id":8921,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":8910,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"115:24:47"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC165","contractDependencies":[],"contractKind":"interface","documentation":{"id":8911,"nodeType":"StructuredDocumentation","src":"141:279:47","text":" @dev Interface of the ERC165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[EIP].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}."},"fullyImplemented":false,"id":8920,"linearizedBaseContracts":[8920],"name":"IERC165","nameLocation":"431:7:47","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":8912,"nodeType":"StructuredDocumentation","src":"445:340:47","text":" @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."},"functionSelector":"01ffc9a7","id":8919,"implemented":false,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"799:17:47","nodeType":"FunctionDefinition","parameters":{"id":8915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8914,"mutability":"mutable","name":"interfaceId","nameLocation":"824:11:47","nodeType":"VariableDeclaration","scope":8919,"src":"817:18:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":8913,"name":"bytes4","nodeType":"ElementaryTypeName","src":"817:6:47","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"816:20:47"},"returnParameters":{"id":8918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8917,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8919,"src":"860:4:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8916,"name":"bool","nodeType":"ElementaryTypeName","src":"860:4:47","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"859:6:47"},"scope":8920,"src":"790:76:47","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":8921,"src":"421:447:47","usedErrors":[],"usedEvents":[]}],"src":"115:754:47"},"id":47},"@openzeppelin/contracts/utils/math/Math.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","exportedSymbols":{"Math":[9974]},"id":9975,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":8922,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"103:24:48"},{"abstract":false,"baseContracts":[],"canonicalName":"Math","contractDependencies":[],"contractKind":"library","documentation":{"id":8923,"nodeType":"StructuredDocumentation","src":"129:73:48","text":" @dev Standard math utilities missing in the Solidity language."},"fullyImplemented":true,"id":9974,"linearizedBaseContracts":[9974],"name":"Math","nameLocation":"211:4:48","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":8924,"nodeType":"StructuredDocumentation","src":"222:50:48","text":" @dev Muldiv operation overflow."},"errorSelector":"227bc153","id":8926,"name":"MathOverflowedMulDiv","nameLocation":"283:20:48","nodeType":"ErrorDefinition","parameters":{"id":8925,"nodeType":"ParameterList","parameters":[],"src":"303:2:48"},"src":"277:29:48"},{"canonicalName":"Math.Rounding","id":8931,"members":[{"id":8927,"name":"Floor","nameLocation":"336:5:48","nodeType":"EnumValue","src":"336:5:48"},{"id":8928,"name":"Ceil","nameLocation":"379:4:48","nodeType":"EnumValue","src":"379:4:48"},{"id":8929,"name":"Trunc","nameLocation":"421:5:48","nodeType":"EnumValue","src":"421:5:48"},{"id":8930,"name":"Expand","nameLocation":"451:6:48","nodeType":"EnumValue","src":"451:6:48"}],"name":"Rounding","nameLocation":"317:8:48","nodeType":"EnumDefinition","src":"312:169:48"},{"body":{"id":8962,"nodeType":"Block","src":"661:140:48","statements":[{"id":8961,"nodeType":"UncheckedBlock","src":"671:124:48","statements":[{"assignments":[8944],"declarations":[{"constant":false,"id":8944,"mutability":"mutable","name":"c","nameLocation":"703:1:48","nodeType":"VariableDeclaration","scope":8961,"src":"695:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8943,"name":"uint256","nodeType":"ElementaryTypeName","src":"695:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8948,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8945,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8934,"src":"707:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":8946,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8936,"src":"711:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"707:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"695:17:48"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8949,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8944,"src":"730:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8950,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8934,"src":"734:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"730:5:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8956,"nodeType":"IfStatement","src":"726:28:48","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":8952,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"745:5:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":8953,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"752:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":8954,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"744:10:48","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":8942,"id":8955,"nodeType":"Return","src":"737:17:48"}},{"expression":{"components":[{"hexValue":"74727565","id":8957,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"776:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":8958,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8944,"src":"782:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8959,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"775:9:48","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":8942,"id":8960,"nodeType":"Return","src":"768:16:48"}]}]},"documentation":{"id":8932,"nodeType":"StructuredDocumentation","src":"487:93:48","text":" @dev Returns the addition of two unsigned integers, with an overflow flag."},"id":8963,"implemented":true,"kind":"function","modifiers":[],"name":"tryAdd","nameLocation":"594:6:48","nodeType":"FunctionDefinition","parameters":{"id":8937,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8934,"mutability":"mutable","name":"a","nameLocation":"609:1:48","nodeType":"VariableDeclaration","scope":8963,"src":"601:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8933,"name":"uint256","nodeType":"ElementaryTypeName","src":"601:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8936,"mutability":"mutable","name":"b","nameLocation":"620:1:48","nodeType":"VariableDeclaration","scope":8963,"src":"612:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8935,"name":"uint256","nodeType":"ElementaryTypeName","src":"612:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"600:22:48"},"returnParameters":{"id":8942,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8939,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8963,"src":"646:4:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8938,"name":"bool","nodeType":"ElementaryTypeName","src":"646:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8941,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8963,"src":"652:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8940,"name":"uint256","nodeType":"ElementaryTypeName","src":"652:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"645:15:48"},"scope":9974,"src":"585:216:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8990,"nodeType":"Block","src":"984:113:48","statements":[{"id":8989,"nodeType":"UncheckedBlock","src":"994:97:48","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8975,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8968,"src":"1022:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":8976,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8966,"src":"1026:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1022:5:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8982,"nodeType":"IfStatement","src":"1018:28:48","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":8978,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1037:5:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":8979,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1044:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":8980,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1036:10:48","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":8974,"id":8981,"nodeType":"Return","src":"1029:17:48"}},{"expression":{"components":[{"hexValue":"74727565","id":8983,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1068:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8984,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8966,"src":"1074:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":8985,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8968,"src":"1078:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1074:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8987,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1067:13:48","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":8974,"id":8988,"nodeType":"Return","src":"1060:20:48"}]}]},"documentation":{"id":8964,"nodeType":"StructuredDocumentation","src":"807:96:48","text":" @dev Returns the subtraction of two unsigned integers, with an overflow flag."},"id":8991,"implemented":true,"kind":"function","modifiers":[],"name":"trySub","nameLocation":"917:6:48","nodeType":"FunctionDefinition","parameters":{"id":8969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8966,"mutability":"mutable","name":"a","nameLocation":"932:1:48","nodeType":"VariableDeclaration","scope":8991,"src":"924:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8965,"name":"uint256","nodeType":"ElementaryTypeName","src":"924:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8968,"mutability":"mutable","name":"b","nameLocation":"943:1:48","nodeType":"VariableDeclaration","scope":8991,"src":"935:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8967,"name":"uint256","nodeType":"ElementaryTypeName","src":"935:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"923:22:48"},"returnParameters":{"id":8974,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8971,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8991,"src":"969:4:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8970,"name":"bool","nodeType":"ElementaryTypeName","src":"969:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8973,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8991,"src":"975:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8972,"name":"uint256","nodeType":"ElementaryTypeName","src":"975:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"968:15:48"},"scope":9974,"src":"908:189:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9032,"nodeType":"Block","src":"1283:417:48","statements":[{"id":9031,"nodeType":"UncheckedBlock","src":"1293:401:48","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9003,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8994,"src":"1551:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":9004,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1556:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1551:6:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9010,"nodeType":"IfStatement","src":"1547:28:48","trueBody":{"expression":{"components":[{"hexValue":"74727565","id":9006,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1567:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"30","id":9007,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1573:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":9008,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1566:9:48","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":9002,"id":9009,"nodeType":"Return","src":"1559:16:48"}},{"assignments":[9012],"declarations":[{"constant":false,"id":9012,"mutability":"mutable","name":"c","nameLocation":"1597:1:48","nodeType":"VariableDeclaration","scope":9031,"src":"1589:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9011,"name":"uint256","nodeType":"ElementaryTypeName","src":"1589:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9016,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9013,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8994,"src":"1601:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9014,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8996,"src":"1605:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1601:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1589:17:48"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9017,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9012,"src":"1624:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9018,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8994,"src":"1628:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1624:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9020,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8996,"src":"1633:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1624:10:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9026,"nodeType":"IfStatement","src":"1620:33:48","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":9022,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1644:5:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":9023,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1651:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":9024,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1643:10:48","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":9002,"id":9025,"nodeType":"Return","src":"1636:17:48"}},{"expression":{"components":[{"hexValue":"74727565","id":9027,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1675:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":9028,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9012,"src":"1681:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9029,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1674:9:48","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":9002,"id":9030,"nodeType":"Return","src":"1667:16:48"}]}]},"documentation":{"id":8992,"nodeType":"StructuredDocumentation","src":"1103:99:48","text":" @dev Returns the multiplication of two unsigned integers, with an overflow flag."},"id":9033,"implemented":true,"kind":"function","modifiers":[],"name":"tryMul","nameLocation":"1216:6:48","nodeType":"FunctionDefinition","parameters":{"id":8997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8994,"mutability":"mutable","name":"a","nameLocation":"1231:1:48","nodeType":"VariableDeclaration","scope":9033,"src":"1223:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8993,"name":"uint256","nodeType":"ElementaryTypeName","src":"1223:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8996,"mutability":"mutable","name":"b","nameLocation":"1242:1:48","nodeType":"VariableDeclaration","scope":9033,"src":"1234:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8995,"name":"uint256","nodeType":"ElementaryTypeName","src":"1234:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1222:22:48"},"returnParameters":{"id":9002,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8999,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9033,"src":"1268:4:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8998,"name":"bool","nodeType":"ElementaryTypeName","src":"1268:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9001,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9033,"src":"1274:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9000,"name":"uint256","nodeType":"ElementaryTypeName","src":"1274:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1267:15:48"},"scope":9974,"src":"1207:493:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9060,"nodeType":"Block","src":"1887:114:48","statements":[{"id":9059,"nodeType":"UncheckedBlock","src":"1897:98:48","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9045,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9038,"src":"1925:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":9046,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1930:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1925:6:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9052,"nodeType":"IfStatement","src":"1921:29:48","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":9048,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1941:5:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":9049,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1948:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":9050,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1940:10:48","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":9044,"id":9051,"nodeType":"Return","src":"1933:17:48"}},{"expression":{"components":[{"hexValue":"74727565","id":9053,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1972:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9054,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9036,"src":"1978:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9055,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9038,"src":"1982:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1978:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9057,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1971:13:48","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":9044,"id":9058,"nodeType":"Return","src":"1964:20:48"}]}]},"documentation":{"id":9034,"nodeType":"StructuredDocumentation","src":"1706:100:48","text":" @dev Returns the division of two unsigned integers, with a division by zero flag."},"id":9061,"implemented":true,"kind":"function","modifiers":[],"name":"tryDiv","nameLocation":"1820:6:48","nodeType":"FunctionDefinition","parameters":{"id":9039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9036,"mutability":"mutable","name":"a","nameLocation":"1835:1:48","nodeType":"VariableDeclaration","scope":9061,"src":"1827:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9035,"name":"uint256","nodeType":"ElementaryTypeName","src":"1827:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9038,"mutability":"mutable","name":"b","nameLocation":"1846:1:48","nodeType":"VariableDeclaration","scope":9061,"src":"1838:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9037,"name":"uint256","nodeType":"ElementaryTypeName","src":"1838:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1826:22:48"},"returnParameters":{"id":9044,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9041,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9061,"src":"1872:4:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9040,"name":"bool","nodeType":"ElementaryTypeName","src":"1872:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9043,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9061,"src":"1878:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9042,"name":"uint256","nodeType":"ElementaryTypeName","src":"1878:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1871:15:48"},"scope":9974,"src":"1811:190:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9088,"nodeType":"Block","src":"2198:114:48","statements":[{"id":9087,"nodeType":"UncheckedBlock","src":"2208:98:48","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9073,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9066,"src":"2236:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":9074,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2241:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2236:6:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9080,"nodeType":"IfStatement","src":"2232:29:48","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":9076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2252:5:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":9077,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2259:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":9078,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"2251:10:48","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":9072,"id":9079,"nodeType":"Return","src":"2244:17:48"}},{"expression":{"components":[{"hexValue":"74727565","id":9081,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2283:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9082,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9064,"src":"2289:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":9083,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9066,"src":"2293:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2289:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9085,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2282:13:48","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":9072,"id":9086,"nodeType":"Return","src":"2275:20:48"}]}]},"documentation":{"id":9062,"nodeType":"StructuredDocumentation","src":"2007:110:48","text":" @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag."},"id":9089,"implemented":true,"kind":"function","modifiers":[],"name":"tryMod","nameLocation":"2131:6:48","nodeType":"FunctionDefinition","parameters":{"id":9067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9064,"mutability":"mutable","name":"a","nameLocation":"2146:1:48","nodeType":"VariableDeclaration","scope":9089,"src":"2138:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9063,"name":"uint256","nodeType":"ElementaryTypeName","src":"2138:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9066,"mutability":"mutable","name":"b","nameLocation":"2157:1:48","nodeType":"VariableDeclaration","scope":9089,"src":"2149:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9065,"name":"uint256","nodeType":"ElementaryTypeName","src":"2149:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2137:22:48"},"returnParameters":{"id":9072,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9069,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9089,"src":"2183:4:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9068,"name":"bool","nodeType":"ElementaryTypeName","src":"2183:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9071,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9089,"src":"2189:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9070,"name":"uint256","nodeType":"ElementaryTypeName","src":"2189:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2182:15:48"},"scope":9974,"src":"2122:190:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9106,"nodeType":"Block","src":"2449:37:48","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9099,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9092,"src":"2466:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":9100,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9094,"src":"2470:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2466:5:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":9103,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9094,"src":"2478:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"2466:13:48","trueExpression":{"id":9102,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9092,"src":"2474:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9098,"id":9105,"nodeType":"Return","src":"2459:20:48"}]},"documentation":{"id":9090,"nodeType":"StructuredDocumentation","src":"2318:59:48","text":" @dev Returns the largest of two numbers."},"id":9107,"implemented":true,"kind":"function","modifiers":[],"name":"max","nameLocation":"2391:3:48","nodeType":"FunctionDefinition","parameters":{"id":9095,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9092,"mutability":"mutable","name":"a","nameLocation":"2403:1:48","nodeType":"VariableDeclaration","scope":9107,"src":"2395:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9091,"name":"uint256","nodeType":"ElementaryTypeName","src":"2395:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9094,"mutability":"mutable","name":"b","nameLocation":"2414:1:48","nodeType":"VariableDeclaration","scope":9107,"src":"2406:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9093,"name":"uint256","nodeType":"ElementaryTypeName","src":"2406:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2394:22:48"},"returnParameters":{"id":9098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9097,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9107,"src":"2440:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9096,"name":"uint256","nodeType":"ElementaryTypeName","src":"2440:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2439:9:48"},"scope":9974,"src":"2382:104:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9124,"nodeType":"Block","src":"2624:37:48","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9117,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"2641:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":9118,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9112,"src":"2645:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2641:5:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":9121,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9112,"src":"2653:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"2641:13:48","trueExpression":{"id":9120,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"2649:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9116,"id":9123,"nodeType":"Return","src":"2634:20:48"}]},"documentation":{"id":9108,"nodeType":"StructuredDocumentation","src":"2492:60:48","text":" @dev Returns the smallest of two numbers."},"id":9125,"implemented":true,"kind":"function","modifiers":[],"name":"min","nameLocation":"2566:3:48","nodeType":"FunctionDefinition","parameters":{"id":9113,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9110,"mutability":"mutable","name":"a","nameLocation":"2578:1:48","nodeType":"VariableDeclaration","scope":9125,"src":"2570:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9109,"name":"uint256","nodeType":"ElementaryTypeName","src":"2570:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9112,"mutability":"mutable","name":"b","nameLocation":"2589:1:48","nodeType":"VariableDeclaration","scope":9125,"src":"2581:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9111,"name":"uint256","nodeType":"ElementaryTypeName","src":"2581:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2569:22:48"},"returnParameters":{"id":9116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9115,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9125,"src":"2615:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9114,"name":"uint256","nodeType":"ElementaryTypeName","src":"2615:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2614:9:48"},"scope":9974,"src":"2557:104:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9147,"nodeType":"Block","src":"2845:82:48","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9135,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9128,"src":"2900:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":9136,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9130,"src":"2904:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2900:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9138,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2899:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9139,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9128,"src":"2910:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":9140,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9130,"src":"2914:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2910:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9142,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2909:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":9143,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2919:1:48","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"2909:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2899:21:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9134,"id":9146,"nodeType":"Return","src":"2892:28:48"}]},"documentation":{"id":9126,"nodeType":"StructuredDocumentation","src":"2667:102:48","text":" @dev Returns the average of two numbers. The result is rounded towards\n zero."},"id":9148,"implemented":true,"kind":"function","modifiers":[],"name":"average","nameLocation":"2783:7:48","nodeType":"FunctionDefinition","parameters":{"id":9131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9128,"mutability":"mutable","name":"a","nameLocation":"2799:1:48","nodeType":"VariableDeclaration","scope":9148,"src":"2791:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9127,"name":"uint256","nodeType":"ElementaryTypeName","src":"2791:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9130,"mutability":"mutable","name":"b","nameLocation":"2810:1:48","nodeType":"VariableDeclaration","scope":9148,"src":"2802:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9129,"name":"uint256","nodeType":"ElementaryTypeName","src":"2802:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2790:22:48"},"returnParameters":{"id":9134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9133,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9148,"src":"2836:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9132,"name":"uint256","nodeType":"ElementaryTypeName","src":"2836:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2835:9:48"},"scope":9974,"src":"2774:153:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9181,"nodeType":"Block","src":"3219:260:48","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9158,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9153,"src":"3233:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":9159,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3238:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3233:6:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9166,"nodeType":"IfStatement","src":"3229:127:48","trueBody":{"id":9165,"nodeType":"Block","src":"3241:115:48","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9161,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9151,"src":"3340:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9162,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9153,"src":"3344:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3340:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9157,"id":9164,"nodeType":"Return","src":"3333:12:48"}]}},{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9167,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9151,"src":"3444:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":9168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3449:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3444:6:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9171,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9151,"src":"3458:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":9172,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3462:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3458:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9174,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3457:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9175,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9153,"src":"3467:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3457:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":9177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3471:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3457:15:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"3444:28:48","trueExpression":{"hexValue":"30","id":9170,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3453:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9157,"id":9180,"nodeType":"Return","src":"3437:35:48"}]},"documentation":{"id":9149,"nodeType":"StructuredDocumentation","src":"2933:210:48","text":" @dev Returns the ceiling of the division of two numbers.\n This differs from standard division with `/` in that it rounds towards infinity instead\n of rounding towards zero."},"id":9182,"implemented":true,"kind":"function","modifiers":[],"name":"ceilDiv","nameLocation":"3157:7:48","nodeType":"FunctionDefinition","parameters":{"id":9154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9151,"mutability":"mutable","name":"a","nameLocation":"3173:1:48","nodeType":"VariableDeclaration","scope":9182,"src":"3165:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9150,"name":"uint256","nodeType":"ElementaryTypeName","src":"3165:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9153,"mutability":"mutable","name":"b","nameLocation":"3184:1:48","nodeType":"VariableDeclaration","scope":9182,"src":"3176:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9152,"name":"uint256","nodeType":"ElementaryTypeName","src":"3176:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3164:22:48"},"returnParameters":{"id":9157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9156,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9182,"src":"3210:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9155,"name":"uint256","nodeType":"ElementaryTypeName","src":"3210:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3209:9:48"},"scope":9974,"src":"3148:331:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9307,"nodeType":"Block","src":"3901:4018:48","statements":[{"id":9306,"nodeType":"UncheckedBlock","src":"3911:4002:48","statements":[{"assignments":[9195],"declarations":[{"constant":false,"id":9195,"mutability":"mutable","name":"prod0","nameLocation":"4240:5:48","nodeType":"VariableDeclaration","scope":9306,"src":"4232:13:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9194,"name":"uint256","nodeType":"ElementaryTypeName","src":"4232:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9199,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9196,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9185,"src":"4248:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9197,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9187,"src":"4252:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4248:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4232:21:48"},{"assignments":[9201],"declarations":[{"constant":false,"id":9201,"mutability":"mutable","name":"prod1","nameLocation":"4320:5:48","nodeType":"VariableDeclaration","scope":9306,"src":"4312:13:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9200,"name":"uint256","nodeType":"ElementaryTypeName","src":"4312:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9202,"nodeType":"VariableDeclarationStatement","src":"4312:13:48"},{"AST":{"nativeSrc":"4392:122:48","nodeType":"YulBlock","src":"4392:122:48","statements":[{"nativeSrc":"4410:30:48","nodeType":"YulVariableDeclaration","src":"4410:30:48","value":{"arguments":[{"name":"x","nativeSrc":"4427:1:48","nodeType":"YulIdentifier","src":"4427:1:48"},{"name":"y","nativeSrc":"4430:1:48","nodeType":"YulIdentifier","src":"4430:1:48"},{"arguments":[{"kind":"number","nativeSrc":"4437:1:48","nodeType":"YulLiteral","src":"4437:1:48","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"4433:3:48","nodeType":"YulIdentifier","src":"4433:3:48"},"nativeSrc":"4433:6:48","nodeType":"YulFunctionCall","src":"4433:6:48"}],"functionName":{"name":"mulmod","nativeSrc":"4420:6:48","nodeType":"YulIdentifier","src":"4420:6:48"},"nativeSrc":"4420:20:48","nodeType":"YulFunctionCall","src":"4420:20:48"},"variables":[{"name":"mm","nativeSrc":"4414:2:48","nodeType":"YulTypedName","src":"4414:2:48","type":""}]},{"nativeSrc":"4457:43:48","nodeType":"YulAssignment","src":"4457:43:48","value":{"arguments":[{"arguments":[{"name":"mm","nativeSrc":"4474:2:48","nodeType":"YulIdentifier","src":"4474:2:48"},{"name":"prod0","nativeSrc":"4478:5:48","nodeType":"YulIdentifier","src":"4478:5:48"}],"functionName":{"name":"sub","nativeSrc":"4470:3:48","nodeType":"YulIdentifier","src":"4470:3:48"},"nativeSrc":"4470:14:48","nodeType":"YulFunctionCall","src":"4470:14:48"},{"arguments":[{"name":"mm","nativeSrc":"4489:2:48","nodeType":"YulIdentifier","src":"4489:2:48"},{"name":"prod0","nativeSrc":"4493:5:48","nodeType":"YulIdentifier","src":"4493:5:48"}],"functionName":{"name":"lt","nativeSrc":"4486:2:48","nodeType":"YulIdentifier","src":"4486:2:48"},"nativeSrc":"4486:13:48","nodeType":"YulFunctionCall","src":"4486:13:48"}],"functionName":{"name":"sub","nativeSrc":"4466:3:48","nodeType":"YulIdentifier","src":"4466:3:48"},"nativeSrc":"4466:34:48","nodeType":"YulFunctionCall","src":"4466:34:48"},"variableNames":[{"name":"prod1","nativeSrc":"4457:5:48","nodeType":"YulIdentifier","src":"4457:5:48"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":9195,"isOffset":false,"isSlot":false,"src":"4478:5:48","valueSize":1},{"declaration":9195,"isOffset":false,"isSlot":false,"src":"4493:5:48","valueSize":1},{"declaration":9201,"isOffset":false,"isSlot":false,"src":"4457:5:48","valueSize":1},{"declaration":9185,"isOffset":false,"isSlot":false,"src":"4427:1:48","valueSize":1},{"declaration":9187,"isOffset":false,"isSlot":false,"src":"4430:1:48","valueSize":1}],"id":9203,"nodeType":"InlineAssembly","src":"4383:131:48"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9204,"name":"prod1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9201,"src":"4595:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":9205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4604:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4595:10:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9212,"nodeType":"IfStatement","src":"4591:368:48","trueBody":{"id":9211,"nodeType":"Block","src":"4607:352:48","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9207,"name":"prod0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9195,"src":"4925:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9208,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9189,"src":"4933:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4925:19:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9193,"id":9210,"nodeType":"Return","src":"4918:26:48"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9213,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9189,"src":"5065:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":9214,"name":"prod1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9201,"src":"5080:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5065:20:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9220,"nodeType":"IfStatement","src":"5061:88:48","trueBody":{"id":9219,"nodeType":"Block","src":"5087:62:48","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9216,"name":"MathOverflowedMulDiv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8926,"src":"5112:20:48","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5112:22:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9218,"nodeType":"RevertStatement","src":"5105:29:48"}]}},{"assignments":[9222],"declarations":[{"constant":false,"id":9222,"mutability":"mutable","name":"remainder","nameLocation":"5412:9:48","nodeType":"VariableDeclaration","scope":9306,"src":"5404:17:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9221,"name":"uint256","nodeType":"ElementaryTypeName","src":"5404:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9223,"nodeType":"VariableDeclarationStatement","src":"5404:17:48"},{"AST":{"nativeSrc":"5444:291:48","nodeType":"YulBlock","src":"5444:291:48","statements":[{"nativeSrc":"5513:38:48","nodeType":"YulAssignment","src":"5513:38:48","value":{"arguments":[{"name":"x","nativeSrc":"5533:1:48","nodeType":"YulIdentifier","src":"5533:1:48"},{"name":"y","nativeSrc":"5536:1:48","nodeType":"YulIdentifier","src":"5536:1:48"},{"name":"denominator","nativeSrc":"5539:11:48","nodeType":"YulIdentifier","src":"5539:11:48"}],"functionName":{"name":"mulmod","nativeSrc":"5526:6:48","nodeType":"YulIdentifier","src":"5526:6:48"},"nativeSrc":"5526:25:48","nodeType":"YulFunctionCall","src":"5526:25:48"},"variableNames":[{"name":"remainder","nativeSrc":"5513:9:48","nodeType":"YulIdentifier","src":"5513:9:48"}]},{"nativeSrc":"5633:41:48","nodeType":"YulAssignment","src":"5633:41:48","value":{"arguments":[{"name":"prod1","nativeSrc":"5646:5:48","nodeType":"YulIdentifier","src":"5646:5:48"},{"arguments":[{"name":"remainder","nativeSrc":"5656:9:48","nodeType":"YulIdentifier","src":"5656:9:48"},{"name":"prod0","nativeSrc":"5667:5:48","nodeType":"YulIdentifier","src":"5667:5:48"}],"functionName":{"name":"gt","nativeSrc":"5653:2:48","nodeType":"YulIdentifier","src":"5653:2:48"},"nativeSrc":"5653:20:48","nodeType":"YulFunctionCall","src":"5653:20:48"}],"functionName":{"name":"sub","nativeSrc":"5642:3:48","nodeType":"YulIdentifier","src":"5642:3:48"},"nativeSrc":"5642:32:48","nodeType":"YulFunctionCall","src":"5642:32:48"},"variableNames":[{"name":"prod1","nativeSrc":"5633:5:48","nodeType":"YulIdentifier","src":"5633:5:48"}]},{"nativeSrc":"5691:30:48","nodeType":"YulAssignment","src":"5691:30:48","value":{"arguments":[{"name":"prod0","nativeSrc":"5704:5:48","nodeType":"YulIdentifier","src":"5704:5:48"},{"name":"remainder","nativeSrc":"5711:9:48","nodeType":"YulIdentifier","src":"5711:9:48"}],"functionName":{"name":"sub","nativeSrc":"5700:3:48","nodeType":"YulIdentifier","src":"5700:3:48"},"nativeSrc":"5700:21:48","nodeType":"YulFunctionCall","src":"5700:21:48"},"variableNames":[{"name":"prod0","nativeSrc":"5691:5:48","nodeType":"YulIdentifier","src":"5691:5:48"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":9189,"isOffset":false,"isSlot":false,"src":"5539:11:48","valueSize":1},{"declaration":9195,"isOffset":false,"isSlot":false,"src":"5667:5:48","valueSize":1},{"declaration":9195,"isOffset":false,"isSlot":false,"src":"5691:5:48","valueSize":1},{"declaration":9195,"isOffset":false,"isSlot":false,"src":"5704:5:48","valueSize":1},{"declaration":9201,"isOffset":false,"isSlot":false,"src":"5633:5:48","valueSize":1},{"declaration":9201,"isOffset":false,"isSlot":false,"src":"5646:5:48","valueSize":1},{"declaration":9222,"isOffset":false,"isSlot":false,"src":"5513:9:48","valueSize":1},{"declaration":9222,"isOffset":false,"isSlot":false,"src":"5656:9:48","valueSize":1},{"declaration":9222,"isOffset":false,"isSlot":false,"src":"5711:9:48","valueSize":1},{"declaration":9185,"isOffset":false,"isSlot":false,"src":"5533:1:48","valueSize":1},{"declaration":9187,"isOffset":false,"isSlot":false,"src":"5536:1:48","valueSize":1}],"id":9224,"nodeType":"InlineAssembly","src":"5435:300:48"},{"assignments":[9226],"declarations":[{"constant":false,"id":9226,"mutability":"mutable","name":"twos","nameLocation":"5947:4:48","nodeType":"VariableDeclaration","scope":9306,"src":"5939:12:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9225,"name":"uint256","nodeType":"ElementaryTypeName","src":"5939:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9233,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9227,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9189,"src":"5954:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"30","id":9228,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5969:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":9229,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9189,"src":"5973:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5969:15:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9231,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5968:17:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5954:31:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5939:46:48"},{"AST":{"nativeSrc":"6008:362:48","nodeType":"YulBlock","src":"6008:362:48","statements":[{"nativeSrc":"6073:37:48","nodeType":"YulAssignment","src":"6073:37:48","value":{"arguments":[{"name":"denominator","nativeSrc":"6092:11:48","nodeType":"YulIdentifier","src":"6092:11:48"},{"name":"twos","nativeSrc":"6105:4:48","nodeType":"YulIdentifier","src":"6105:4:48"}],"functionName":{"name":"div","nativeSrc":"6088:3:48","nodeType":"YulIdentifier","src":"6088:3:48"},"nativeSrc":"6088:22:48","nodeType":"YulFunctionCall","src":"6088:22:48"},"variableNames":[{"name":"denominator","nativeSrc":"6073:11:48","nodeType":"YulIdentifier","src":"6073:11:48"}]},{"nativeSrc":"6177:25:48","nodeType":"YulAssignment","src":"6177:25:48","value":{"arguments":[{"name":"prod0","nativeSrc":"6190:5:48","nodeType":"YulIdentifier","src":"6190:5:48"},{"name":"twos","nativeSrc":"6197:4:48","nodeType":"YulIdentifier","src":"6197:4:48"}],"functionName":{"name":"div","nativeSrc":"6186:3:48","nodeType":"YulIdentifier","src":"6186:3:48"},"nativeSrc":"6186:16:48","nodeType":"YulFunctionCall","src":"6186:16:48"},"variableNames":[{"name":"prod0","nativeSrc":"6177:5:48","nodeType":"YulIdentifier","src":"6177:5:48"}]},{"nativeSrc":"6317:39:48","nodeType":"YulAssignment","src":"6317:39:48","value":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"6337:1:48","nodeType":"YulLiteral","src":"6337:1:48","type":"","value":"0"},{"name":"twos","nativeSrc":"6340:4:48","nodeType":"YulIdentifier","src":"6340:4:48"}],"functionName":{"name":"sub","nativeSrc":"6333:3:48","nodeType":"YulIdentifier","src":"6333:3:48"},"nativeSrc":"6333:12:48","nodeType":"YulFunctionCall","src":"6333:12:48"},{"name":"twos","nativeSrc":"6347:4:48","nodeType":"YulIdentifier","src":"6347:4:48"}],"functionName":{"name":"div","nativeSrc":"6329:3:48","nodeType":"YulIdentifier","src":"6329:3:48"},"nativeSrc":"6329:23:48","nodeType":"YulFunctionCall","src":"6329:23:48"},{"kind":"number","nativeSrc":"6354:1:48","nodeType":"YulLiteral","src":"6354:1:48","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"6325:3:48","nodeType":"YulIdentifier","src":"6325:3:48"},"nativeSrc":"6325:31:48","nodeType":"YulFunctionCall","src":"6325:31:48"},"variableNames":[{"name":"twos","nativeSrc":"6317:4:48","nodeType":"YulIdentifier","src":"6317:4:48"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":9189,"isOffset":false,"isSlot":false,"src":"6073:11:48","valueSize":1},{"declaration":9189,"isOffset":false,"isSlot":false,"src":"6092:11:48","valueSize":1},{"declaration":9195,"isOffset":false,"isSlot":false,"src":"6177:5:48","valueSize":1},{"declaration":9195,"isOffset":false,"isSlot":false,"src":"6190:5:48","valueSize":1},{"declaration":9226,"isOffset":false,"isSlot":false,"src":"6105:4:48","valueSize":1},{"declaration":9226,"isOffset":false,"isSlot":false,"src":"6197:4:48","valueSize":1},{"declaration":9226,"isOffset":false,"isSlot":false,"src":"6317:4:48","valueSize":1},{"declaration":9226,"isOffset":false,"isSlot":false,"src":"6340:4:48","valueSize":1},{"declaration":9226,"isOffset":false,"isSlot":false,"src":"6347:4:48","valueSize":1}],"id":9234,"nodeType":"InlineAssembly","src":"5999:371:48"},{"expression":{"id":9239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9235,"name":"prod0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9195,"src":"6436:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9236,"name":"prod1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9201,"src":"6445:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9237,"name":"twos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9226,"src":"6453:4:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6445:12:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6436:21:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9240,"nodeType":"ExpressionStatement","src":"6436:21:48"},{"assignments":[9242],"declarations":[{"constant":false,"id":9242,"mutability":"mutable","name":"inverse","nameLocation":"6783:7:48","nodeType":"VariableDeclaration","scope":9306,"src":"6775:15:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9241,"name":"uint256","nodeType":"ElementaryTypeName","src":"6775:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9249,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"33","id":9243,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6794:1:48","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9244,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9189,"src":"6798:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6794:15:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9246,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6793:17:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"hexValue":"32","id":9247,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6813:1:48","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"6793:21:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6775:39:48"},{"expression":{"id":9256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9250,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9242,"src":"7031:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":9251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7042:1:48","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9252,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9189,"src":"7046:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9253,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9242,"src":"7060:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7046:21:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7042:25:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7031:36:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9257,"nodeType":"ExpressionStatement","src":"7031:36:48"},{"expression":{"id":9264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9258,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9242,"src":"7100:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":9259,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7111:1:48","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9260,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9189,"src":"7115:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9261,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9242,"src":"7129:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7115:21:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7111:25:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7100:36:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9265,"nodeType":"ExpressionStatement","src":"7100:36:48"},{"expression":{"id":9272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9266,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9242,"src":"7170:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":9267,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7181:1:48","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9268,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9189,"src":"7185:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9269,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9242,"src":"7199:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7185:21:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7181:25:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7170:36:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9273,"nodeType":"ExpressionStatement","src":"7170:36:48"},{"expression":{"id":9280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9274,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9242,"src":"7240:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":9275,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7251:1:48","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9276,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9189,"src":"7255:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9277,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9242,"src":"7269:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7255:21:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7251:25:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7240:36:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9281,"nodeType":"ExpressionStatement","src":"7240:36:48"},{"expression":{"id":9288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9282,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9242,"src":"7310:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":9283,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7321:1:48","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9284,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9189,"src":"7325:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9285,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9242,"src":"7339:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7325:21:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7321:25:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7310:36:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9289,"nodeType":"ExpressionStatement","src":"7310:36:48"},{"expression":{"id":9296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9290,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9242,"src":"7381:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":9291,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7392:1:48","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9292,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9189,"src":"7396:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9293,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9242,"src":"7410:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7396:21:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7392:25:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7381:36:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9297,"nodeType":"ExpressionStatement","src":"7381:36:48"},{"expression":{"id":9302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9298,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9192,"src":"7851:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9299,"name":"prod0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9195,"src":"7860:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9300,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9242,"src":"7868:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7860:15:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7851:24:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9303,"nodeType":"ExpressionStatement","src":"7851:24:48"},{"expression":{"id":9304,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9192,"src":"7896:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9193,"id":9305,"nodeType":"Return","src":"7889:13:48"}]}]},"documentation":{"id":9183,"nodeType":"StructuredDocumentation","src":"3485:313:48","text":" @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n denominator == 0.\n @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n Uniswap Labs also under MIT license."},"id":9308,"implemented":true,"kind":"function","modifiers":[],"name":"mulDiv","nameLocation":"3812:6:48","nodeType":"FunctionDefinition","parameters":{"id":9190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9185,"mutability":"mutable","name":"x","nameLocation":"3827:1:48","nodeType":"VariableDeclaration","scope":9308,"src":"3819:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9184,"name":"uint256","nodeType":"ElementaryTypeName","src":"3819:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9187,"mutability":"mutable","name":"y","nameLocation":"3838:1:48","nodeType":"VariableDeclaration","scope":9308,"src":"3830:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9186,"name":"uint256","nodeType":"ElementaryTypeName","src":"3830:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9189,"mutability":"mutable","name":"denominator","nameLocation":"3849:11:48","nodeType":"VariableDeclaration","scope":9308,"src":"3841:19:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9188,"name":"uint256","nodeType":"ElementaryTypeName","src":"3841:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3818:43:48"},"returnParameters":{"id":9193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9192,"mutability":"mutable","name":"result","nameLocation":"3893:6:48","nodeType":"VariableDeclaration","scope":9308,"src":"3885:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9191,"name":"uint256","nodeType":"ElementaryTypeName","src":"3885:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3884:16:48"},"scope":9974,"src":"3803:4116:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9350,"nodeType":"Block","src":"8161:192:48","statements":[{"assignments":[9324],"declarations":[{"constant":false,"id":9324,"mutability":"mutable","name":"result","nameLocation":"8179:6:48","nodeType":"VariableDeclaration","scope":9350,"src":"8171:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9323,"name":"uint256","nodeType":"ElementaryTypeName","src":"8171:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9330,"initialValue":{"arguments":[{"id":9326,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9311,"src":"8195:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":9327,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9313,"src":"8198:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":9328,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9315,"src":"8201:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9325,"name":"mulDiv","nodeType":"Identifier","overloadedDeclarations":[9308,9351],"referencedDeclaration":9308,"src":"8188:6:48","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":9329,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8188:25:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8171:42:48"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":9332,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9318,"src":"8244:8:48","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"}],"id":9331,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9973,"src":"8227:16:48","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$8931_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":9333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8227:26:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":9335,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9311,"src":"8264:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":9336,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9313,"src":"8267:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":9337,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9315,"src":"8270:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9334,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"8257:6:48","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":9338,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8257:25:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9339,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8285:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8257:29:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8227:59:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9347,"nodeType":"IfStatement","src":"8223:101:48","trueBody":{"id":9346,"nodeType":"Block","src":"8288:36:48","statements":[{"expression":{"id":9344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9342,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9324,"src":"8302:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":9343,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8312:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8302:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9345,"nodeType":"ExpressionStatement","src":"8302:11:48"}]}},{"expression":{"id":9348,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9324,"src":"8340:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9322,"id":9349,"nodeType":"Return","src":"8333:13:48"}]},"documentation":{"id":9309,"nodeType":"StructuredDocumentation","src":"7925:121:48","text":" @notice Calculates x * y / denominator with full precision, following the selected rounding direction."},"id":9351,"implemented":true,"kind":"function","modifiers":[],"name":"mulDiv","nameLocation":"8060:6:48","nodeType":"FunctionDefinition","parameters":{"id":9319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9311,"mutability":"mutable","name":"x","nameLocation":"8075:1:48","nodeType":"VariableDeclaration","scope":9351,"src":"8067:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9310,"name":"uint256","nodeType":"ElementaryTypeName","src":"8067:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9313,"mutability":"mutable","name":"y","nameLocation":"8086:1:48","nodeType":"VariableDeclaration","scope":9351,"src":"8078:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9312,"name":"uint256","nodeType":"ElementaryTypeName","src":"8078:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9315,"mutability":"mutable","name":"denominator","nameLocation":"8097:11:48","nodeType":"VariableDeclaration","scope":9351,"src":"8089:19:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9314,"name":"uint256","nodeType":"ElementaryTypeName","src":"8089:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9318,"mutability":"mutable","name":"rounding","nameLocation":"8119:8:48","nodeType":"VariableDeclaration","scope":9351,"src":"8110:17:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"},"typeName":{"id":9317,"nodeType":"UserDefinedTypeName","pathNode":{"id":9316,"name":"Rounding","nameLocations":["8110:8:48"],"nodeType":"IdentifierPath","referencedDeclaration":8931,"src":"8110:8:48"},"referencedDeclaration":8931,"src":"8110:8:48","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"8066:62:48"},"returnParameters":{"id":9322,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9321,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9351,"src":"8152:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9320,"name":"uint256","nodeType":"ElementaryTypeName","src":"8152:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8151:9:48"},"scope":9974,"src":"8051:302:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9462,"nodeType":"Block","src":"8644:1585:48","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9359,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9354,"src":"8658:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":9360,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8663:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8658:6:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9365,"nodeType":"IfStatement","src":"8654:45:48","trueBody":{"id":9364,"nodeType":"Block","src":"8666:33:48","statements":[{"expression":{"hexValue":"30","id":9362,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8687:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":9358,"id":9363,"nodeType":"Return","src":"8680:8:48"}]}},{"assignments":[9367],"declarations":[{"constant":false,"id":9367,"mutability":"mutable","name":"result","nameLocation":"9386:6:48","nodeType":"VariableDeclaration","scope":9462,"src":"9378:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9366,"name":"uint256","nodeType":"ElementaryTypeName","src":"9378:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9376,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":9368,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9395:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":9370,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9354,"src":"9406:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9369,"name":"log2","nodeType":"Identifier","overloadedDeclarations":[9630,9665],"referencedDeclaration":9630,"src":"9401:4:48","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":9371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9401:7:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":9372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9412:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9401:12:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9374,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9400:14:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9395:19:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9378:36:48"},{"id":9461,"nodeType":"UncheckedBlock","src":"9815:408:48","statements":[{"expression":{"id":9386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9377,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"9839:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9378,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"9849:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9379,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9354,"src":"9858:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9380,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"9862:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9858:10:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9849:19:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9383,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9848:21:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":9384,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9873:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9848:26:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9839:35:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9387,"nodeType":"ExpressionStatement","src":"9839:35:48"},{"expression":{"id":9397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9388,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"9888:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9389,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"9898:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9390,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9354,"src":"9907:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9391,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"9911:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9907:10:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9898:19:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9394,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9897:21:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":9395,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9922:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9897:26:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9888:35:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9398,"nodeType":"ExpressionStatement","src":"9888:35:48"},{"expression":{"id":9408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9399,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"9937:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9400,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"9947:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9401,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9354,"src":"9956:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9402,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"9960:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9956:10:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9947:19:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9405,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9946:21:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":9406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9971:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9946:26:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9937:35:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9409,"nodeType":"ExpressionStatement","src":"9937:35:48"},{"expression":{"id":9419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9410,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"9986:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9411,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"9996:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9412,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9354,"src":"10005:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9413,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"10009:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10005:10:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9996:19:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9416,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9995:21:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":9417,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10020:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9995:26:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9986:35:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9420,"nodeType":"ExpressionStatement","src":"9986:35:48"},{"expression":{"id":9430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9421,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"10035:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9422,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"10045:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9423,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9354,"src":"10054:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9424,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"10058:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10054:10:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10045:19:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9427,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10044:21:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":9428,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10069:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10044:26:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10035:35:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9431,"nodeType":"ExpressionStatement","src":"10035:35:48"},{"expression":{"id":9441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9432,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"10084:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9433,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"10094:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9434,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9354,"src":"10103:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9435,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"10107:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10103:10:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10094:19:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9438,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10093:21:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":9439,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10118:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10093:26:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10084:35:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9442,"nodeType":"ExpressionStatement","src":"10084:35:48"},{"expression":{"id":9452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9443,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"10133:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9444,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"10143:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9445,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9354,"src":"10152:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9446,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"10156:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10152:10:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10143:19:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9449,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10142:21:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":9450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10167:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10142:26:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10133:35:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9453,"nodeType":"ExpressionStatement","src":"10133:35:48"},{"expression":{"arguments":[{"id":9455,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"10193:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9456,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9354,"src":"10201:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9457,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"10205:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10201:10:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9454,"name":"min","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9125,"src":"10189:3:48","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10189:23:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9358,"id":9460,"nodeType":"Return","src":"10182:30:48"}]}]},"documentation":{"id":9352,"nodeType":"StructuredDocumentation","src":"8359:223:48","text":" @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n towards zero.\n Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11)."},"id":9463,"implemented":true,"kind":"function","modifiers":[],"name":"sqrt","nameLocation":"8596:4:48","nodeType":"FunctionDefinition","parameters":{"id":9355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9354,"mutability":"mutable","name":"a","nameLocation":"8609:1:48","nodeType":"VariableDeclaration","scope":9463,"src":"8601:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9353,"name":"uint256","nodeType":"ElementaryTypeName","src":"8601:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8600:11:48"},"returnParameters":{"id":9358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9357,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9463,"src":"8635:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9356,"name":"uint256","nodeType":"ElementaryTypeName","src":"8635:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8634:9:48"},"scope":9974,"src":"8587:1642:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9497,"nodeType":"Block","src":"10405:164:48","statements":[{"id":9496,"nodeType":"UncheckedBlock","src":"10415:148:48","statements":[{"assignments":[9475],"declarations":[{"constant":false,"id":9475,"mutability":"mutable","name":"result","nameLocation":"10447:6:48","nodeType":"VariableDeclaration","scope":9496,"src":"10439:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9474,"name":"uint256","nodeType":"ElementaryTypeName","src":"10439:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9479,"initialValue":{"arguments":[{"id":9477,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9466,"src":"10461:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9476,"name":"sqrt","nodeType":"Identifier","overloadedDeclarations":[9463,9498],"referencedDeclaration":9463,"src":"10456:4:48","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":9478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10456:7:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10439:24:48"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9480,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9475,"src":"10484:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":9482,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9469,"src":"10511:8:48","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"}],"id":9481,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9973,"src":"10494:16:48","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$8931_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":9483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10494:26:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9484,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9475,"src":"10524:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9485,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9475,"src":"10533:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10524:15:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":9487,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9466,"src":"10542:1:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10524:19:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10494:49:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":9491,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10550:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":9492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"10494:57:48","trueExpression":{"hexValue":"31","id":9490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10546:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":9493,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10493:59:48","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"10484:68:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9473,"id":9495,"nodeType":"Return","src":"10477:75:48"}]}]},"documentation":{"id":9464,"nodeType":"StructuredDocumentation","src":"10235:89:48","text":" @notice Calculates sqrt(a), following the selected rounding direction."},"id":9498,"implemented":true,"kind":"function","modifiers":[],"name":"sqrt","nameLocation":"10338:4:48","nodeType":"FunctionDefinition","parameters":{"id":9470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9466,"mutability":"mutable","name":"a","nameLocation":"10351:1:48","nodeType":"VariableDeclaration","scope":9498,"src":"10343:9:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9465,"name":"uint256","nodeType":"ElementaryTypeName","src":"10343:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9469,"mutability":"mutable","name":"rounding","nameLocation":"10363:8:48","nodeType":"VariableDeclaration","scope":9498,"src":"10354:17:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"},"typeName":{"id":9468,"nodeType":"UserDefinedTypeName","pathNode":{"id":9467,"name":"Rounding","nameLocations":["10354:8:48"],"nodeType":"IdentifierPath","referencedDeclaration":8931,"src":"10354:8:48"},"referencedDeclaration":8931,"src":"10354:8:48","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"10342:30:48"},"returnParameters":{"id":9473,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9472,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9498,"src":"10396:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9471,"name":"uint256","nodeType":"ElementaryTypeName","src":"10396:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10395:9:48"},"scope":9974,"src":"10329:240:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9629,"nodeType":"Block","src":"10760:922:48","statements":[{"assignments":[9507],"declarations":[{"constant":false,"id":9507,"mutability":"mutable","name":"result","nameLocation":"10778:6:48","nodeType":"VariableDeclaration","scope":9629,"src":"10770:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9506,"name":"uint256","nodeType":"ElementaryTypeName","src":"10770:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9509,"initialValue":{"hexValue":"30","id":9508,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10787:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10770:18:48"},{"id":9626,"nodeType":"UncheckedBlock","src":"10798:855:48","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9510,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"10826:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"313238","id":9511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10835:3:48","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"10826:12:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9513,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10841:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10826:16:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9524,"nodeType":"IfStatement","src":"10822:99:48","trueBody":{"id":9523,"nodeType":"Block","src":"10844:77:48","statements":[{"expression":{"id":9517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9515,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"10862:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"313238","id":9516,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10872:3:48","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"10862:13:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9518,"nodeType":"ExpressionStatement","src":"10862:13:48"},{"expression":{"id":9521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9519,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"10893:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"313238","id":9520,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10903:3:48","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"10893:13:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9522,"nodeType":"ExpressionStatement","src":"10893:13:48"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9525,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"10938:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3634","id":9526,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10947:2:48","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"10938:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9528,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10952:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10938:15:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9539,"nodeType":"IfStatement","src":"10934:96:48","trueBody":{"id":9538,"nodeType":"Block","src":"10955:75:48","statements":[{"expression":{"id":9532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9530,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"10973:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3634","id":9531,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10983:2:48","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"10973:12:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9533,"nodeType":"ExpressionStatement","src":"10973:12:48"},{"expression":{"id":9536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9534,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"11003:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3634","id":9535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11013:2:48","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"11003:12:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9537,"nodeType":"ExpressionStatement","src":"11003:12:48"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9540,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"11047:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3332","id":9541,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11056:2:48","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"11047:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11061:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11047:15:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9554,"nodeType":"IfStatement","src":"11043:96:48","trueBody":{"id":9553,"nodeType":"Block","src":"11064:75:48","statements":[{"expression":{"id":9547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9545,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"11082:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3332","id":9546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11092:2:48","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"11082:12:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9548,"nodeType":"ExpressionStatement","src":"11082:12:48"},{"expression":{"id":9551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9549,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"11112:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3332","id":9550,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11122:2:48","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"11112:12:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9552,"nodeType":"ExpressionStatement","src":"11112:12:48"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9555,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"11156:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3136","id":9556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11165:2:48","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"11156:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9558,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11170:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11156:15:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9569,"nodeType":"IfStatement","src":"11152:96:48","trueBody":{"id":9568,"nodeType":"Block","src":"11173:75:48","statements":[{"expression":{"id":9562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9560,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"11191:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3136","id":9561,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11201:2:48","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"11191:12:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9563,"nodeType":"ExpressionStatement","src":"11191:12:48"},{"expression":{"id":9566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9564,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"11221:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":9565,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11231:2:48","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"11221:12:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9567,"nodeType":"ExpressionStatement","src":"11221:12:48"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9570,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"11265:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"38","id":9571,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11274:1:48","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"11265:10:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9573,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11278:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11265:14:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9584,"nodeType":"IfStatement","src":"11261:93:48","trueBody":{"id":9583,"nodeType":"Block","src":"11281:73:48","statements":[{"expression":{"id":9577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9575,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"11299:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"38","id":9576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11309:1:48","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"11299:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9578,"nodeType":"ExpressionStatement","src":"11299:11:48"},{"expression":{"id":9581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9579,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"11328:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"38","id":9580,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11338:1:48","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"11328:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9582,"nodeType":"ExpressionStatement","src":"11328:11:48"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9585,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"11371:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"34","id":9586,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11380:1:48","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11371:10:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9588,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11384:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11371:14:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9599,"nodeType":"IfStatement","src":"11367:93:48","trueBody":{"id":9598,"nodeType":"Block","src":"11387:73:48","statements":[{"expression":{"id":9592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9590,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"11405:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"34","id":9591,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11415:1:48","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11405:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9593,"nodeType":"ExpressionStatement","src":"11405:11:48"},{"expression":{"id":9596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9594,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"11434:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":9595,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11444:1:48","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11434:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9597,"nodeType":"ExpressionStatement","src":"11434:11:48"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9600,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"11477:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"32","id":9601,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11486:1:48","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"11477:10:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9603,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11490:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11477:14:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9614,"nodeType":"IfStatement","src":"11473:93:48","trueBody":{"id":9613,"nodeType":"Block","src":"11493:73:48","statements":[{"expression":{"id":9607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9605,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"11511:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"32","id":9606,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11521:1:48","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"11511:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9608,"nodeType":"ExpressionStatement","src":"11511:11:48"},{"expression":{"id":9611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9609,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"11540:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"32","id":9610,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11550:1:48","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"11540:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9612,"nodeType":"ExpressionStatement","src":"11540:11:48"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9615,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"11583:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":9616,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11592:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11583:10:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11596:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11583:14:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9625,"nodeType":"IfStatement","src":"11579:64:48","trueBody":{"id":9624,"nodeType":"Block","src":"11599:44:48","statements":[{"expression":{"id":9622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9620,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"11617:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":9621,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11627:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11617:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9623,"nodeType":"ExpressionStatement","src":"11617:11:48"}]}}]},{"expression":{"id":9627,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"11669:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9505,"id":9628,"nodeType":"Return","src":"11662:13:48"}]},"documentation":{"id":9499,"nodeType":"StructuredDocumentation","src":"10575:119:48","text":" @dev Return the log in base 2 of a positive value rounded towards zero.\n Returns 0 if given 0."},"id":9630,"implemented":true,"kind":"function","modifiers":[],"name":"log2","nameLocation":"10708:4:48","nodeType":"FunctionDefinition","parameters":{"id":9502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9501,"mutability":"mutable","name":"value","nameLocation":"10721:5:48","nodeType":"VariableDeclaration","scope":9630,"src":"10713:13:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9500,"name":"uint256","nodeType":"ElementaryTypeName","src":"10713:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10712:15:48"},"returnParameters":{"id":9505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9504,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9630,"src":"10751:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9503,"name":"uint256","nodeType":"ElementaryTypeName","src":"10751:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10750:9:48"},"scope":9974,"src":"10699:983:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9664,"nodeType":"Block","src":"11915:168:48","statements":[{"id":9663,"nodeType":"UncheckedBlock","src":"11925:152:48","statements":[{"assignments":[9642],"declarations":[{"constant":false,"id":9642,"mutability":"mutable","name":"result","nameLocation":"11957:6:48","nodeType":"VariableDeclaration","scope":9663,"src":"11949:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9641,"name":"uint256","nodeType":"ElementaryTypeName","src":"11949:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9646,"initialValue":{"arguments":[{"id":9644,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9633,"src":"11971:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9643,"name":"log2","nodeType":"Identifier","overloadedDeclarations":[9630,9665],"referencedDeclaration":9630,"src":"11966:4:48","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":9645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11966:11:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11949:28:48"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9647,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9642,"src":"11998:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":9649,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9636,"src":"12025:8:48","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"}],"id":9648,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9973,"src":"12008:16:48","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$8931_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":9650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12008:26:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":9651,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12038:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":9652,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9642,"src":"12043:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12038:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":9654,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9633,"src":"12052:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12038:19:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12008:49:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":9658,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12064:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":9659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"12008:57:48","trueExpression":{"hexValue":"31","id":9657,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12060:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":9660,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12007:59:48","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11998:68:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9640,"id":9662,"nodeType":"Return","src":"11991:75:48"}]}]},"documentation":{"id":9631,"nodeType":"StructuredDocumentation","src":"11688:142:48","text":" @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":9665,"implemented":true,"kind":"function","modifiers":[],"name":"log2","nameLocation":"11844:4:48","nodeType":"FunctionDefinition","parameters":{"id":9637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9633,"mutability":"mutable","name":"value","nameLocation":"11857:5:48","nodeType":"VariableDeclaration","scope":9665,"src":"11849:13:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9632,"name":"uint256","nodeType":"ElementaryTypeName","src":"11849:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9636,"mutability":"mutable","name":"rounding","nameLocation":"11873:8:48","nodeType":"VariableDeclaration","scope":9665,"src":"11864:17:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"},"typeName":{"id":9635,"nodeType":"UserDefinedTypeName","pathNode":{"id":9634,"name":"Rounding","nameLocations":["11864:8:48"],"nodeType":"IdentifierPath","referencedDeclaration":8931,"src":"11864:8:48"},"referencedDeclaration":8931,"src":"11864:8:48","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"11848:34:48"},"returnParameters":{"id":9640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9639,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9665,"src":"11906:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9638,"name":"uint256","nodeType":"ElementaryTypeName","src":"11906:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11905:9:48"},"scope":9974,"src":"11835:248:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9793,"nodeType":"Block","src":"12276:854:48","statements":[{"assignments":[9674],"declarations":[{"constant":false,"id":9674,"mutability":"mutable","name":"result","nameLocation":"12294:6:48","nodeType":"VariableDeclaration","scope":9793,"src":"12286:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9673,"name":"uint256","nodeType":"ElementaryTypeName","src":"12286:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9676,"initialValue":{"hexValue":"30","id":9675,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12303:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12286:18:48"},{"id":9790,"nodeType":"UncheckedBlock","src":"12314:787:48","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9677,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9668,"src":"12342:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"},"id":9680,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":9678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12351:2:48","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":9679,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12357:2:48","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"12351:8:48","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"}},"src":"12342:17:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9693,"nodeType":"IfStatement","src":"12338:103:48","trueBody":{"id":9692,"nodeType":"Block","src":"12361:80:48","statements":[{"expression":{"id":9686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9682,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9668,"src":"12379:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"},"id":9685,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":9683,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12388:2:48","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":9684,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12394:2:48","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"12388:8:48","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"}},"src":"12379:17:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9687,"nodeType":"ExpressionStatement","src":"12379:17:48"},{"expression":{"id":9690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9688,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9674,"src":"12414:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3634","id":9689,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12424:2:48","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"12414:12:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9691,"nodeType":"ExpressionStatement","src":"12414:12:48"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9694,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9668,"src":"12458:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"},"id":9697,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":9695,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12467:2:48","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":9696,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12473:2:48","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"12467:8:48","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"}},"src":"12458:17:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9710,"nodeType":"IfStatement","src":"12454:103:48","trueBody":{"id":9709,"nodeType":"Block","src":"12477:80:48","statements":[{"expression":{"id":9703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9699,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9668,"src":"12495:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"},"id":9702,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":9700,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12504:2:48","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":9701,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12510:2:48","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"12504:8:48","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"}},"src":"12495:17:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9704,"nodeType":"ExpressionStatement","src":"12495:17:48"},{"expression":{"id":9707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9705,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9674,"src":"12530:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3332","id":9706,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12540:2:48","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"12530:12:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9708,"nodeType":"ExpressionStatement","src":"12530:12:48"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9711,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9668,"src":"12574:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"id":9714,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":9712,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12583:2:48","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":9713,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12589:2:48","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"12583:8:48","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"}},"src":"12574:17:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9727,"nodeType":"IfStatement","src":"12570:103:48","trueBody":{"id":9726,"nodeType":"Block","src":"12593:80:48","statements":[{"expression":{"id":9720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9716,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9668,"src":"12611:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"id":9719,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":9717,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12620:2:48","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":9718,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12626:2:48","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"12620:8:48","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"}},"src":"12611:17:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9721,"nodeType":"ExpressionStatement","src":"12611:17:48"},{"expression":{"id":9724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9722,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9674,"src":"12646:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":9723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12656:2:48","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"12646:12:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9725,"nodeType":"ExpressionStatement","src":"12646:12:48"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9728,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9668,"src":"12690:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":9731,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":9729,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12699:2:48","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":9730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12705:1:48","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12699:7:48","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"12690:16:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9744,"nodeType":"IfStatement","src":"12686:100:48","trueBody":{"id":9743,"nodeType":"Block","src":"12708:78:48","statements":[{"expression":{"id":9737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9733,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9668,"src":"12726:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":9736,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":9734,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12735:2:48","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":9735,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12741:1:48","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12735:7:48","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"12726:16:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9738,"nodeType":"ExpressionStatement","src":"12726:16:48"},{"expression":{"id":9741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9739,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9674,"src":"12760:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"38","id":9740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12770:1:48","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12760:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9742,"nodeType":"ExpressionStatement","src":"12760:11:48"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9745,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9668,"src":"12803:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"id":9748,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":9746,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12812:2:48","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"34","id":9747,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12818:1:48","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"12812:7:48","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"}},"src":"12803:16:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9761,"nodeType":"IfStatement","src":"12799:100:48","trueBody":{"id":9760,"nodeType":"Block","src":"12821:78:48","statements":[{"expression":{"id":9754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9750,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9668,"src":"12839:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"id":9753,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":9751,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12848:2:48","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"34","id":9752,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12854:1:48","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"12848:7:48","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"}},"src":"12839:16:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9755,"nodeType":"ExpressionStatement","src":"12839:16:48"},{"expression":{"id":9758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9756,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9674,"src":"12873:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":9757,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12883:1:48","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"12873:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9759,"nodeType":"ExpressionStatement","src":"12873:11:48"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9762,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9668,"src":"12916:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"id":9765,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":9763,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12925:2:48","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"32","id":9764,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12931:1:48","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"12925:7:48","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"}},"src":"12916:16:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9778,"nodeType":"IfStatement","src":"12912:100:48","trueBody":{"id":9777,"nodeType":"Block","src":"12934:78:48","statements":[{"expression":{"id":9771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9767,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9668,"src":"12952:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"id":9770,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":9768,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12961:2:48","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"32","id":9769,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12967:1:48","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"12961:7:48","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"}},"src":"12952:16:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9772,"nodeType":"ExpressionStatement","src":"12952:16:48"},{"expression":{"id":9775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9773,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9674,"src":"12986:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"32","id":9774,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12996:1:48","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"12986:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9776,"nodeType":"ExpressionStatement","src":"12986:11:48"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9779,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9668,"src":"13029:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"id":9782,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":9780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13038:2:48","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"31","id":9781,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13044:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13038:7:48","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"}},"src":"13029:16:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9789,"nodeType":"IfStatement","src":"13025:66:48","trueBody":{"id":9788,"nodeType":"Block","src":"13047:44:48","statements":[{"expression":{"id":9786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9784,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9674,"src":"13065:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":9785,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13075:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13065:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9787,"nodeType":"ExpressionStatement","src":"13065:11:48"}]}}]},{"expression":{"id":9791,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9674,"src":"13117:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9672,"id":9792,"nodeType":"Return","src":"13110:13:48"}]},"documentation":{"id":9666,"nodeType":"StructuredDocumentation","src":"12089:120:48","text":" @dev Return the log in base 10 of a positive value rounded towards zero.\n Returns 0 if given 0."},"id":9794,"implemented":true,"kind":"function","modifiers":[],"name":"log10","nameLocation":"12223:5:48","nodeType":"FunctionDefinition","parameters":{"id":9669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9668,"mutability":"mutable","name":"value","nameLocation":"12237:5:48","nodeType":"VariableDeclaration","scope":9794,"src":"12229:13:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9667,"name":"uint256","nodeType":"ElementaryTypeName","src":"12229:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12228:15:48"},"returnParameters":{"id":9672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9671,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9794,"src":"12267:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9670,"name":"uint256","nodeType":"ElementaryTypeName","src":"12267:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12266:9:48"},"scope":9974,"src":"12214:916:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9828,"nodeType":"Block","src":"13365:170:48","statements":[{"id":9827,"nodeType":"UncheckedBlock","src":"13375:154:48","statements":[{"assignments":[9806],"declarations":[{"constant":false,"id":9806,"mutability":"mutable","name":"result","nameLocation":"13407:6:48","nodeType":"VariableDeclaration","scope":9827,"src":"13399:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9805,"name":"uint256","nodeType":"ElementaryTypeName","src":"13399:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9810,"initialValue":{"arguments":[{"id":9808,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9797,"src":"13422:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9807,"name":"log10","nodeType":"Identifier","overloadedDeclarations":[9794,9829],"referencedDeclaration":9794,"src":"13416:5:48","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":9809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13416:12:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13399:29:48"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9811,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9806,"src":"13449:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":9813,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9800,"src":"13476:8:48","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"}],"id":9812,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9973,"src":"13459:16:48","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$8931_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":9814,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13459:26:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":9815,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13489:2:48","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":9816,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9806,"src":"13495:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13489:12:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":9818,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9797,"src":"13504:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13489:20:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13459:50:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":9822,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13516:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":9823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"13459:58:48","trueExpression":{"hexValue":"31","id":9821,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13512:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":9824,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13458:60:48","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"13449:69:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9804,"id":9826,"nodeType":"Return","src":"13442:76:48"}]}]},"documentation":{"id":9795,"nodeType":"StructuredDocumentation","src":"13136:143:48","text":" @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":9829,"implemented":true,"kind":"function","modifiers":[],"name":"log10","nameLocation":"13293:5:48","nodeType":"FunctionDefinition","parameters":{"id":9801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9797,"mutability":"mutable","name":"value","nameLocation":"13307:5:48","nodeType":"VariableDeclaration","scope":9829,"src":"13299:13:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9796,"name":"uint256","nodeType":"ElementaryTypeName","src":"13299:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9800,"mutability":"mutable","name":"rounding","nameLocation":"13323:8:48","nodeType":"VariableDeclaration","scope":9829,"src":"13314:17:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"},"typeName":{"id":9799,"nodeType":"UserDefinedTypeName","pathNode":{"id":9798,"name":"Rounding","nameLocations":["13314:8:48"],"nodeType":"IdentifierPath","referencedDeclaration":8931,"src":"13314:8:48"},"referencedDeclaration":8931,"src":"13314:8:48","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"13298:34:48"},"returnParameters":{"id":9804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9803,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9829,"src":"13356:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9802,"name":"uint256","nodeType":"ElementaryTypeName","src":"13356:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13355:9:48"},"scope":9974,"src":"13284:251:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9915,"nodeType":"Block","src":"13855:600:48","statements":[{"assignments":[9838],"declarations":[{"constant":false,"id":9838,"mutability":"mutable","name":"result","nameLocation":"13873:6:48","nodeType":"VariableDeclaration","scope":9915,"src":"13865:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9837,"name":"uint256","nodeType":"ElementaryTypeName","src":"13865:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9840,"initialValue":{"hexValue":"30","id":9839,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13882:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13865:18:48"},{"id":9912,"nodeType":"UncheckedBlock","src":"13893:533:48","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9841,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9832,"src":"13921:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"313238","id":9842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13930:3:48","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"13921:12:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9844,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13936:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13921:16:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9855,"nodeType":"IfStatement","src":"13917:98:48","trueBody":{"id":9854,"nodeType":"Block","src":"13939:76:48","statements":[{"expression":{"id":9848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9846,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9832,"src":"13957:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"313238","id":9847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13967:3:48","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"13957:13:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9849,"nodeType":"ExpressionStatement","src":"13957:13:48"},{"expression":{"id":9852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9850,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9838,"src":"13988:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":9851,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13998:2:48","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"13988:12:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9853,"nodeType":"ExpressionStatement","src":"13988:12:48"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9856,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9832,"src":"14032:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3634","id":9857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14041:2:48","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"14032:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9859,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14046:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14032:15:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9870,"nodeType":"IfStatement","src":"14028:95:48","trueBody":{"id":9869,"nodeType":"Block","src":"14049:74:48","statements":[{"expression":{"id":9863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9861,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9832,"src":"14067:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3634","id":9862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14077:2:48","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"14067:12:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9864,"nodeType":"ExpressionStatement","src":"14067:12:48"},{"expression":{"id":9867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9865,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9838,"src":"14097:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"38","id":9866,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14107:1:48","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"14097:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9868,"nodeType":"ExpressionStatement","src":"14097:11:48"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9871,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9832,"src":"14140:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3332","id":9872,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14149:2:48","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"14140:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9874,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14154:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14140:15:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9885,"nodeType":"IfStatement","src":"14136:95:48","trueBody":{"id":9884,"nodeType":"Block","src":"14157:74:48","statements":[{"expression":{"id":9878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9876,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9832,"src":"14175:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3332","id":9877,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14185:2:48","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"14175:12:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9879,"nodeType":"ExpressionStatement","src":"14175:12:48"},{"expression":{"id":9882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9880,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9838,"src":"14205:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":9881,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14215:1:48","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"14205:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9883,"nodeType":"ExpressionStatement","src":"14205:11:48"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9886,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9832,"src":"14248:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3136","id":9887,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14257:2:48","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"14248:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9889,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14262:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14248:15:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9900,"nodeType":"IfStatement","src":"14244:95:48","trueBody":{"id":9899,"nodeType":"Block","src":"14265:74:48","statements":[{"expression":{"id":9893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9891,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9832,"src":"14283:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3136","id":9892,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14293:2:48","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"14283:12:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9894,"nodeType":"ExpressionStatement","src":"14283:12:48"},{"expression":{"id":9897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9895,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9838,"src":"14313:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"32","id":9896,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14323:1:48","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"14313:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9898,"nodeType":"ExpressionStatement","src":"14313:11:48"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9901,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9832,"src":"14356:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"38","id":9902,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14365:1:48","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"14356:10:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9904,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14369:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14356:14:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9911,"nodeType":"IfStatement","src":"14352:64:48","trueBody":{"id":9910,"nodeType":"Block","src":"14372:44:48","statements":[{"expression":{"id":9908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9906,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9838,"src":"14390:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":9907,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14400:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"14390:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9909,"nodeType":"ExpressionStatement","src":"14390:11:48"}]}}]},{"expression":{"id":9913,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9838,"src":"14442:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9836,"id":9914,"nodeType":"Return","src":"14435:13:48"}]},"documentation":{"id":9830,"nodeType":"StructuredDocumentation","src":"13541:246:48","text":" @dev Return the log in base 256 of a positive value rounded towards zero.\n Returns 0 if given 0.\n Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string."},"id":9916,"implemented":true,"kind":"function","modifiers":[],"name":"log256","nameLocation":"13801:6:48","nodeType":"FunctionDefinition","parameters":{"id":9833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9832,"mutability":"mutable","name":"value","nameLocation":"13816:5:48","nodeType":"VariableDeclaration","scope":9916,"src":"13808:13:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9831,"name":"uint256","nodeType":"ElementaryTypeName","src":"13808:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13807:15:48"},"returnParameters":{"id":9836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9835,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9916,"src":"13846:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9834,"name":"uint256","nodeType":"ElementaryTypeName","src":"13846:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13845:9:48"},"scope":9974,"src":"13792:663:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9953,"nodeType":"Block","src":"14692:177:48","statements":[{"id":9952,"nodeType":"UncheckedBlock","src":"14702:161:48","statements":[{"assignments":[9928],"declarations":[{"constant":false,"id":9928,"mutability":"mutable","name":"result","nameLocation":"14734:6:48","nodeType":"VariableDeclaration","scope":9952,"src":"14726:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9927,"name":"uint256","nodeType":"ElementaryTypeName","src":"14726:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9932,"initialValue":{"arguments":[{"id":9930,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9919,"src":"14750:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9929,"name":"log256","nodeType":"Identifier","overloadedDeclarations":[9916,9954],"referencedDeclaration":9916,"src":"14743:6:48","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":9931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14743:13:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14726:30:48"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9933,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9928,"src":"14777:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":9935,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9922,"src":"14804:8:48","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"}],"id":9934,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9973,"src":"14787:16:48","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$8931_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":9936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14787:26:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":9937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14817:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9938,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9928,"src":"14823:6:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"33","id":9939,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14833:1:48","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"14823:11:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9941,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14822:13:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14817:18:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":9943,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9919,"src":"14838:5:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14817:26:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14787:56:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":9947,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14850:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":9948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"14787:64:48","trueExpression":{"hexValue":"31","id":9946,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14846:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":9949,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14786:66:48","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"14777:75:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9926,"id":9951,"nodeType":"Return","src":"14770:82:48"}]}]},"documentation":{"id":9917,"nodeType":"StructuredDocumentation","src":"14461:144:48","text":" @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":9954,"implemented":true,"kind":"function","modifiers":[],"name":"log256","nameLocation":"14619:6:48","nodeType":"FunctionDefinition","parameters":{"id":9923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9919,"mutability":"mutable","name":"value","nameLocation":"14634:5:48","nodeType":"VariableDeclaration","scope":9954,"src":"14626:13:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9918,"name":"uint256","nodeType":"ElementaryTypeName","src":"14626:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9922,"mutability":"mutable","name":"rounding","nameLocation":"14650:8:48","nodeType":"VariableDeclaration","scope":9954,"src":"14641:17:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"},"typeName":{"id":9921,"nodeType":"UserDefinedTypeName","pathNode":{"id":9920,"name":"Rounding","nameLocations":["14641:8:48"],"nodeType":"IdentifierPath","referencedDeclaration":8931,"src":"14641:8:48"},"referencedDeclaration":8931,"src":"14641:8:48","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"14625:34:48"},"returnParameters":{"id":9926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9925,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9954,"src":"14683:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9924,"name":"uint256","nodeType":"ElementaryTypeName","src":"14683:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14682:9:48"},"scope":9974,"src":"14610:259:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9972,"nodeType":"Block","src":"15067:48:48","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":9970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":9968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":9965,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9958,"src":"15090:8:48","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"}],"id":9964,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15084:5:48","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":9963,"name":"uint8","nodeType":"ElementaryTypeName","src":"15084:5:48","typeDescriptions":{}}},"id":9966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15084:15:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"hexValue":"32","id":9967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15102:1:48","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"15084:19:48","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":9969,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15107:1:48","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"15084:24:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9962,"id":9971,"nodeType":"Return","src":"15077:31:48"}]},"documentation":{"id":9955,"nodeType":"StructuredDocumentation","src":"14875:113:48","text":" @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers."},"id":9973,"implemented":true,"kind":"function","modifiers":[],"name":"unsignedRoundsUp","nameLocation":"15002:16:48","nodeType":"FunctionDefinition","parameters":{"id":9959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9958,"mutability":"mutable","name":"rounding","nameLocation":"15028:8:48","nodeType":"VariableDeclaration","scope":9973,"src":"15019:17:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"},"typeName":{"id":9957,"nodeType":"UserDefinedTypeName","pathNode":{"id":9956,"name":"Rounding","nameLocations":["15019:8:48"],"nodeType":"IdentifierPath","referencedDeclaration":8931,"src":"15019:8:48"},"referencedDeclaration":8931,"src":"15019:8:48","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$8931","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"15018:19:48"},"returnParameters":{"id":9962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9961,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9973,"src":"15061:4:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9960,"name":"bool","nodeType":"ElementaryTypeName","src":"15061:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15060:6:48"},"scope":9974,"src":"14993:122:48","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":9975,"src":"203:14914:48","usedErrors":[8926],"usedEvents":[]}],"src":"103:15015:48"},"id":48},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","exportedSymbols":{"SafeCast":[11729]},"id":11730,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9976,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"192:24:49"},{"abstract":false,"baseContracts":[],"canonicalName":"SafeCast","contractDependencies":[],"contractKind":"library","documentation":{"id":9977,"nodeType":"StructuredDocumentation","src":"218:545:49","text":" @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n checks.\n Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n easily result in undesired exploitation or bugs, since developers usually\n assume that overflows raise errors. `SafeCast` restores this intuition by\n reverting the transaction when such an operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always."},"fullyImplemented":true,"id":11729,"linearizedBaseContracts":[11729],"name":"SafeCast","nameLocation":"772:8:49","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9978,"nodeType":"StructuredDocumentation","src":"787:68:49","text":" @dev Value doesn't fit in an uint of `bits` size."},"errorSelector":"6dfcc650","id":9984,"name":"SafeCastOverflowedUintDowncast","nameLocation":"866:30:49","nodeType":"ErrorDefinition","parameters":{"id":9983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9980,"mutability":"mutable","name":"bits","nameLocation":"903:4:49","nodeType":"VariableDeclaration","scope":9984,"src":"897:10:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":9979,"name":"uint8","nodeType":"ElementaryTypeName","src":"897:5:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":9982,"mutability":"mutable","name":"value","nameLocation":"917:5:49","nodeType":"VariableDeclaration","scope":9984,"src":"909:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9981,"name":"uint256","nodeType":"ElementaryTypeName","src":"909:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"896:27:49"},"src":"860:64:49"},{"documentation":{"id":9985,"nodeType":"StructuredDocumentation","src":"930:75:49","text":" @dev An int value doesn't fit in an uint of `bits` size."},"errorSelector":"a8ce4432","id":9989,"name":"SafeCastOverflowedIntToUint","nameLocation":"1016:27:49","nodeType":"ErrorDefinition","parameters":{"id":9988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9987,"mutability":"mutable","name":"value","nameLocation":"1051:5:49","nodeType":"VariableDeclaration","scope":9989,"src":"1044:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9986,"name":"int256","nodeType":"ElementaryTypeName","src":"1044:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1043:14:49"},"src":"1010:48:49"},{"documentation":{"id":9990,"nodeType":"StructuredDocumentation","src":"1064:67:49","text":" @dev Value doesn't fit in an int of `bits` size."},"errorSelector":"327269a7","id":9996,"name":"SafeCastOverflowedIntDowncast","nameLocation":"1142:29:49","nodeType":"ErrorDefinition","parameters":{"id":9995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9992,"mutability":"mutable","name":"bits","nameLocation":"1178:4:49","nodeType":"VariableDeclaration","scope":9996,"src":"1172:10:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":9991,"name":"uint8","nodeType":"ElementaryTypeName","src":"1172:5:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":9994,"mutability":"mutable","name":"value","nameLocation":"1191:5:49","nodeType":"VariableDeclaration","scope":9996,"src":"1184:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9993,"name":"int256","nodeType":"ElementaryTypeName","src":"1184:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1171:26:49"},"src":"1136:62:49"},{"documentation":{"id":9997,"nodeType":"StructuredDocumentation","src":"1204:75:49","text":" @dev An uint value doesn't fit in an int of `bits` size."},"errorSelector":"24775e06","id":10001,"name":"SafeCastOverflowedUintToInt","nameLocation":"1290:27:49","nodeType":"ErrorDefinition","parameters":{"id":10000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9999,"mutability":"mutable","name":"value","nameLocation":"1326:5:49","nodeType":"VariableDeclaration","scope":10001,"src":"1318:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9998,"name":"uint256","nodeType":"ElementaryTypeName","src":"1318:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1317:15:49"},"src":"1284:49:49"},{"body":{"id":10028,"nodeType":"Block","src":"1690:152:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10009,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10004,"src":"1704:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10012,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1717:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":10011,"name":"uint248","nodeType":"ElementaryTypeName","src":"1717:7:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"}],"id":10010,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1712:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10013,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1712:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint248","typeString":"type(uint248)"}},"id":10014,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1726:3:49","memberName":"max","nodeType":"MemberAccess","src":"1712:17:49","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"src":"1704:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10022,"nodeType":"IfStatement","src":"1700:105:49","trueBody":{"id":10021,"nodeType":"Block","src":"1731:74:49","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":10017,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1783:3:49","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":10018,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10004,"src":"1788:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10016,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"1752:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1752:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10020,"nodeType":"RevertStatement","src":"1745:49:49"}]}},{"expression":{"arguments":[{"id":10025,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10004,"src":"1829:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10024,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1821:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":10023,"name":"uint248","nodeType":"ElementaryTypeName","src":"1821:7:49","typeDescriptions":{}}},"id":10026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1821:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"functionReturnParameters":10008,"id":10027,"nodeType":"Return","src":"1814:21:49"}]},"documentation":{"id":10002,"nodeType":"StructuredDocumentation","src":"1339:280:49","text":" @dev Returns the downcasted uint248 from uint256, reverting on\n overflow (when the input is greater than largest uint248).\n Counterpart to Solidity's `uint248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":10029,"implemented":true,"kind":"function","modifiers":[],"name":"toUint248","nameLocation":"1633:9:49","nodeType":"FunctionDefinition","parameters":{"id":10005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10004,"mutability":"mutable","name":"value","nameLocation":"1651:5:49","nodeType":"VariableDeclaration","scope":10029,"src":"1643:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10003,"name":"uint256","nodeType":"ElementaryTypeName","src":"1643:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1642:15:49"},"returnParameters":{"id":10008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10007,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10029,"src":"1681:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"},"typeName":{"id":10006,"name":"uint248","nodeType":"ElementaryTypeName","src":"1681:7:49","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"visibility":"internal"}],"src":"1680:9:49"},"scope":11729,"src":"1624:218:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10056,"nodeType":"Block","src":"2199:152:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10037,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10032,"src":"2213:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10040,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2226:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":10039,"name":"uint240","nodeType":"ElementaryTypeName","src":"2226:7:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"}],"id":10038,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2221:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2221:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint240","typeString":"type(uint240)"}},"id":10042,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2235:3:49","memberName":"max","nodeType":"MemberAccess","src":"2221:17:49","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"src":"2213:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10050,"nodeType":"IfStatement","src":"2209:105:49","trueBody":{"id":10049,"nodeType":"Block","src":"2240:74:49","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":10045,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2292:3:49","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":10046,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10032,"src":"2297:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10044,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"2261:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2261:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10048,"nodeType":"RevertStatement","src":"2254:49:49"}]}},{"expression":{"arguments":[{"id":10053,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10032,"src":"2338:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10052,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2330:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":10051,"name":"uint240","nodeType":"ElementaryTypeName","src":"2330:7:49","typeDescriptions":{}}},"id":10054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2330:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"functionReturnParameters":10036,"id":10055,"nodeType":"Return","src":"2323:21:49"}]},"documentation":{"id":10030,"nodeType":"StructuredDocumentation","src":"1848:280:49","text":" @dev Returns the downcasted uint240 from uint256, reverting on\n overflow (when the input is greater than largest uint240).\n Counterpart to Solidity's `uint240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":10057,"implemented":true,"kind":"function","modifiers":[],"name":"toUint240","nameLocation":"2142:9:49","nodeType":"FunctionDefinition","parameters":{"id":10033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10032,"mutability":"mutable","name":"value","nameLocation":"2160:5:49","nodeType":"VariableDeclaration","scope":10057,"src":"2152:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10031,"name":"uint256","nodeType":"ElementaryTypeName","src":"2152:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2151:15:49"},"returnParameters":{"id":10036,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10035,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10057,"src":"2190:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"},"typeName":{"id":10034,"name":"uint240","nodeType":"ElementaryTypeName","src":"2190:7:49","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"visibility":"internal"}],"src":"2189:9:49"},"scope":11729,"src":"2133:218:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10084,"nodeType":"Block","src":"2708:152:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10065,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10060,"src":"2722:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10068,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2735:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":10067,"name":"uint232","nodeType":"ElementaryTypeName","src":"2735:7:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"}],"id":10066,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2730:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10069,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2730:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint232","typeString":"type(uint232)"}},"id":10070,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2744:3:49","memberName":"max","nodeType":"MemberAccess","src":"2730:17:49","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"src":"2722:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10078,"nodeType":"IfStatement","src":"2718:105:49","trueBody":{"id":10077,"nodeType":"Block","src":"2749:74:49","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":10073,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2801:3:49","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":10074,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10060,"src":"2806:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10072,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"2770:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2770:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10076,"nodeType":"RevertStatement","src":"2763:49:49"}]}},{"expression":{"arguments":[{"id":10081,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10060,"src":"2847:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10080,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2839:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":10079,"name":"uint232","nodeType":"ElementaryTypeName","src":"2839:7:49","typeDescriptions":{}}},"id":10082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2839:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"functionReturnParameters":10064,"id":10083,"nodeType":"Return","src":"2832:21:49"}]},"documentation":{"id":10058,"nodeType":"StructuredDocumentation","src":"2357:280:49","text":" @dev Returns the downcasted uint232 from uint256, reverting on\n overflow (when the input is greater than largest uint232).\n Counterpart to Solidity's `uint232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":10085,"implemented":true,"kind":"function","modifiers":[],"name":"toUint232","nameLocation":"2651:9:49","nodeType":"FunctionDefinition","parameters":{"id":10061,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10060,"mutability":"mutable","name":"value","nameLocation":"2669:5:49","nodeType":"VariableDeclaration","scope":10085,"src":"2661:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10059,"name":"uint256","nodeType":"ElementaryTypeName","src":"2661:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2660:15:49"},"returnParameters":{"id":10064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10063,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10085,"src":"2699:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"},"typeName":{"id":10062,"name":"uint232","nodeType":"ElementaryTypeName","src":"2699:7:49","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"visibility":"internal"}],"src":"2698:9:49"},"scope":11729,"src":"2642:218:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10112,"nodeType":"Block","src":"3217:152:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10093,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10088,"src":"3231:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10096,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3244:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":10095,"name":"uint224","nodeType":"ElementaryTypeName","src":"3244:7:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"}],"id":10094,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3239:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10097,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3239:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint224","typeString":"type(uint224)"}},"id":10098,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3253:3:49","memberName":"max","nodeType":"MemberAccess","src":"3239:17:49","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"3231:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10106,"nodeType":"IfStatement","src":"3227:105:49","trueBody":{"id":10105,"nodeType":"Block","src":"3258:74:49","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":10101,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3310:3:49","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":10102,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10088,"src":"3315:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10100,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"3279:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3279:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10104,"nodeType":"RevertStatement","src":"3272:49:49"}]}},{"expression":{"arguments":[{"id":10109,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10088,"src":"3356:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10108,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3348:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":10107,"name":"uint224","nodeType":"ElementaryTypeName","src":"3348:7:49","typeDescriptions":{}}},"id":10110,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3348:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"functionReturnParameters":10092,"id":10111,"nodeType":"Return","src":"3341:21:49"}]},"documentation":{"id":10086,"nodeType":"StructuredDocumentation","src":"2866:280:49","text":" @dev Returns the downcasted uint224 from uint256, reverting on\n overflow (when the input is greater than largest uint224).\n Counterpart to Solidity's `uint224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":10113,"implemented":true,"kind":"function","modifiers":[],"name":"toUint224","nameLocation":"3160:9:49","nodeType":"FunctionDefinition","parameters":{"id":10089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10088,"mutability":"mutable","name":"value","nameLocation":"3178:5:49","nodeType":"VariableDeclaration","scope":10113,"src":"3170:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10087,"name":"uint256","nodeType":"ElementaryTypeName","src":"3170:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3169:15:49"},"returnParameters":{"id":10092,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10091,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10113,"src":"3208:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":10090,"name":"uint224","nodeType":"ElementaryTypeName","src":"3208:7:49","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"}],"src":"3207:9:49"},"scope":11729,"src":"3151:218:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10140,"nodeType":"Block","src":"3726:152:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10121,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10116,"src":"3740:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10124,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3753:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":10123,"name":"uint216","nodeType":"ElementaryTypeName","src":"3753:7:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"}],"id":10122,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3748:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10125,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3748:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint216","typeString":"type(uint216)"}},"id":10126,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3762:3:49","memberName":"max","nodeType":"MemberAccess","src":"3748:17:49","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"src":"3740:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10134,"nodeType":"IfStatement","src":"3736:105:49","trueBody":{"id":10133,"nodeType":"Block","src":"3767:74:49","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":10129,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3819:3:49","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":10130,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10116,"src":"3824:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10128,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"3788:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10131,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3788:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10132,"nodeType":"RevertStatement","src":"3781:49:49"}]}},{"expression":{"arguments":[{"id":10137,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10116,"src":"3865:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10136,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3857:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":10135,"name":"uint216","nodeType":"ElementaryTypeName","src":"3857:7:49","typeDescriptions":{}}},"id":10138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3857:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"functionReturnParameters":10120,"id":10139,"nodeType":"Return","src":"3850:21:49"}]},"documentation":{"id":10114,"nodeType":"StructuredDocumentation","src":"3375:280:49","text":" @dev Returns the downcasted uint216 from uint256, reverting on\n overflow (when the input is greater than largest uint216).\n Counterpart to Solidity's `uint216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":10141,"implemented":true,"kind":"function","modifiers":[],"name":"toUint216","nameLocation":"3669:9:49","nodeType":"FunctionDefinition","parameters":{"id":10117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10116,"mutability":"mutable","name":"value","nameLocation":"3687:5:49","nodeType":"VariableDeclaration","scope":10141,"src":"3679:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10115,"name":"uint256","nodeType":"ElementaryTypeName","src":"3679:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3678:15:49"},"returnParameters":{"id":10120,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10119,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10141,"src":"3717:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"},"typeName":{"id":10118,"name":"uint216","nodeType":"ElementaryTypeName","src":"3717:7:49","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"visibility":"internal"}],"src":"3716:9:49"},"scope":11729,"src":"3660:218:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10168,"nodeType":"Block","src":"4235:152:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10149,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10144,"src":"4249:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10152,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4262:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":10151,"name":"uint208","nodeType":"ElementaryTypeName","src":"4262:7:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"}],"id":10150,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4257:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10153,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4257:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint208","typeString":"type(uint208)"}},"id":10154,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4271:3:49","memberName":"max","nodeType":"MemberAccess","src":"4257:17:49","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"src":"4249:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10162,"nodeType":"IfStatement","src":"4245:105:49","trueBody":{"id":10161,"nodeType":"Block","src":"4276:74:49","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":10157,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4328:3:49","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":10158,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10144,"src":"4333:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10156,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"4297:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4297:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10160,"nodeType":"RevertStatement","src":"4290:49:49"}]}},{"expression":{"arguments":[{"id":10165,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10144,"src":"4374:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10164,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4366:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":10163,"name":"uint208","nodeType":"ElementaryTypeName","src":"4366:7:49","typeDescriptions":{}}},"id":10166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4366:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"functionReturnParameters":10148,"id":10167,"nodeType":"Return","src":"4359:21:49"}]},"documentation":{"id":10142,"nodeType":"StructuredDocumentation","src":"3884:280:49","text":" @dev Returns the downcasted uint208 from uint256, reverting on\n overflow (when the input is greater than largest uint208).\n Counterpart to Solidity's `uint208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":10169,"implemented":true,"kind":"function","modifiers":[],"name":"toUint208","nameLocation":"4178:9:49","nodeType":"FunctionDefinition","parameters":{"id":10145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10144,"mutability":"mutable","name":"value","nameLocation":"4196:5:49","nodeType":"VariableDeclaration","scope":10169,"src":"4188:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10143,"name":"uint256","nodeType":"ElementaryTypeName","src":"4188:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4187:15:49"},"returnParameters":{"id":10148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10147,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10169,"src":"4226:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"},"typeName":{"id":10146,"name":"uint208","nodeType":"ElementaryTypeName","src":"4226:7:49","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"visibility":"internal"}],"src":"4225:9:49"},"scope":11729,"src":"4169:218:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10196,"nodeType":"Block","src":"4744:152:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10177,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10172,"src":"4758:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10180,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4771:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":10179,"name":"uint200","nodeType":"ElementaryTypeName","src":"4771:7:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"}],"id":10178,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4766:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10181,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4766:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint200","typeString":"type(uint200)"}},"id":10182,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4780:3:49","memberName":"max","nodeType":"MemberAccess","src":"4766:17:49","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"src":"4758:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10190,"nodeType":"IfStatement","src":"4754:105:49","trueBody":{"id":10189,"nodeType":"Block","src":"4785:74:49","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":10185,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4837:3:49","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":10186,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10172,"src":"4842:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10184,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"4806:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4806:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10188,"nodeType":"RevertStatement","src":"4799:49:49"}]}},{"expression":{"arguments":[{"id":10193,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10172,"src":"4883:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10192,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4875:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":10191,"name":"uint200","nodeType":"ElementaryTypeName","src":"4875:7:49","typeDescriptions":{}}},"id":10194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4875:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"functionReturnParameters":10176,"id":10195,"nodeType":"Return","src":"4868:21:49"}]},"documentation":{"id":10170,"nodeType":"StructuredDocumentation","src":"4393:280:49","text":" @dev Returns the downcasted uint200 from uint256, reverting on\n overflow (when the input is greater than largest uint200).\n Counterpart to Solidity's `uint200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":10197,"implemented":true,"kind":"function","modifiers":[],"name":"toUint200","nameLocation":"4687:9:49","nodeType":"FunctionDefinition","parameters":{"id":10173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10172,"mutability":"mutable","name":"value","nameLocation":"4705:5:49","nodeType":"VariableDeclaration","scope":10197,"src":"4697:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10171,"name":"uint256","nodeType":"ElementaryTypeName","src":"4697:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4696:15:49"},"returnParameters":{"id":10176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10175,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10197,"src":"4735:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"},"typeName":{"id":10174,"name":"uint200","nodeType":"ElementaryTypeName","src":"4735:7:49","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"visibility":"internal"}],"src":"4734:9:49"},"scope":11729,"src":"4678:218:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10224,"nodeType":"Block","src":"5253:152:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10205,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10200,"src":"5267:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10208,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5280:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":10207,"name":"uint192","nodeType":"ElementaryTypeName","src":"5280:7:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"}],"id":10206,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5275:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10209,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5275:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint192","typeString":"type(uint192)"}},"id":10210,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5289:3:49","memberName":"max","nodeType":"MemberAccess","src":"5275:17:49","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"src":"5267:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10218,"nodeType":"IfStatement","src":"5263:105:49","trueBody":{"id":10217,"nodeType":"Block","src":"5294:74:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":10213,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5346:3:49","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":10214,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10200,"src":"5351:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10212,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"5315:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5315:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10216,"nodeType":"RevertStatement","src":"5308:49:49"}]}},{"expression":{"arguments":[{"id":10221,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10200,"src":"5392:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10220,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5384:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":10219,"name":"uint192","nodeType":"ElementaryTypeName","src":"5384:7:49","typeDescriptions":{}}},"id":10222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5384:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"functionReturnParameters":10204,"id":10223,"nodeType":"Return","src":"5377:21:49"}]},"documentation":{"id":10198,"nodeType":"StructuredDocumentation","src":"4902:280:49","text":" @dev Returns the downcasted uint192 from uint256, reverting on\n overflow (when the input is greater than largest uint192).\n Counterpart to Solidity's `uint192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":10225,"implemented":true,"kind":"function","modifiers":[],"name":"toUint192","nameLocation":"5196:9:49","nodeType":"FunctionDefinition","parameters":{"id":10201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10200,"mutability":"mutable","name":"value","nameLocation":"5214:5:49","nodeType":"VariableDeclaration","scope":10225,"src":"5206:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10199,"name":"uint256","nodeType":"ElementaryTypeName","src":"5206:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5205:15:49"},"returnParameters":{"id":10204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10203,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10225,"src":"5244:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"},"typeName":{"id":10202,"name":"uint192","nodeType":"ElementaryTypeName","src":"5244:7:49","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"visibility":"internal"}],"src":"5243:9:49"},"scope":11729,"src":"5187:218:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10252,"nodeType":"Block","src":"5762:152:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10233,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10228,"src":"5776:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10236,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5789:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":10235,"name":"uint184","nodeType":"ElementaryTypeName","src":"5789:7:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"}],"id":10234,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5784:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10237,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5784:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint184","typeString":"type(uint184)"}},"id":10238,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5798:3:49","memberName":"max","nodeType":"MemberAccess","src":"5784:17:49","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"src":"5776:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10246,"nodeType":"IfStatement","src":"5772:105:49","trueBody":{"id":10245,"nodeType":"Block","src":"5803:74:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":10241,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5855:3:49","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":10242,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10228,"src":"5860:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10240,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"5824:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5824:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10244,"nodeType":"RevertStatement","src":"5817:49:49"}]}},{"expression":{"arguments":[{"id":10249,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10228,"src":"5901:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10248,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5893:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":10247,"name":"uint184","nodeType":"ElementaryTypeName","src":"5893:7:49","typeDescriptions":{}}},"id":10250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5893:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"functionReturnParameters":10232,"id":10251,"nodeType":"Return","src":"5886:21:49"}]},"documentation":{"id":10226,"nodeType":"StructuredDocumentation","src":"5411:280:49","text":" @dev Returns the downcasted uint184 from uint256, reverting on\n overflow (when the input is greater than largest uint184).\n Counterpart to Solidity's `uint184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":10253,"implemented":true,"kind":"function","modifiers":[],"name":"toUint184","nameLocation":"5705:9:49","nodeType":"FunctionDefinition","parameters":{"id":10229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10228,"mutability":"mutable","name":"value","nameLocation":"5723:5:49","nodeType":"VariableDeclaration","scope":10253,"src":"5715:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10227,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5714:15:49"},"returnParameters":{"id":10232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10231,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10253,"src":"5753:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"},"typeName":{"id":10230,"name":"uint184","nodeType":"ElementaryTypeName","src":"5753:7:49","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"visibility":"internal"}],"src":"5752:9:49"},"scope":11729,"src":"5696:218:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10280,"nodeType":"Block","src":"6271:152:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10261,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10256,"src":"6285:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10264,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6298:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":10263,"name":"uint176","nodeType":"ElementaryTypeName","src":"6298:7:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"}],"id":10262,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6293:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10265,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6293:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint176","typeString":"type(uint176)"}},"id":10266,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6307:3:49","memberName":"max","nodeType":"MemberAccess","src":"6293:17:49","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"src":"6285:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10274,"nodeType":"IfStatement","src":"6281:105:49","trueBody":{"id":10273,"nodeType":"Block","src":"6312:74:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":10269,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6364:3:49","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":10270,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10256,"src":"6369:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10268,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"6333:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6333:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10272,"nodeType":"RevertStatement","src":"6326:49:49"}]}},{"expression":{"arguments":[{"id":10277,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10256,"src":"6410:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10276,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6402:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":10275,"name":"uint176","nodeType":"ElementaryTypeName","src":"6402:7:49","typeDescriptions":{}}},"id":10278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6402:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"functionReturnParameters":10260,"id":10279,"nodeType":"Return","src":"6395:21:49"}]},"documentation":{"id":10254,"nodeType":"StructuredDocumentation","src":"5920:280:49","text":" @dev Returns the downcasted uint176 from uint256, reverting on\n overflow (when the input is greater than largest uint176).\n Counterpart to Solidity's `uint176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":10281,"implemented":true,"kind":"function","modifiers":[],"name":"toUint176","nameLocation":"6214:9:49","nodeType":"FunctionDefinition","parameters":{"id":10257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10256,"mutability":"mutable","name":"value","nameLocation":"6232:5:49","nodeType":"VariableDeclaration","scope":10281,"src":"6224:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10255,"name":"uint256","nodeType":"ElementaryTypeName","src":"6224:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6223:15:49"},"returnParameters":{"id":10260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10259,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10281,"src":"6262:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"},"typeName":{"id":10258,"name":"uint176","nodeType":"ElementaryTypeName","src":"6262:7:49","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"visibility":"internal"}],"src":"6261:9:49"},"scope":11729,"src":"6205:218:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10308,"nodeType":"Block","src":"6780:152:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10289,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10284,"src":"6794:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10292,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6807:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":10291,"name":"uint168","nodeType":"ElementaryTypeName","src":"6807:7:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"}],"id":10290,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6802:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10293,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6802:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint168","typeString":"type(uint168)"}},"id":10294,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6816:3:49","memberName":"max","nodeType":"MemberAccess","src":"6802:17:49","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"src":"6794:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10302,"nodeType":"IfStatement","src":"6790:105:49","trueBody":{"id":10301,"nodeType":"Block","src":"6821:74:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":10297,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6873:3:49","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":10298,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10284,"src":"6878:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10296,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"6842:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10299,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6842:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10300,"nodeType":"RevertStatement","src":"6835:49:49"}]}},{"expression":{"arguments":[{"id":10305,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10284,"src":"6919:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10304,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6911:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":10303,"name":"uint168","nodeType":"ElementaryTypeName","src":"6911:7:49","typeDescriptions":{}}},"id":10306,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6911:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"functionReturnParameters":10288,"id":10307,"nodeType":"Return","src":"6904:21:49"}]},"documentation":{"id":10282,"nodeType":"StructuredDocumentation","src":"6429:280:49","text":" @dev Returns the downcasted uint168 from uint256, reverting on\n overflow (when the input is greater than largest uint168).\n Counterpart to Solidity's `uint168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":10309,"implemented":true,"kind":"function","modifiers":[],"name":"toUint168","nameLocation":"6723:9:49","nodeType":"FunctionDefinition","parameters":{"id":10285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10284,"mutability":"mutable","name":"value","nameLocation":"6741:5:49","nodeType":"VariableDeclaration","scope":10309,"src":"6733:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10283,"name":"uint256","nodeType":"ElementaryTypeName","src":"6733:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6732:15:49"},"returnParameters":{"id":10288,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10287,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10309,"src":"6771:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"},"typeName":{"id":10286,"name":"uint168","nodeType":"ElementaryTypeName","src":"6771:7:49","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"visibility":"internal"}],"src":"6770:9:49"},"scope":11729,"src":"6714:218:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10336,"nodeType":"Block","src":"7289:152:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10317,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10312,"src":"7303:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10320,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7316:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":10319,"name":"uint160","nodeType":"ElementaryTypeName","src":"7316:7:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"}],"id":10318,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7311:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10321,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7311:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint160","typeString":"type(uint160)"}},"id":10322,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7325:3:49","memberName":"max","nodeType":"MemberAccess","src":"7311:17:49","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"src":"7303:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10330,"nodeType":"IfStatement","src":"7299:105:49","trueBody":{"id":10329,"nodeType":"Block","src":"7330:74:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":10325,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7382:3:49","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":10326,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10312,"src":"7387:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10324,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"7351:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7351:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10328,"nodeType":"RevertStatement","src":"7344:49:49"}]}},{"expression":{"arguments":[{"id":10333,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10312,"src":"7428:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10332,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7420:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":10331,"name":"uint160","nodeType":"ElementaryTypeName","src":"7420:7:49","typeDescriptions":{}}},"id":10334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7420:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"functionReturnParameters":10316,"id":10335,"nodeType":"Return","src":"7413:21:49"}]},"documentation":{"id":10310,"nodeType":"StructuredDocumentation","src":"6938:280:49","text":" @dev Returns the downcasted uint160 from uint256, reverting on\n overflow (when the input is greater than largest uint160).\n Counterpart to Solidity's `uint160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":10337,"implemented":true,"kind":"function","modifiers":[],"name":"toUint160","nameLocation":"7232:9:49","nodeType":"FunctionDefinition","parameters":{"id":10313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10312,"mutability":"mutable","name":"value","nameLocation":"7250:5:49","nodeType":"VariableDeclaration","scope":10337,"src":"7242:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10311,"name":"uint256","nodeType":"ElementaryTypeName","src":"7242:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7241:15:49"},"returnParameters":{"id":10316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10315,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10337,"src":"7280:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":10314,"name":"uint160","nodeType":"ElementaryTypeName","src":"7280:7:49","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"}],"src":"7279:9:49"},"scope":11729,"src":"7223:218:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10364,"nodeType":"Block","src":"7798:152:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10345,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10340,"src":"7812:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10348,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7825:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":10347,"name":"uint152","nodeType":"ElementaryTypeName","src":"7825:7:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"}],"id":10346,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7820:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10349,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7820:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint152","typeString":"type(uint152)"}},"id":10350,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7834:3:49","memberName":"max","nodeType":"MemberAccess","src":"7820:17:49","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"src":"7812:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10358,"nodeType":"IfStatement","src":"7808:105:49","trueBody":{"id":10357,"nodeType":"Block","src":"7839:74:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":10353,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7891:3:49","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":10354,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10340,"src":"7896:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10352,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"7860:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7860:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10356,"nodeType":"RevertStatement","src":"7853:49:49"}]}},{"expression":{"arguments":[{"id":10361,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10340,"src":"7937:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10360,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7929:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":10359,"name":"uint152","nodeType":"ElementaryTypeName","src":"7929:7:49","typeDescriptions":{}}},"id":10362,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7929:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"functionReturnParameters":10344,"id":10363,"nodeType":"Return","src":"7922:21:49"}]},"documentation":{"id":10338,"nodeType":"StructuredDocumentation","src":"7447:280:49","text":" @dev Returns the downcasted uint152 from uint256, reverting on\n overflow (when the input is greater than largest uint152).\n Counterpart to Solidity's `uint152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":10365,"implemented":true,"kind":"function","modifiers":[],"name":"toUint152","nameLocation":"7741:9:49","nodeType":"FunctionDefinition","parameters":{"id":10341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10340,"mutability":"mutable","name":"value","nameLocation":"7759:5:49","nodeType":"VariableDeclaration","scope":10365,"src":"7751:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10339,"name":"uint256","nodeType":"ElementaryTypeName","src":"7751:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7750:15:49"},"returnParameters":{"id":10344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10343,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10365,"src":"7789:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"},"typeName":{"id":10342,"name":"uint152","nodeType":"ElementaryTypeName","src":"7789:7:49","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"visibility":"internal"}],"src":"7788:9:49"},"scope":11729,"src":"7732:218:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10392,"nodeType":"Block","src":"8307:152:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10373,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10368,"src":"8321:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10376,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8334:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":10375,"name":"uint144","nodeType":"ElementaryTypeName","src":"8334:7:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"}],"id":10374,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8329:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10377,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8329:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint144","typeString":"type(uint144)"}},"id":10378,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8343:3:49","memberName":"max","nodeType":"MemberAccess","src":"8329:17:49","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"src":"8321:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10386,"nodeType":"IfStatement","src":"8317:105:49","trueBody":{"id":10385,"nodeType":"Block","src":"8348:74:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":10381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8400:3:49","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":10382,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10368,"src":"8405:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10380,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"8369:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8369:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10384,"nodeType":"RevertStatement","src":"8362:49:49"}]}},{"expression":{"arguments":[{"id":10389,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10368,"src":"8446:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10388,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8438:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":10387,"name":"uint144","nodeType":"ElementaryTypeName","src":"8438:7:49","typeDescriptions":{}}},"id":10390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8438:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"functionReturnParameters":10372,"id":10391,"nodeType":"Return","src":"8431:21:49"}]},"documentation":{"id":10366,"nodeType":"StructuredDocumentation","src":"7956:280:49","text":" @dev Returns the downcasted uint144 from uint256, reverting on\n overflow (when the input is greater than largest uint144).\n Counterpart to Solidity's `uint144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":10393,"implemented":true,"kind":"function","modifiers":[],"name":"toUint144","nameLocation":"8250:9:49","nodeType":"FunctionDefinition","parameters":{"id":10369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10368,"mutability":"mutable","name":"value","nameLocation":"8268:5:49","nodeType":"VariableDeclaration","scope":10393,"src":"8260:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10367,"name":"uint256","nodeType":"ElementaryTypeName","src":"8260:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8259:15:49"},"returnParameters":{"id":10372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10371,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10393,"src":"8298:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"},"typeName":{"id":10370,"name":"uint144","nodeType":"ElementaryTypeName","src":"8298:7:49","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"visibility":"internal"}],"src":"8297:9:49"},"scope":11729,"src":"8241:218:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10420,"nodeType":"Block","src":"8816:152:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10401,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10396,"src":"8830:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10404,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8843:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":10403,"name":"uint136","nodeType":"ElementaryTypeName","src":"8843:7:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"}],"id":10402,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8838:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10405,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8838:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint136","typeString":"type(uint136)"}},"id":10406,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8852:3:49","memberName":"max","nodeType":"MemberAccess","src":"8838:17:49","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"src":"8830:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10414,"nodeType":"IfStatement","src":"8826:105:49","trueBody":{"id":10413,"nodeType":"Block","src":"8857:74:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":10409,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8909:3:49","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":10410,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10396,"src":"8914:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10408,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"8878:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8878:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10412,"nodeType":"RevertStatement","src":"8871:49:49"}]}},{"expression":{"arguments":[{"id":10417,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10396,"src":"8955:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10416,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8947:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":10415,"name":"uint136","nodeType":"ElementaryTypeName","src":"8947:7:49","typeDescriptions":{}}},"id":10418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8947:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"functionReturnParameters":10400,"id":10419,"nodeType":"Return","src":"8940:21:49"}]},"documentation":{"id":10394,"nodeType":"StructuredDocumentation","src":"8465:280:49","text":" @dev Returns the downcasted uint136 from uint256, reverting on\n overflow (when the input is greater than largest uint136).\n Counterpart to Solidity's `uint136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":10421,"implemented":true,"kind":"function","modifiers":[],"name":"toUint136","nameLocation":"8759:9:49","nodeType":"FunctionDefinition","parameters":{"id":10397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10396,"mutability":"mutable","name":"value","nameLocation":"8777:5:49","nodeType":"VariableDeclaration","scope":10421,"src":"8769:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10395,"name":"uint256","nodeType":"ElementaryTypeName","src":"8769:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8768:15:49"},"returnParameters":{"id":10400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10399,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10421,"src":"8807:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"},"typeName":{"id":10398,"name":"uint136","nodeType":"ElementaryTypeName","src":"8807:7:49","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"visibility":"internal"}],"src":"8806:9:49"},"scope":11729,"src":"8750:218:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10448,"nodeType":"Block","src":"9325:152:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10429,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10424,"src":"9339:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10432,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9352:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":10431,"name":"uint128","nodeType":"ElementaryTypeName","src":"9352:7:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":10430,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9347:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10433,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9347:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":10434,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9361:3:49","memberName":"max","nodeType":"MemberAccess","src":"9347:17:49","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"9339:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10442,"nodeType":"IfStatement","src":"9335:105:49","trueBody":{"id":10441,"nodeType":"Block","src":"9366:74:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":10437,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9418:3:49","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":10438,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10424,"src":"9423:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10436,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"9387:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9387:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10440,"nodeType":"RevertStatement","src":"9380:49:49"}]}},{"expression":{"arguments":[{"id":10445,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10424,"src":"9464:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10444,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9456:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":10443,"name":"uint128","nodeType":"ElementaryTypeName","src":"9456:7:49","typeDescriptions":{}}},"id":10446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9456:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":10428,"id":10447,"nodeType":"Return","src":"9449:21:49"}]},"documentation":{"id":10422,"nodeType":"StructuredDocumentation","src":"8974:280:49","text":" @dev Returns the downcasted uint128 from uint256, reverting on\n overflow (when the input is greater than largest uint128).\n Counterpart to Solidity's `uint128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":10449,"implemented":true,"kind":"function","modifiers":[],"name":"toUint128","nameLocation":"9268:9:49","nodeType":"FunctionDefinition","parameters":{"id":10425,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10424,"mutability":"mutable","name":"value","nameLocation":"9286:5:49","nodeType":"VariableDeclaration","scope":10449,"src":"9278:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10423,"name":"uint256","nodeType":"ElementaryTypeName","src":"9278:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9277:15:49"},"returnParameters":{"id":10428,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10427,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10449,"src":"9316:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":10426,"name":"uint128","nodeType":"ElementaryTypeName","src":"9316:7:49","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9315:9:49"},"scope":11729,"src":"9259:218:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10476,"nodeType":"Block","src":"9834:152:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10457,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10452,"src":"9848:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10460,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9861:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":10459,"name":"uint120","nodeType":"ElementaryTypeName","src":"9861:7:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"}],"id":10458,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9856:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10461,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9856:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint120","typeString":"type(uint120)"}},"id":10462,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9870:3:49","memberName":"max","nodeType":"MemberAccess","src":"9856:17:49","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"src":"9848:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10470,"nodeType":"IfStatement","src":"9844:105:49","trueBody":{"id":10469,"nodeType":"Block","src":"9875:74:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":10465,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9927:3:49","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":10466,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10452,"src":"9932:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10464,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"9896:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9896:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10468,"nodeType":"RevertStatement","src":"9889:49:49"}]}},{"expression":{"arguments":[{"id":10473,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10452,"src":"9973:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10472,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9965:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":10471,"name":"uint120","nodeType":"ElementaryTypeName","src":"9965:7:49","typeDescriptions":{}}},"id":10474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9965:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"functionReturnParameters":10456,"id":10475,"nodeType":"Return","src":"9958:21:49"}]},"documentation":{"id":10450,"nodeType":"StructuredDocumentation","src":"9483:280:49","text":" @dev Returns the downcasted uint120 from uint256, reverting on\n overflow (when the input is greater than largest uint120).\n Counterpart to Solidity's `uint120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":10477,"implemented":true,"kind":"function","modifiers":[],"name":"toUint120","nameLocation":"9777:9:49","nodeType":"FunctionDefinition","parameters":{"id":10453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10452,"mutability":"mutable","name":"value","nameLocation":"9795:5:49","nodeType":"VariableDeclaration","scope":10477,"src":"9787:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10451,"name":"uint256","nodeType":"ElementaryTypeName","src":"9787:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9786:15:49"},"returnParameters":{"id":10456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10455,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10477,"src":"9825:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"},"typeName":{"id":10454,"name":"uint120","nodeType":"ElementaryTypeName","src":"9825:7:49","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"visibility":"internal"}],"src":"9824:9:49"},"scope":11729,"src":"9768:218:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10504,"nodeType":"Block","src":"10343:152:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10485,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10480,"src":"10357:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10488,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10370:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":10487,"name":"uint112","nodeType":"ElementaryTypeName","src":"10370:7:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"}],"id":10486,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10365:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10365:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint112","typeString":"type(uint112)"}},"id":10490,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10379:3:49","memberName":"max","nodeType":"MemberAccess","src":"10365:17:49","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"src":"10357:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10498,"nodeType":"IfStatement","src":"10353:105:49","trueBody":{"id":10497,"nodeType":"Block","src":"10384:74:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":10493,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10436:3:49","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":10494,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10480,"src":"10441:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10492,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"10405:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10405:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10496,"nodeType":"RevertStatement","src":"10398:49:49"}]}},{"expression":{"arguments":[{"id":10501,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10480,"src":"10482:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10500,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10474:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":10499,"name":"uint112","nodeType":"ElementaryTypeName","src":"10474:7:49","typeDescriptions":{}}},"id":10502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10474:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"functionReturnParameters":10484,"id":10503,"nodeType":"Return","src":"10467:21:49"}]},"documentation":{"id":10478,"nodeType":"StructuredDocumentation","src":"9992:280:49","text":" @dev Returns the downcasted uint112 from uint256, reverting on\n overflow (when the input is greater than largest uint112).\n Counterpart to Solidity's `uint112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":10505,"implemented":true,"kind":"function","modifiers":[],"name":"toUint112","nameLocation":"10286:9:49","nodeType":"FunctionDefinition","parameters":{"id":10481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10480,"mutability":"mutable","name":"value","nameLocation":"10304:5:49","nodeType":"VariableDeclaration","scope":10505,"src":"10296:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10479,"name":"uint256","nodeType":"ElementaryTypeName","src":"10296:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10295:15:49"},"returnParameters":{"id":10484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10483,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10505,"src":"10334:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"},"typeName":{"id":10482,"name":"uint112","nodeType":"ElementaryTypeName","src":"10334:7:49","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"visibility":"internal"}],"src":"10333:9:49"},"scope":11729,"src":"10277:218:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10532,"nodeType":"Block","src":"10852:152:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10513,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10508,"src":"10866:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10516,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10879:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":10515,"name":"uint104","nodeType":"ElementaryTypeName","src":"10879:7:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"}],"id":10514,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10874:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10874:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint104","typeString":"type(uint104)"}},"id":10518,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10888:3:49","memberName":"max","nodeType":"MemberAccess","src":"10874:17:49","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"src":"10866:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10526,"nodeType":"IfStatement","src":"10862:105:49","trueBody":{"id":10525,"nodeType":"Block","src":"10893:74:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":10521,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10945:3:49","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":10522,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10508,"src":"10950:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10520,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"10914:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10914:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10524,"nodeType":"RevertStatement","src":"10907:49:49"}]}},{"expression":{"arguments":[{"id":10529,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10508,"src":"10991:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10528,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10983:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":10527,"name":"uint104","nodeType":"ElementaryTypeName","src":"10983:7:49","typeDescriptions":{}}},"id":10530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10983:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"functionReturnParameters":10512,"id":10531,"nodeType":"Return","src":"10976:21:49"}]},"documentation":{"id":10506,"nodeType":"StructuredDocumentation","src":"10501:280:49","text":" @dev Returns the downcasted uint104 from uint256, reverting on\n overflow (when the input is greater than largest uint104).\n Counterpart to Solidity's `uint104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":10533,"implemented":true,"kind":"function","modifiers":[],"name":"toUint104","nameLocation":"10795:9:49","nodeType":"FunctionDefinition","parameters":{"id":10509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10508,"mutability":"mutable","name":"value","nameLocation":"10813:5:49","nodeType":"VariableDeclaration","scope":10533,"src":"10805:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10507,"name":"uint256","nodeType":"ElementaryTypeName","src":"10805:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10804:15:49"},"returnParameters":{"id":10512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10511,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10533,"src":"10843:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"},"typeName":{"id":10510,"name":"uint104","nodeType":"ElementaryTypeName","src":"10843:7:49","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"visibility":"internal"}],"src":"10842:9:49"},"scope":11729,"src":"10786:218:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10560,"nodeType":"Block","src":"11355:149:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10541,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10536,"src":"11369:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10544,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11382:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":10543,"name":"uint96","nodeType":"ElementaryTypeName","src":"11382:6:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"}],"id":10542,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11377:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10545,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11377:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint96","typeString":"type(uint96)"}},"id":10546,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11390:3:49","memberName":"max","nodeType":"MemberAccess","src":"11377:16:49","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"11369:24:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10554,"nodeType":"IfStatement","src":"11365:103:49","trueBody":{"id":10553,"nodeType":"Block","src":"11395:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":10549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11447:2:49","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":10550,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10536,"src":"11451:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10548,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"11416:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11416:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10552,"nodeType":"RevertStatement","src":"11409:48:49"}]}},{"expression":{"arguments":[{"id":10557,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10536,"src":"11491:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10556,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11484:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":10555,"name":"uint96","nodeType":"ElementaryTypeName","src":"11484:6:49","typeDescriptions":{}}},"id":10558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11484:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"functionReturnParameters":10540,"id":10559,"nodeType":"Return","src":"11477:20:49"}]},"documentation":{"id":10534,"nodeType":"StructuredDocumentation","src":"11010:276:49","text":" @dev Returns the downcasted uint96 from uint256, reverting on\n overflow (when the input is greater than largest uint96).\n Counterpart to Solidity's `uint96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":10561,"implemented":true,"kind":"function","modifiers":[],"name":"toUint96","nameLocation":"11300:8:49","nodeType":"FunctionDefinition","parameters":{"id":10537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10536,"mutability":"mutable","name":"value","nameLocation":"11317:5:49","nodeType":"VariableDeclaration","scope":10561,"src":"11309:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10535,"name":"uint256","nodeType":"ElementaryTypeName","src":"11309:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11308:15:49"},"returnParameters":{"id":10540,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10539,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10561,"src":"11347:6:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":10538,"name":"uint96","nodeType":"ElementaryTypeName","src":"11347:6:49","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"11346:8:49"},"scope":11729,"src":"11291:213:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10588,"nodeType":"Block","src":"11855:149:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10569,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10564,"src":"11869:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10572,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11882:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":10571,"name":"uint88","nodeType":"ElementaryTypeName","src":"11882:6:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"}],"id":10570,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11877:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10573,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11877:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint88","typeString":"type(uint88)"}},"id":10574,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11890:3:49","memberName":"max","nodeType":"MemberAccess","src":"11877:16:49","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"src":"11869:24:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10582,"nodeType":"IfStatement","src":"11865:103:49","trueBody":{"id":10581,"nodeType":"Block","src":"11895:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":10577,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11947:2:49","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":10578,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10564,"src":"11951:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10576,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"11916:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11916:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10580,"nodeType":"RevertStatement","src":"11909:48:49"}]}},{"expression":{"arguments":[{"id":10585,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10564,"src":"11991:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10584,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11984:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":10583,"name":"uint88","nodeType":"ElementaryTypeName","src":"11984:6:49","typeDescriptions":{}}},"id":10586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11984:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"functionReturnParameters":10568,"id":10587,"nodeType":"Return","src":"11977:20:49"}]},"documentation":{"id":10562,"nodeType":"StructuredDocumentation","src":"11510:276:49","text":" @dev Returns the downcasted uint88 from uint256, reverting on\n overflow (when the input is greater than largest uint88).\n Counterpart to Solidity's `uint88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":10589,"implemented":true,"kind":"function","modifiers":[],"name":"toUint88","nameLocation":"11800:8:49","nodeType":"FunctionDefinition","parameters":{"id":10565,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10564,"mutability":"mutable","name":"value","nameLocation":"11817:5:49","nodeType":"VariableDeclaration","scope":10589,"src":"11809:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10563,"name":"uint256","nodeType":"ElementaryTypeName","src":"11809:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11808:15:49"},"returnParameters":{"id":10568,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10567,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10589,"src":"11847:6:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"},"typeName":{"id":10566,"name":"uint88","nodeType":"ElementaryTypeName","src":"11847:6:49","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"visibility":"internal"}],"src":"11846:8:49"},"scope":11729,"src":"11791:213:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10616,"nodeType":"Block","src":"12355:149:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10597,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10592,"src":"12369:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10600,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12382:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":10599,"name":"uint80","nodeType":"ElementaryTypeName","src":"12382:6:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"}],"id":10598,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12377:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10601,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12377:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint80","typeString":"type(uint80)"}},"id":10602,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12390:3:49","memberName":"max","nodeType":"MemberAccess","src":"12377:16:49","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"src":"12369:24:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10610,"nodeType":"IfStatement","src":"12365:103:49","trueBody":{"id":10609,"nodeType":"Block","src":"12395:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":10605,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12447:2:49","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":10606,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10592,"src":"12451:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10604,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"12416:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12416:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10608,"nodeType":"RevertStatement","src":"12409:48:49"}]}},{"expression":{"arguments":[{"id":10613,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10592,"src":"12491:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10612,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12484:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":10611,"name":"uint80","nodeType":"ElementaryTypeName","src":"12484:6:49","typeDescriptions":{}}},"id":10614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12484:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"functionReturnParameters":10596,"id":10615,"nodeType":"Return","src":"12477:20:49"}]},"documentation":{"id":10590,"nodeType":"StructuredDocumentation","src":"12010:276:49","text":" @dev Returns the downcasted uint80 from uint256, reverting on\n overflow (when the input is greater than largest uint80).\n Counterpart to Solidity's `uint80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":10617,"implemented":true,"kind":"function","modifiers":[],"name":"toUint80","nameLocation":"12300:8:49","nodeType":"FunctionDefinition","parameters":{"id":10593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10592,"mutability":"mutable","name":"value","nameLocation":"12317:5:49","nodeType":"VariableDeclaration","scope":10617,"src":"12309:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10591,"name":"uint256","nodeType":"ElementaryTypeName","src":"12309:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12308:15:49"},"returnParameters":{"id":10596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10595,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10617,"src":"12347:6:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":10594,"name":"uint80","nodeType":"ElementaryTypeName","src":"12347:6:49","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"12346:8:49"},"scope":11729,"src":"12291:213:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10644,"nodeType":"Block","src":"12855:149:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10625,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10620,"src":"12869:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10628,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12882:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":10627,"name":"uint72","nodeType":"ElementaryTypeName","src":"12882:6:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"}],"id":10626,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12877:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10629,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12877:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint72","typeString":"type(uint72)"}},"id":10630,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12890:3:49","memberName":"max","nodeType":"MemberAccess","src":"12877:16:49","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"src":"12869:24:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10638,"nodeType":"IfStatement","src":"12865:103:49","trueBody":{"id":10637,"nodeType":"Block","src":"12895:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":10633,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12947:2:49","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":10634,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10620,"src":"12951:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10632,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"12916:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12916:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10636,"nodeType":"RevertStatement","src":"12909:48:49"}]}},{"expression":{"arguments":[{"id":10641,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10620,"src":"12991:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10640,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12984:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":10639,"name":"uint72","nodeType":"ElementaryTypeName","src":"12984:6:49","typeDescriptions":{}}},"id":10642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12984:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"functionReturnParameters":10624,"id":10643,"nodeType":"Return","src":"12977:20:49"}]},"documentation":{"id":10618,"nodeType":"StructuredDocumentation","src":"12510:276:49","text":" @dev Returns the downcasted uint72 from uint256, reverting on\n overflow (when the input is greater than largest uint72).\n Counterpart to Solidity's `uint72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":10645,"implemented":true,"kind":"function","modifiers":[],"name":"toUint72","nameLocation":"12800:8:49","nodeType":"FunctionDefinition","parameters":{"id":10621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10620,"mutability":"mutable","name":"value","nameLocation":"12817:5:49","nodeType":"VariableDeclaration","scope":10645,"src":"12809:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10619,"name":"uint256","nodeType":"ElementaryTypeName","src":"12809:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12808:15:49"},"returnParameters":{"id":10624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10623,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10645,"src":"12847:6:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"},"typeName":{"id":10622,"name":"uint72","nodeType":"ElementaryTypeName","src":"12847:6:49","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"visibility":"internal"}],"src":"12846:8:49"},"scope":11729,"src":"12791:213:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10672,"nodeType":"Block","src":"13355:149:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10653,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10648,"src":"13369:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10656,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13382:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":10655,"name":"uint64","nodeType":"ElementaryTypeName","src":"13382:6:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"}],"id":10654,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13377:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10657,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13377:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint64","typeString":"type(uint64)"}},"id":10658,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13390:3:49","memberName":"max","nodeType":"MemberAccess","src":"13377:16:49","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"13369:24:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10666,"nodeType":"IfStatement","src":"13365:103:49","trueBody":{"id":10665,"nodeType":"Block","src":"13395:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":10661,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13447:2:49","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":10662,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10648,"src":"13451:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10660,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"13416:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13416:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10664,"nodeType":"RevertStatement","src":"13409:48:49"}]}},{"expression":{"arguments":[{"id":10669,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10648,"src":"13491:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10668,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13484:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":10667,"name":"uint64","nodeType":"ElementaryTypeName","src":"13484:6:49","typeDescriptions":{}}},"id":10670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13484:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":10652,"id":10671,"nodeType":"Return","src":"13477:20:49"}]},"documentation":{"id":10646,"nodeType":"StructuredDocumentation","src":"13010:276:49","text":" @dev Returns the downcasted uint64 from uint256, reverting on\n overflow (when the input is greater than largest uint64).\n Counterpart to Solidity's `uint64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":10673,"implemented":true,"kind":"function","modifiers":[],"name":"toUint64","nameLocation":"13300:8:49","nodeType":"FunctionDefinition","parameters":{"id":10649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10648,"mutability":"mutable","name":"value","nameLocation":"13317:5:49","nodeType":"VariableDeclaration","scope":10673,"src":"13309:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10647,"name":"uint256","nodeType":"ElementaryTypeName","src":"13309:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13308:15:49"},"returnParameters":{"id":10652,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10651,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10673,"src":"13347:6:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":10650,"name":"uint64","nodeType":"ElementaryTypeName","src":"13347:6:49","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"13346:8:49"},"scope":11729,"src":"13291:213:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10700,"nodeType":"Block","src":"13855:149:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10681,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10676,"src":"13869:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10684,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13882:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":10683,"name":"uint56","nodeType":"ElementaryTypeName","src":"13882:6:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"}],"id":10682,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13877:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10685,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13877:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint56","typeString":"type(uint56)"}},"id":10686,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13890:3:49","memberName":"max","nodeType":"MemberAccess","src":"13877:16:49","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"src":"13869:24:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10694,"nodeType":"IfStatement","src":"13865:103:49","trueBody":{"id":10693,"nodeType":"Block","src":"13895:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":10689,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13947:2:49","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":10690,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10676,"src":"13951:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10688,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"13916:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10691,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13916:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10692,"nodeType":"RevertStatement","src":"13909:48:49"}]}},{"expression":{"arguments":[{"id":10697,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10676,"src":"13991:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10696,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13984:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":10695,"name":"uint56","nodeType":"ElementaryTypeName","src":"13984:6:49","typeDescriptions":{}}},"id":10698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13984:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"functionReturnParameters":10680,"id":10699,"nodeType":"Return","src":"13977:20:49"}]},"documentation":{"id":10674,"nodeType":"StructuredDocumentation","src":"13510:276:49","text":" @dev Returns the downcasted uint56 from uint256, reverting on\n overflow (when the input is greater than largest uint56).\n Counterpart to Solidity's `uint56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":10701,"implemented":true,"kind":"function","modifiers":[],"name":"toUint56","nameLocation":"13800:8:49","nodeType":"FunctionDefinition","parameters":{"id":10677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10676,"mutability":"mutable","name":"value","nameLocation":"13817:5:49","nodeType":"VariableDeclaration","scope":10701,"src":"13809:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10675,"name":"uint256","nodeType":"ElementaryTypeName","src":"13809:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13808:15:49"},"returnParameters":{"id":10680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10679,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10701,"src":"13847:6:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"},"typeName":{"id":10678,"name":"uint56","nodeType":"ElementaryTypeName","src":"13847:6:49","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"visibility":"internal"}],"src":"13846:8:49"},"scope":11729,"src":"13791:213:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10728,"nodeType":"Block","src":"14355:149:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10709,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10704,"src":"14369:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10712,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14382:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":10711,"name":"uint48","nodeType":"ElementaryTypeName","src":"14382:6:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"}],"id":10710,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14377:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10713,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14377:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint48","typeString":"type(uint48)"}},"id":10714,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14390:3:49","memberName":"max","nodeType":"MemberAccess","src":"14377:16:49","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"14369:24:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10722,"nodeType":"IfStatement","src":"14365:103:49","trueBody":{"id":10721,"nodeType":"Block","src":"14395:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":10717,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14447:2:49","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":10718,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10704,"src":"14451:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10716,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"14416:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14416:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10720,"nodeType":"RevertStatement","src":"14409:48:49"}]}},{"expression":{"arguments":[{"id":10725,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10704,"src":"14491:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10724,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14484:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":10723,"name":"uint48","nodeType":"ElementaryTypeName","src":"14484:6:49","typeDescriptions":{}}},"id":10726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14484:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":10708,"id":10727,"nodeType":"Return","src":"14477:20:49"}]},"documentation":{"id":10702,"nodeType":"StructuredDocumentation","src":"14010:276:49","text":" @dev Returns the downcasted uint48 from uint256, reverting on\n overflow (when the input is greater than largest uint48).\n Counterpart to Solidity's `uint48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":10729,"implemented":true,"kind":"function","modifiers":[],"name":"toUint48","nameLocation":"14300:8:49","nodeType":"FunctionDefinition","parameters":{"id":10705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10704,"mutability":"mutable","name":"value","nameLocation":"14317:5:49","nodeType":"VariableDeclaration","scope":10729,"src":"14309:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10703,"name":"uint256","nodeType":"ElementaryTypeName","src":"14309:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14308:15:49"},"returnParameters":{"id":10708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10707,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10729,"src":"14347:6:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":10706,"name":"uint48","nodeType":"ElementaryTypeName","src":"14347:6:49","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"14346:8:49"},"scope":11729,"src":"14291:213:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10756,"nodeType":"Block","src":"14855:149:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10737,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10732,"src":"14869:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10740,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14882:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":10739,"name":"uint40","nodeType":"ElementaryTypeName","src":"14882:6:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"}],"id":10738,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14877:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10741,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14877:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint40","typeString":"type(uint40)"}},"id":10742,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14890:3:49","memberName":"max","nodeType":"MemberAccess","src":"14877:16:49","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"14869:24:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10750,"nodeType":"IfStatement","src":"14865:103:49","trueBody":{"id":10749,"nodeType":"Block","src":"14895:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":10745,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14947:2:49","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":10746,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10732,"src":"14951:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10744,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"14916:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14916:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10748,"nodeType":"RevertStatement","src":"14909:48:49"}]}},{"expression":{"arguments":[{"id":10753,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10732,"src":"14991:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10752,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14984:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":10751,"name":"uint40","nodeType":"ElementaryTypeName","src":"14984:6:49","typeDescriptions":{}}},"id":10754,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14984:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"functionReturnParameters":10736,"id":10755,"nodeType":"Return","src":"14977:20:49"}]},"documentation":{"id":10730,"nodeType":"StructuredDocumentation","src":"14510:276:49","text":" @dev Returns the downcasted uint40 from uint256, reverting on\n overflow (when the input is greater than largest uint40).\n Counterpart to Solidity's `uint40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":10757,"implemented":true,"kind":"function","modifiers":[],"name":"toUint40","nameLocation":"14800:8:49","nodeType":"FunctionDefinition","parameters":{"id":10733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10732,"mutability":"mutable","name":"value","nameLocation":"14817:5:49","nodeType":"VariableDeclaration","scope":10757,"src":"14809:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10731,"name":"uint256","nodeType":"ElementaryTypeName","src":"14809:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14808:15:49"},"returnParameters":{"id":10736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10735,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10757,"src":"14847:6:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":10734,"name":"uint40","nodeType":"ElementaryTypeName","src":"14847:6:49","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"14846:8:49"},"scope":11729,"src":"14791:213:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10784,"nodeType":"Block","src":"15355:149:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10765,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10760,"src":"15369:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10768,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15382:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":10767,"name":"uint32","nodeType":"ElementaryTypeName","src":"15382:6:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"}],"id":10766,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15377:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10769,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15377:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint32","typeString":"type(uint32)"}},"id":10770,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15390:3:49","memberName":"max","nodeType":"MemberAccess","src":"15377:16:49","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"15369:24:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10778,"nodeType":"IfStatement","src":"15365:103:49","trueBody":{"id":10777,"nodeType":"Block","src":"15395:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":10773,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15447:2:49","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":10774,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10760,"src":"15451:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10772,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"15416:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15416:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10776,"nodeType":"RevertStatement","src":"15409:48:49"}]}},{"expression":{"arguments":[{"id":10781,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10760,"src":"15491:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10780,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15484:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":10779,"name":"uint32","nodeType":"ElementaryTypeName","src":"15484:6:49","typeDescriptions":{}}},"id":10782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15484:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":10764,"id":10783,"nodeType":"Return","src":"15477:20:49"}]},"documentation":{"id":10758,"nodeType":"StructuredDocumentation","src":"15010:276:49","text":" @dev Returns the downcasted uint32 from uint256, reverting on\n overflow (when the input is greater than largest uint32).\n Counterpart to Solidity's `uint32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":10785,"implemented":true,"kind":"function","modifiers":[],"name":"toUint32","nameLocation":"15300:8:49","nodeType":"FunctionDefinition","parameters":{"id":10761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10760,"mutability":"mutable","name":"value","nameLocation":"15317:5:49","nodeType":"VariableDeclaration","scope":10785,"src":"15309:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10759,"name":"uint256","nodeType":"ElementaryTypeName","src":"15309:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15308:15:49"},"returnParameters":{"id":10764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10763,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10785,"src":"15347:6:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":10762,"name":"uint32","nodeType":"ElementaryTypeName","src":"15347:6:49","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"15346:8:49"},"scope":11729,"src":"15291:213:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10812,"nodeType":"Block","src":"15855:149:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10793,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10788,"src":"15869:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10796,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15882:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":10795,"name":"uint24","nodeType":"ElementaryTypeName","src":"15882:6:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"}],"id":10794,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15877:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10797,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15877:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint24","typeString":"type(uint24)"}},"id":10798,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15890:3:49","memberName":"max","nodeType":"MemberAccess","src":"15877:16:49","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"src":"15869:24:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10806,"nodeType":"IfStatement","src":"15865:103:49","trueBody":{"id":10805,"nodeType":"Block","src":"15895:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":10801,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15947:2:49","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":10802,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10788,"src":"15951:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10800,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"15916:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15916:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10804,"nodeType":"RevertStatement","src":"15909:48:49"}]}},{"expression":{"arguments":[{"id":10809,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10788,"src":"15991:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10808,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15984:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":10807,"name":"uint24","nodeType":"ElementaryTypeName","src":"15984:6:49","typeDescriptions":{}}},"id":10810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15984:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"functionReturnParameters":10792,"id":10811,"nodeType":"Return","src":"15977:20:49"}]},"documentation":{"id":10786,"nodeType":"StructuredDocumentation","src":"15510:276:49","text":" @dev Returns the downcasted uint24 from uint256, reverting on\n overflow (when the input is greater than largest uint24).\n Counterpart to Solidity's `uint24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":10813,"implemented":true,"kind":"function","modifiers":[],"name":"toUint24","nameLocation":"15800:8:49","nodeType":"FunctionDefinition","parameters":{"id":10789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10788,"mutability":"mutable","name":"value","nameLocation":"15817:5:49","nodeType":"VariableDeclaration","scope":10813,"src":"15809:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10787,"name":"uint256","nodeType":"ElementaryTypeName","src":"15809:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15808:15:49"},"returnParameters":{"id":10792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10791,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10813,"src":"15847:6:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"},"typeName":{"id":10790,"name":"uint24","nodeType":"ElementaryTypeName","src":"15847:6:49","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"visibility":"internal"}],"src":"15846:8:49"},"scope":11729,"src":"15791:213:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10840,"nodeType":"Block","src":"16355:149:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10821,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10816,"src":"16369:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10824,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16382:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":10823,"name":"uint16","nodeType":"ElementaryTypeName","src":"16382:6:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"}],"id":10822,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16377:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16377:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint16","typeString":"type(uint16)"}},"id":10826,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16390:3:49","memberName":"max","nodeType":"MemberAccess","src":"16377:16:49","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"16369:24:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10834,"nodeType":"IfStatement","src":"16365:103:49","trueBody":{"id":10833,"nodeType":"Block","src":"16395:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":10829,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16447:2:49","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":10830,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10816,"src":"16451:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10828,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"16416:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16416:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10832,"nodeType":"RevertStatement","src":"16409:48:49"}]}},{"expression":{"arguments":[{"id":10837,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10816,"src":"16491:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10836,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16484:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":10835,"name":"uint16","nodeType":"ElementaryTypeName","src":"16484:6:49","typeDescriptions":{}}},"id":10838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16484:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":10820,"id":10839,"nodeType":"Return","src":"16477:20:49"}]},"documentation":{"id":10814,"nodeType":"StructuredDocumentation","src":"16010:276:49","text":" @dev Returns the downcasted uint16 from uint256, reverting on\n overflow (when the input is greater than largest uint16).\n Counterpart to Solidity's `uint16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":10841,"implemented":true,"kind":"function","modifiers":[],"name":"toUint16","nameLocation":"16300:8:49","nodeType":"FunctionDefinition","parameters":{"id":10817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10816,"mutability":"mutable","name":"value","nameLocation":"16317:5:49","nodeType":"VariableDeclaration","scope":10841,"src":"16309:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10815,"name":"uint256","nodeType":"ElementaryTypeName","src":"16309:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16308:15:49"},"returnParameters":{"id":10820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10819,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10841,"src":"16347:6:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":10818,"name":"uint16","nodeType":"ElementaryTypeName","src":"16347:6:49","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"16346:8:49"},"scope":11729,"src":"16291:213:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10868,"nodeType":"Block","src":"16849:146:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10849,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10844,"src":"16863:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10852,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16876:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":10851,"name":"uint8","nodeType":"ElementaryTypeName","src":"16876:5:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":10850,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16871:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10853,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16871:11:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":10854,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16883:3:49","memberName":"max","nodeType":"MemberAccess","src":"16871:15:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"16863:23:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10862,"nodeType":"IfStatement","src":"16859:101:49","trueBody":{"id":10861,"nodeType":"Block","src":"16888:72:49","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":10857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16940:1:49","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":10858,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10844,"src":"16943:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10856,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"16909:30:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16909:40:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10860,"nodeType":"RevertStatement","src":"16902:47:49"}]}},{"expression":{"arguments":[{"id":10865,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10844,"src":"16982:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10864,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16976:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":10863,"name":"uint8","nodeType":"ElementaryTypeName","src":"16976:5:49","typeDescriptions":{}}},"id":10866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16976:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":10848,"id":10867,"nodeType":"Return","src":"16969:19:49"}]},"documentation":{"id":10842,"nodeType":"StructuredDocumentation","src":"16510:272:49","text":" @dev Returns the downcasted uint8 from uint256, reverting on\n overflow (when the input is greater than largest uint8).\n Counterpart to Solidity's `uint8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":10869,"implemented":true,"kind":"function","modifiers":[],"name":"toUint8","nameLocation":"16796:7:49","nodeType":"FunctionDefinition","parameters":{"id":10845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10844,"mutability":"mutable","name":"value","nameLocation":"16812:5:49","nodeType":"VariableDeclaration","scope":10869,"src":"16804:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10843,"name":"uint256","nodeType":"ElementaryTypeName","src":"16804:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16803:15:49"},"returnParameters":{"id":10848,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10847,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10869,"src":"16842:5:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":10846,"name":"uint8","nodeType":"ElementaryTypeName","src":"16842:5:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"16841:7:49"},"scope":11729,"src":"16787:208:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10891,"nodeType":"Block","src":"17231:128:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":10879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10877,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10872,"src":"17245:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":10878,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17253:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17245:9:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10885,"nodeType":"IfStatement","src":"17241:81:49","trueBody":{"id":10884,"nodeType":"Block","src":"17256:66:49","statements":[{"errorCall":{"arguments":[{"id":10881,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10872,"src":"17305:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":10880,"name":"SafeCastOverflowedIntToUint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9989,"src":"17277:27:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_int256_$returns$_t_error_$","typeString":"function (int256) pure returns (error)"}},"id":10882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17277:34:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10883,"nodeType":"RevertStatement","src":"17270:41:49"}]}},{"expression":{"arguments":[{"id":10888,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10872,"src":"17346:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":10887,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17338:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":10886,"name":"uint256","nodeType":"ElementaryTypeName","src":"17338:7:49","typeDescriptions":{}}},"id":10889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17338:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10876,"id":10890,"nodeType":"Return","src":"17331:21:49"}]},"documentation":{"id":10870,"nodeType":"StructuredDocumentation","src":"17001:160:49","text":" @dev Converts a signed int256 into an unsigned uint256.\n Requirements:\n - input must be greater than or equal to 0."},"id":10892,"implemented":true,"kind":"function","modifiers":[],"name":"toUint256","nameLocation":"17175:9:49","nodeType":"FunctionDefinition","parameters":{"id":10873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10872,"mutability":"mutable","name":"value","nameLocation":"17192:5:49","nodeType":"VariableDeclaration","scope":10892,"src":"17185:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":10871,"name":"int256","nodeType":"ElementaryTypeName","src":"17185:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17184:14:49"},"returnParameters":{"id":10876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10875,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10892,"src":"17222:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10874,"name":"uint256","nodeType":"ElementaryTypeName","src":"17222:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17221:9:49"},"scope":11729,"src":"17166:193:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10917,"nodeType":"Block","src":"17756:150:49","statements":[{"expression":{"id":10905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10900,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10898,"src":"17766:10:49","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":10903,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10895,"src":"17786:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":10902,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17779:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int248_$","typeString":"type(int248)"},"typeName":{"id":10901,"name":"int248","nodeType":"ElementaryTypeName","src":"17779:6:49","typeDescriptions":{}}},"id":10904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17779:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"src":"17766:26:49","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"id":10906,"nodeType":"ExpressionStatement","src":"17766:26:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":10909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10907,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10898,"src":"17806:10:49","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":10908,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10895,"src":"17820:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17806:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10916,"nodeType":"IfStatement","src":"17802:98:49","trueBody":{"id":10915,"nodeType":"Block","src":"17827:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":10911,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17878:3:49","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":10912,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10895,"src":"17883:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":10910,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"17848:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":10913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17848:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10914,"nodeType":"RevertStatement","src":"17841:48:49"}]}}]},"documentation":{"id":10893,"nodeType":"StructuredDocumentation","src":"17365:312:49","text":" @dev Returns the downcasted int248 from int256, reverting on\n overflow (when the input is less than smallest int248 or\n greater than largest int248).\n Counterpart to Solidity's `int248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":10918,"implemented":true,"kind":"function","modifiers":[],"name":"toInt248","nameLocation":"17691:8:49","nodeType":"FunctionDefinition","parameters":{"id":10896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10895,"mutability":"mutable","name":"value","nameLocation":"17707:5:49","nodeType":"VariableDeclaration","scope":10918,"src":"17700:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":10894,"name":"int256","nodeType":"ElementaryTypeName","src":"17700:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17699:14:49"},"returnParameters":{"id":10899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10898,"mutability":"mutable","name":"downcasted","nameLocation":"17744:10:49","nodeType":"VariableDeclaration","scope":10918,"src":"17737:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"},"typeName":{"id":10897,"name":"int248","nodeType":"ElementaryTypeName","src":"17737:6:49","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"visibility":"internal"}],"src":"17736:19:49"},"scope":11729,"src":"17682:224:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10943,"nodeType":"Block","src":"18303:150:49","statements":[{"expression":{"id":10931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10926,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10924,"src":"18313:10:49","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":10929,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10921,"src":"18333:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":10928,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18326:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int240_$","typeString":"type(int240)"},"typeName":{"id":10927,"name":"int240","nodeType":"ElementaryTypeName","src":"18326:6:49","typeDescriptions":{}}},"id":10930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18326:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"src":"18313:26:49","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"id":10932,"nodeType":"ExpressionStatement","src":"18313:26:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":10935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10933,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10924,"src":"18353:10:49","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":10934,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10921,"src":"18367:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18353:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10942,"nodeType":"IfStatement","src":"18349:98:49","trueBody":{"id":10941,"nodeType":"Block","src":"18374:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":10937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18425:3:49","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":10938,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10921,"src":"18430:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":10936,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"18395:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":10939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18395:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10940,"nodeType":"RevertStatement","src":"18388:48:49"}]}}]},"documentation":{"id":10919,"nodeType":"StructuredDocumentation","src":"17912:312:49","text":" @dev Returns the downcasted int240 from int256, reverting on\n overflow (when the input is less than smallest int240 or\n greater than largest int240).\n Counterpart to Solidity's `int240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":10944,"implemented":true,"kind":"function","modifiers":[],"name":"toInt240","nameLocation":"18238:8:49","nodeType":"FunctionDefinition","parameters":{"id":10922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10921,"mutability":"mutable","name":"value","nameLocation":"18254:5:49","nodeType":"VariableDeclaration","scope":10944,"src":"18247:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":10920,"name":"int256","nodeType":"ElementaryTypeName","src":"18247:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18246:14:49"},"returnParameters":{"id":10925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10924,"mutability":"mutable","name":"downcasted","nameLocation":"18291:10:49","nodeType":"VariableDeclaration","scope":10944,"src":"18284:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"},"typeName":{"id":10923,"name":"int240","nodeType":"ElementaryTypeName","src":"18284:6:49","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"visibility":"internal"}],"src":"18283:19:49"},"scope":11729,"src":"18229:224:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10969,"nodeType":"Block","src":"18850:150:49","statements":[{"expression":{"id":10957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10952,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10950,"src":"18860:10:49","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":10955,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10947,"src":"18880:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":10954,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18873:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int232_$","typeString":"type(int232)"},"typeName":{"id":10953,"name":"int232","nodeType":"ElementaryTypeName","src":"18873:6:49","typeDescriptions":{}}},"id":10956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18873:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"src":"18860:26:49","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"id":10958,"nodeType":"ExpressionStatement","src":"18860:26:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":10961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10959,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10950,"src":"18900:10:49","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":10960,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10947,"src":"18914:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18900:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10968,"nodeType":"IfStatement","src":"18896:98:49","trueBody":{"id":10967,"nodeType":"Block","src":"18921:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":10963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18972:3:49","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":10964,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10947,"src":"18977:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":10962,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"18942:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":10965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18942:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10966,"nodeType":"RevertStatement","src":"18935:48:49"}]}}]},"documentation":{"id":10945,"nodeType":"StructuredDocumentation","src":"18459:312:49","text":" @dev Returns the downcasted int232 from int256, reverting on\n overflow (when the input is less than smallest int232 or\n greater than largest int232).\n Counterpart to Solidity's `int232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":10970,"implemented":true,"kind":"function","modifiers":[],"name":"toInt232","nameLocation":"18785:8:49","nodeType":"FunctionDefinition","parameters":{"id":10948,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10947,"mutability":"mutable","name":"value","nameLocation":"18801:5:49","nodeType":"VariableDeclaration","scope":10970,"src":"18794:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":10946,"name":"int256","nodeType":"ElementaryTypeName","src":"18794:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18793:14:49"},"returnParameters":{"id":10951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10950,"mutability":"mutable","name":"downcasted","nameLocation":"18838:10:49","nodeType":"VariableDeclaration","scope":10970,"src":"18831:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"},"typeName":{"id":10949,"name":"int232","nodeType":"ElementaryTypeName","src":"18831:6:49","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"visibility":"internal"}],"src":"18830:19:49"},"scope":11729,"src":"18776:224:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10995,"nodeType":"Block","src":"19397:150:49","statements":[{"expression":{"id":10983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10978,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10976,"src":"19407:10:49","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":10981,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10973,"src":"19427:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":10980,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19420:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int224_$","typeString":"type(int224)"},"typeName":{"id":10979,"name":"int224","nodeType":"ElementaryTypeName","src":"19420:6:49","typeDescriptions":{}}},"id":10982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19420:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"src":"19407:26:49","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"id":10984,"nodeType":"ExpressionStatement","src":"19407:26:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":10987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10985,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10976,"src":"19447:10:49","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":10986,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10973,"src":"19461:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19447:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10994,"nodeType":"IfStatement","src":"19443:98:49","trueBody":{"id":10993,"nodeType":"Block","src":"19468:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":10989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19519:3:49","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":10990,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10973,"src":"19524:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":10988,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"19489:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":10991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19489:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10992,"nodeType":"RevertStatement","src":"19482:48:49"}]}}]},"documentation":{"id":10971,"nodeType":"StructuredDocumentation","src":"19006:312:49","text":" @dev Returns the downcasted int224 from int256, reverting on\n overflow (when the input is less than smallest int224 or\n greater than largest int224).\n Counterpart to Solidity's `int224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":10996,"implemented":true,"kind":"function","modifiers":[],"name":"toInt224","nameLocation":"19332:8:49","nodeType":"FunctionDefinition","parameters":{"id":10974,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10973,"mutability":"mutable","name":"value","nameLocation":"19348:5:49","nodeType":"VariableDeclaration","scope":10996,"src":"19341:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":10972,"name":"int256","nodeType":"ElementaryTypeName","src":"19341:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19340:14:49"},"returnParameters":{"id":10977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10976,"mutability":"mutable","name":"downcasted","nameLocation":"19385:10:49","nodeType":"VariableDeclaration","scope":10996,"src":"19378:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"},"typeName":{"id":10975,"name":"int224","nodeType":"ElementaryTypeName","src":"19378:6:49","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"visibility":"internal"}],"src":"19377:19:49"},"scope":11729,"src":"19323:224:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11021,"nodeType":"Block","src":"19944:150:49","statements":[{"expression":{"id":11009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11004,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11002,"src":"19954:10:49","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11007,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10999,"src":"19974:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11006,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19967:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int216_$","typeString":"type(int216)"},"typeName":{"id":11005,"name":"int216","nodeType":"ElementaryTypeName","src":"19967:6:49","typeDescriptions":{}}},"id":11008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19967:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"src":"19954:26:49","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"id":11010,"nodeType":"ExpressionStatement","src":"19954:26:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11011,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11002,"src":"19994:10:49","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11012,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10999,"src":"20008:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19994:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11020,"nodeType":"IfStatement","src":"19990:98:49","trueBody":{"id":11019,"nodeType":"Block","src":"20015:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":11015,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20066:3:49","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":11016,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10999,"src":"20071:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11014,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"20036:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20036:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11018,"nodeType":"RevertStatement","src":"20029:48:49"}]}}]},"documentation":{"id":10997,"nodeType":"StructuredDocumentation","src":"19553:312:49","text":" @dev Returns the downcasted int216 from int256, reverting on\n overflow (when the input is less than smallest int216 or\n greater than largest int216).\n Counterpart to Solidity's `int216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":11022,"implemented":true,"kind":"function","modifiers":[],"name":"toInt216","nameLocation":"19879:8:49","nodeType":"FunctionDefinition","parameters":{"id":11000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10999,"mutability":"mutable","name":"value","nameLocation":"19895:5:49","nodeType":"VariableDeclaration","scope":11022,"src":"19888:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":10998,"name":"int256","nodeType":"ElementaryTypeName","src":"19888:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19887:14:49"},"returnParameters":{"id":11003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11002,"mutability":"mutable","name":"downcasted","nameLocation":"19932:10:49","nodeType":"VariableDeclaration","scope":11022,"src":"19925:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"},"typeName":{"id":11001,"name":"int216","nodeType":"ElementaryTypeName","src":"19925:6:49","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"visibility":"internal"}],"src":"19924:19:49"},"scope":11729,"src":"19870:224:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11047,"nodeType":"Block","src":"20491:150:49","statements":[{"expression":{"id":11035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11030,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11028,"src":"20501:10:49","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11033,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11025,"src":"20521:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11032,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20514:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int208_$","typeString":"type(int208)"},"typeName":{"id":11031,"name":"int208","nodeType":"ElementaryTypeName","src":"20514:6:49","typeDescriptions":{}}},"id":11034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20514:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"src":"20501:26:49","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"id":11036,"nodeType":"ExpressionStatement","src":"20501:26:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11037,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11028,"src":"20541:10:49","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11038,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11025,"src":"20555:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20541:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11046,"nodeType":"IfStatement","src":"20537:98:49","trueBody":{"id":11045,"nodeType":"Block","src":"20562:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":11041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20613:3:49","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":11042,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11025,"src":"20618:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11040,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"20583:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20583:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11044,"nodeType":"RevertStatement","src":"20576:48:49"}]}}]},"documentation":{"id":11023,"nodeType":"StructuredDocumentation","src":"20100:312:49","text":" @dev Returns the downcasted int208 from int256, reverting on\n overflow (when the input is less than smallest int208 or\n greater than largest int208).\n Counterpart to Solidity's `int208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":11048,"implemented":true,"kind":"function","modifiers":[],"name":"toInt208","nameLocation":"20426:8:49","nodeType":"FunctionDefinition","parameters":{"id":11026,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11025,"mutability":"mutable","name":"value","nameLocation":"20442:5:49","nodeType":"VariableDeclaration","scope":11048,"src":"20435:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11024,"name":"int256","nodeType":"ElementaryTypeName","src":"20435:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20434:14:49"},"returnParameters":{"id":11029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11028,"mutability":"mutable","name":"downcasted","nameLocation":"20479:10:49","nodeType":"VariableDeclaration","scope":11048,"src":"20472:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"},"typeName":{"id":11027,"name":"int208","nodeType":"ElementaryTypeName","src":"20472:6:49","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"visibility":"internal"}],"src":"20471:19:49"},"scope":11729,"src":"20417:224:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11073,"nodeType":"Block","src":"21038:150:49","statements":[{"expression":{"id":11061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11056,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11054,"src":"21048:10:49","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11059,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11051,"src":"21068:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11058,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21061:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int200_$","typeString":"type(int200)"},"typeName":{"id":11057,"name":"int200","nodeType":"ElementaryTypeName","src":"21061:6:49","typeDescriptions":{}}},"id":11060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21061:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"src":"21048:26:49","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"id":11062,"nodeType":"ExpressionStatement","src":"21048:26:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11063,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11054,"src":"21088:10:49","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11064,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11051,"src":"21102:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21088:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11072,"nodeType":"IfStatement","src":"21084:98:49","trueBody":{"id":11071,"nodeType":"Block","src":"21109:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":11067,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21160:3:49","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":11068,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11051,"src":"21165:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11066,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"21130:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21130:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11070,"nodeType":"RevertStatement","src":"21123:48:49"}]}}]},"documentation":{"id":11049,"nodeType":"StructuredDocumentation","src":"20647:312:49","text":" @dev Returns the downcasted int200 from int256, reverting on\n overflow (when the input is less than smallest int200 or\n greater than largest int200).\n Counterpart to Solidity's `int200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":11074,"implemented":true,"kind":"function","modifiers":[],"name":"toInt200","nameLocation":"20973:8:49","nodeType":"FunctionDefinition","parameters":{"id":11052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11051,"mutability":"mutable","name":"value","nameLocation":"20989:5:49","nodeType":"VariableDeclaration","scope":11074,"src":"20982:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11050,"name":"int256","nodeType":"ElementaryTypeName","src":"20982:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20981:14:49"},"returnParameters":{"id":11055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11054,"mutability":"mutable","name":"downcasted","nameLocation":"21026:10:49","nodeType":"VariableDeclaration","scope":11074,"src":"21019:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"},"typeName":{"id":11053,"name":"int200","nodeType":"ElementaryTypeName","src":"21019:6:49","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"visibility":"internal"}],"src":"21018:19:49"},"scope":11729,"src":"20964:224:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11099,"nodeType":"Block","src":"21585:150:49","statements":[{"expression":{"id":11087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11082,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11080,"src":"21595:10:49","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11085,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11077,"src":"21615:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11084,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21608:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int192_$","typeString":"type(int192)"},"typeName":{"id":11083,"name":"int192","nodeType":"ElementaryTypeName","src":"21608:6:49","typeDescriptions":{}}},"id":11086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21608:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"src":"21595:26:49","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"id":11088,"nodeType":"ExpressionStatement","src":"21595:26:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11089,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11080,"src":"21635:10:49","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11090,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11077,"src":"21649:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21635:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11098,"nodeType":"IfStatement","src":"21631:98:49","trueBody":{"id":11097,"nodeType":"Block","src":"21656:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":11093,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21707:3:49","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":11094,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11077,"src":"21712:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11092,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"21677:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21677:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11096,"nodeType":"RevertStatement","src":"21670:48:49"}]}}]},"documentation":{"id":11075,"nodeType":"StructuredDocumentation","src":"21194:312:49","text":" @dev Returns the downcasted int192 from int256, reverting on\n overflow (when the input is less than smallest int192 or\n greater than largest int192).\n Counterpart to Solidity's `int192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":11100,"implemented":true,"kind":"function","modifiers":[],"name":"toInt192","nameLocation":"21520:8:49","nodeType":"FunctionDefinition","parameters":{"id":11078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11077,"mutability":"mutable","name":"value","nameLocation":"21536:5:49","nodeType":"VariableDeclaration","scope":11100,"src":"21529:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11076,"name":"int256","nodeType":"ElementaryTypeName","src":"21529:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"21528:14:49"},"returnParameters":{"id":11081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11080,"mutability":"mutable","name":"downcasted","nameLocation":"21573:10:49","nodeType":"VariableDeclaration","scope":11100,"src":"21566:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"},"typeName":{"id":11079,"name":"int192","nodeType":"ElementaryTypeName","src":"21566:6:49","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"visibility":"internal"}],"src":"21565:19:49"},"scope":11729,"src":"21511:224:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11125,"nodeType":"Block","src":"22132:150:49","statements":[{"expression":{"id":11113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11108,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11106,"src":"22142:10:49","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11111,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11103,"src":"22162:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11110,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22155:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int184_$","typeString":"type(int184)"},"typeName":{"id":11109,"name":"int184","nodeType":"ElementaryTypeName","src":"22155:6:49","typeDescriptions":{}}},"id":11112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22155:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"src":"22142:26:49","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"id":11114,"nodeType":"ExpressionStatement","src":"22142:26:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11115,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11106,"src":"22182:10:49","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11116,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11103,"src":"22196:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22182:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11124,"nodeType":"IfStatement","src":"22178:98:49","trueBody":{"id":11123,"nodeType":"Block","src":"22203:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":11119,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22254:3:49","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":11120,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11103,"src":"22259:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11118,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"22224:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22224:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11122,"nodeType":"RevertStatement","src":"22217:48:49"}]}}]},"documentation":{"id":11101,"nodeType":"StructuredDocumentation","src":"21741:312:49","text":" @dev Returns the downcasted int184 from int256, reverting on\n overflow (when the input is less than smallest int184 or\n greater than largest int184).\n Counterpart to Solidity's `int184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":11126,"implemented":true,"kind":"function","modifiers":[],"name":"toInt184","nameLocation":"22067:8:49","nodeType":"FunctionDefinition","parameters":{"id":11104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11103,"mutability":"mutable","name":"value","nameLocation":"22083:5:49","nodeType":"VariableDeclaration","scope":11126,"src":"22076:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11102,"name":"int256","nodeType":"ElementaryTypeName","src":"22076:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22075:14:49"},"returnParameters":{"id":11107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11106,"mutability":"mutable","name":"downcasted","nameLocation":"22120:10:49","nodeType":"VariableDeclaration","scope":11126,"src":"22113:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"},"typeName":{"id":11105,"name":"int184","nodeType":"ElementaryTypeName","src":"22113:6:49","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"visibility":"internal"}],"src":"22112:19:49"},"scope":11729,"src":"22058:224:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11151,"nodeType":"Block","src":"22679:150:49","statements":[{"expression":{"id":11139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11134,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11132,"src":"22689:10:49","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11137,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11129,"src":"22709:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11136,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22702:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int176_$","typeString":"type(int176)"},"typeName":{"id":11135,"name":"int176","nodeType":"ElementaryTypeName","src":"22702:6:49","typeDescriptions":{}}},"id":11138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22702:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"src":"22689:26:49","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"id":11140,"nodeType":"ExpressionStatement","src":"22689:26:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11141,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11132,"src":"22729:10:49","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11142,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11129,"src":"22743:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22729:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11150,"nodeType":"IfStatement","src":"22725:98:49","trueBody":{"id":11149,"nodeType":"Block","src":"22750:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":11145,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22801:3:49","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":11146,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11129,"src":"22806:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11144,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"22771:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22771:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11148,"nodeType":"RevertStatement","src":"22764:48:49"}]}}]},"documentation":{"id":11127,"nodeType":"StructuredDocumentation","src":"22288:312:49","text":" @dev Returns the downcasted int176 from int256, reverting on\n overflow (when the input is less than smallest int176 or\n greater than largest int176).\n Counterpart to Solidity's `int176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":11152,"implemented":true,"kind":"function","modifiers":[],"name":"toInt176","nameLocation":"22614:8:49","nodeType":"FunctionDefinition","parameters":{"id":11130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11129,"mutability":"mutable","name":"value","nameLocation":"22630:5:49","nodeType":"VariableDeclaration","scope":11152,"src":"22623:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11128,"name":"int256","nodeType":"ElementaryTypeName","src":"22623:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22622:14:49"},"returnParameters":{"id":11133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11132,"mutability":"mutable","name":"downcasted","nameLocation":"22667:10:49","nodeType":"VariableDeclaration","scope":11152,"src":"22660:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"},"typeName":{"id":11131,"name":"int176","nodeType":"ElementaryTypeName","src":"22660:6:49","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"visibility":"internal"}],"src":"22659:19:49"},"scope":11729,"src":"22605:224:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11177,"nodeType":"Block","src":"23226:150:49","statements":[{"expression":{"id":11165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11160,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11158,"src":"23236:10:49","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11163,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11155,"src":"23256:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11162,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23249:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int168_$","typeString":"type(int168)"},"typeName":{"id":11161,"name":"int168","nodeType":"ElementaryTypeName","src":"23249:6:49","typeDescriptions":{}}},"id":11164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23249:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"src":"23236:26:49","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"id":11166,"nodeType":"ExpressionStatement","src":"23236:26:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11167,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11158,"src":"23276:10:49","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11168,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11155,"src":"23290:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23276:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11176,"nodeType":"IfStatement","src":"23272:98:49","trueBody":{"id":11175,"nodeType":"Block","src":"23297:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":11171,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23348:3:49","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":11172,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11155,"src":"23353:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11170,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"23318:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23318:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11174,"nodeType":"RevertStatement","src":"23311:48:49"}]}}]},"documentation":{"id":11153,"nodeType":"StructuredDocumentation","src":"22835:312:49","text":" @dev Returns the downcasted int168 from int256, reverting on\n overflow (when the input is less than smallest int168 or\n greater than largest int168).\n Counterpart to Solidity's `int168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":11178,"implemented":true,"kind":"function","modifiers":[],"name":"toInt168","nameLocation":"23161:8:49","nodeType":"FunctionDefinition","parameters":{"id":11156,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11155,"mutability":"mutable","name":"value","nameLocation":"23177:5:49","nodeType":"VariableDeclaration","scope":11178,"src":"23170:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11154,"name":"int256","nodeType":"ElementaryTypeName","src":"23170:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23169:14:49"},"returnParameters":{"id":11159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11158,"mutability":"mutable","name":"downcasted","nameLocation":"23214:10:49","nodeType":"VariableDeclaration","scope":11178,"src":"23207:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"},"typeName":{"id":11157,"name":"int168","nodeType":"ElementaryTypeName","src":"23207:6:49","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"visibility":"internal"}],"src":"23206:19:49"},"scope":11729,"src":"23152:224:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11203,"nodeType":"Block","src":"23773:150:49","statements":[{"expression":{"id":11191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11186,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11184,"src":"23783:10:49","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11189,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11181,"src":"23803:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11188,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23796:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int160_$","typeString":"type(int160)"},"typeName":{"id":11187,"name":"int160","nodeType":"ElementaryTypeName","src":"23796:6:49","typeDescriptions":{}}},"id":11190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23796:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"src":"23783:26:49","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"id":11192,"nodeType":"ExpressionStatement","src":"23783:26:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11193,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11184,"src":"23823:10:49","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11194,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11181,"src":"23837:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23823:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11202,"nodeType":"IfStatement","src":"23819:98:49","trueBody":{"id":11201,"nodeType":"Block","src":"23844:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":11197,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23895:3:49","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":11198,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11181,"src":"23900:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11196,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"23865:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23865:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11200,"nodeType":"RevertStatement","src":"23858:48:49"}]}}]},"documentation":{"id":11179,"nodeType":"StructuredDocumentation","src":"23382:312:49","text":" @dev Returns the downcasted int160 from int256, reverting on\n overflow (when the input is less than smallest int160 or\n greater than largest int160).\n Counterpart to Solidity's `int160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":11204,"implemented":true,"kind":"function","modifiers":[],"name":"toInt160","nameLocation":"23708:8:49","nodeType":"FunctionDefinition","parameters":{"id":11182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11181,"mutability":"mutable","name":"value","nameLocation":"23724:5:49","nodeType":"VariableDeclaration","scope":11204,"src":"23717:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11180,"name":"int256","nodeType":"ElementaryTypeName","src":"23717:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23716:14:49"},"returnParameters":{"id":11185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11184,"mutability":"mutable","name":"downcasted","nameLocation":"23761:10:49","nodeType":"VariableDeclaration","scope":11204,"src":"23754:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"},"typeName":{"id":11183,"name":"int160","nodeType":"ElementaryTypeName","src":"23754:6:49","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"visibility":"internal"}],"src":"23753:19:49"},"scope":11729,"src":"23699:224:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11229,"nodeType":"Block","src":"24320:150:49","statements":[{"expression":{"id":11217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11212,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11210,"src":"24330:10:49","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11215,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11207,"src":"24350:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11214,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24343:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int152_$","typeString":"type(int152)"},"typeName":{"id":11213,"name":"int152","nodeType":"ElementaryTypeName","src":"24343:6:49","typeDescriptions":{}}},"id":11216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24343:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"src":"24330:26:49","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"id":11218,"nodeType":"ExpressionStatement","src":"24330:26:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11219,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11210,"src":"24370:10:49","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11220,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11207,"src":"24384:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24370:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11228,"nodeType":"IfStatement","src":"24366:98:49","trueBody":{"id":11227,"nodeType":"Block","src":"24391:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":11223,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24442:3:49","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":11224,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11207,"src":"24447:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11222,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"24412:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24412:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11226,"nodeType":"RevertStatement","src":"24405:48:49"}]}}]},"documentation":{"id":11205,"nodeType":"StructuredDocumentation","src":"23929:312:49","text":" @dev Returns the downcasted int152 from int256, reverting on\n overflow (when the input is less than smallest int152 or\n greater than largest int152).\n Counterpart to Solidity's `int152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":11230,"implemented":true,"kind":"function","modifiers":[],"name":"toInt152","nameLocation":"24255:8:49","nodeType":"FunctionDefinition","parameters":{"id":11208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11207,"mutability":"mutable","name":"value","nameLocation":"24271:5:49","nodeType":"VariableDeclaration","scope":11230,"src":"24264:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11206,"name":"int256","nodeType":"ElementaryTypeName","src":"24264:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24263:14:49"},"returnParameters":{"id":11211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11210,"mutability":"mutable","name":"downcasted","nameLocation":"24308:10:49","nodeType":"VariableDeclaration","scope":11230,"src":"24301:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"},"typeName":{"id":11209,"name":"int152","nodeType":"ElementaryTypeName","src":"24301:6:49","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"visibility":"internal"}],"src":"24300:19:49"},"scope":11729,"src":"24246:224:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11255,"nodeType":"Block","src":"24867:150:49","statements":[{"expression":{"id":11243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11238,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11236,"src":"24877:10:49","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11241,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11233,"src":"24897:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11240,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24890:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int144_$","typeString":"type(int144)"},"typeName":{"id":11239,"name":"int144","nodeType":"ElementaryTypeName","src":"24890:6:49","typeDescriptions":{}}},"id":11242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24890:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"src":"24877:26:49","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"id":11244,"nodeType":"ExpressionStatement","src":"24877:26:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11245,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11236,"src":"24917:10:49","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11246,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11233,"src":"24931:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24917:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11254,"nodeType":"IfStatement","src":"24913:98:49","trueBody":{"id":11253,"nodeType":"Block","src":"24938:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":11249,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24989:3:49","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":11250,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11233,"src":"24994:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11248,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"24959:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24959:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11252,"nodeType":"RevertStatement","src":"24952:48:49"}]}}]},"documentation":{"id":11231,"nodeType":"StructuredDocumentation","src":"24476:312:49","text":" @dev Returns the downcasted int144 from int256, reverting on\n overflow (when the input is less than smallest int144 or\n greater than largest int144).\n Counterpart to Solidity's `int144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":11256,"implemented":true,"kind":"function","modifiers":[],"name":"toInt144","nameLocation":"24802:8:49","nodeType":"FunctionDefinition","parameters":{"id":11234,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11233,"mutability":"mutable","name":"value","nameLocation":"24818:5:49","nodeType":"VariableDeclaration","scope":11256,"src":"24811:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11232,"name":"int256","nodeType":"ElementaryTypeName","src":"24811:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24810:14:49"},"returnParameters":{"id":11237,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11236,"mutability":"mutable","name":"downcasted","nameLocation":"24855:10:49","nodeType":"VariableDeclaration","scope":11256,"src":"24848:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"},"typeName":{"id":11235,"name":"int144","nodeType":"ElementaryTypeName","src":"24848:6:49","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"visibility":"internal"}],"src":"24847:19:49"},"scope":11729,"src":"24793:224:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11281,"nodeType":"Block","src":"25414:150:49","statements":[{"expression":{"id":11269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11264,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11262,"src":"25424:10:49","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11267,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11259,"src":"25444:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11266,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25437:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int136_$","typeString":"type(int136)"},"typeName":{"id":11265,"name":"int136","nodeType":"ElementaryTypeName","src":"25437:6:49","typeDescriptions":{}}},"id":11268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25437:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"src":"25424:26:49","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"id":11270,"nodeType":"ExpressionStatement","src":"25424:26:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11271,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11262,"src":"25464:10:49","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11272,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11259,"src":"25478:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"25464:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11280,"nodeType":"IfStatement","src":"25460:98:49","trueBody":{"id":11279,"nodeType":"Block","src":"25485:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":11275,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25536:3:49","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":11276,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11259,"src":"25541:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11274,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"25506:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25506:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11278,"nodeType":"RevertStatement","src":"25499:48:49"}]}}]},"documentation":{"id":11257,"nodeType":"StructuredDocumentation","src":"25023:312:49","text":" @dev Returns the downcasted int136 from int256, reverting on\n overflow (when the input is less than smallest int136 or\n greater than largest int136).\n Counterpart to Solidity's `int136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":11282,"implemented":true,"kind":"function","modifiers":[],"name":"toInt136","nameLocation":"25349:8:49","nodeType":"FunctionDefinition","parameters":{"id":11260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11259,"mutability":"mutable","name":"value","nameLocation":"25365:5:49","nodeType":"VariableDeclaration","scope":11282,"src":"25358:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11258,"name":"int256","nodeType":"ElementaryTypeName","src":"25358:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25357:14:49"},"returnParameters":{"id":11263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11262,"mutability":"mutable","name":"downcasted","nameLocation":"25402:10:49","nodeType":"VariableDeclaration","scope":11282,"src":"25395:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"},"typeName":{"id":11261,"name":"int136","nodeType":"ElementaryTypeName","src":"25395:6:49","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"visibility":"internal"}],"src":"25394:19:49"},"scope":11729,"src":"25340:224:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11307,"nodeType":"Block","src":"25961:150:49","statements":[{"expression":{"id":11295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11290,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11288,"src":"25971:10:49","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11293,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11285,"src":"25991:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11292,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25984:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"},"typeName":{"id":11291,"name":"int128","nodeType":"ElementaryTypeName","src":"25984:6:49","typeDescriptions":{}}},"id":11294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25984:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"src":"25971:26:49","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"id":11296,"nodeType":"ExpressionStatement","src":"25971:26:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11297,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11288,"src":"26011:10:49","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11298,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11285,"src":"26025:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26011:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11306,"nodeType":"IfStatement","src":"26007:98:49","trueBody":{"id":11305,"nodeType":"Block","src":"26032:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":11301,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26083:3:49","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":11302,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11285,"src":"26088:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11300,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"26053:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26053:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11304,"nodeType":"RevertStatement","src":"26046:48:49"}]}}]},"documentation":{"id":11283,"nodeType":"StructuredDocumentation","src":"25570:312:49","text":" @dev Returns the downcasted int128 from int256, reverting on\n overflow (when the input is less than smallest int128 or\n greater than largest int128).\n Counterpart to Solidity's `int128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":11308,"implemented":true,"kind":"function","modifiers":[],"name":"toInt128","nameLocation":"25896:8:49","nodeType":"FunctionDefinition","parameters":{"id":11286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11285,"mutability":"mutable","name":"value","nameLocation":"25912:5:49","nodeType":"VariableDeclaration","scope":11308,"src":"25905:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11284,"name":"int256","nodeType":"ElementaryTypeName","src":"25905:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25904:14:49"},"returnParameters":{"id":11289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11288,"mutability":"mutable","name":"downcasted","nameLocation":"25949:10:49","nodeType":"VariableDeclaration","scope":11308,"src":"25942:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"},"typeName":{"id":11287,"name":"int128","nodeType":"ElementaryTypeName","src":"25942:6:49","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"visibility":"internal"}],"src":"25941:19:49"},"scope":11729,"src":"25887:224:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11333,"nodeType":"Block","src":"26508:150:49","statements":[{"expression":{"id":11321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11316,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11314,"src":"26518:10:49","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11319,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11311,"src":"26538:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11318,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26531:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int120_$","typeString":"type(int120)"},"typeName":{"id":11317,"name":"int120","nodeType":"ElementaryTypeName","src":"26531:6:49","typeDescriptions":{}}},"id":11320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26531:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"src":"26518:26:49","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"id":11322,"nodeType":"ExpressionStatement","src":"26518:26:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11323,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11314,"src":"26558:10:49","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11324,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11311,"src":"26572:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26558:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11332,"nodeType":"IfStatement","src":"26554:98:49","trueBody":{"id":11331,"nodeType":"Block","src":"26579:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":11327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26630:3:49","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":11328,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11311,"src":"26635:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11326,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"26600:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11329,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26600:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11330,"nodeType":"RevertStatement","src":"26593:48:49"}]}}]},"documentation":{"id":11309,"nodeType":"StructuredDocumentation","src":"26117:312:49","text":" @dev Returns the downcasted int120 from int256, reverting on\n overflow (when the input is less than smallest int120 or\n greater than largest int120).\n Counterpart to Solidity's `int120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":11334,"implemented":true,"kind":"function","modifiers":[],"name":"toInt120","nameLocation":"26443:8:49","nodeType":"FunctionDefinition","parameters":{"id":11312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11311,"mutability":"mutable","name":"value","nameLocation":"26459:5:49","nodeType":"VariableDeclaration","scope":11334,"src":"26452:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11310,"name":"int256","nodeType":"ElementaryTypeName","src":"26452:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"26451:14:49"},"returnParameters":{"id":11315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11314,"mutability":"mutable","name":"downcasted","nameLocation":"26496:10:49","nodeType":"VariableDeclaration","scope":11334,"src":"26489:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"},"typeName":{"id":11313,"name":"int120","nodeType":"ElementaryTypeName","src":"26489:6:49","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"visibility":"internal"}],"src":"26488:19:49"},"scope":11729,"src":"26434:224:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11359,"nodeType":"Block","src":"27055:150:49","statements":[{"expression":{"id":11347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11342,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11340,"src":"27065:10:49","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11345,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11337,"src":"27085:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11344,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27078:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int112_$","typeString":"type(int112)"},"typeName":{"id":11343,"name":"int112","nodeType":"ElementaryTypeName","src":"27078:6:49","typeDescriptions":{}}},"id":11346,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27078:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"src":"27065:26:49","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"id":11348,"nodeType":"ExpressionStatement","src":"27065:26:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11349,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11340,"src":"27105:10:49","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11350,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11337,"src":"27119:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27105:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11358,"nodeType":"IfStatement","src":"27101:98:49","trueBody":{"id":11357,"nodeType":"Block","src":"27126:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":11353,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27177:3:49","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":11354,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11337,"src":"27182:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11352,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"27147:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27147:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11356,"nodeType":"RevertStatement","src":"27140:48:49"}]}}]},"documentation":{"id":11335,"nodeType":"StructuredDocumentation","src":"26664:312:49","text":" @dev Returns the downcasted int112 from int256, reverting on\n overflow (when the input is less than smallest int112 or\n greater than largest int112).\n Counterpart to Solidity's `int112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":11360,"implemented":true,"kind":"function","modifiers":[],"name":"toInt112","nameLocation":"26990:8:49","nodeType":"FunctionDefinition","parameters":{"id":11338,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11337,"mutability":"mutable","name":"value","nameLocation":"27006:5:49","nodeType":"VariableDeclaration","scope":11360,"src":"26999:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11336,"name":"int256","nodeType":"ElementaryTypeName","src":"26999:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"26998:14:49"},"returnParameters":{"id":11341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11340,"mutability":"mutable","name":"downcasted","nameLocation":"27043:10:49","nodeType":"VariableDeclaration","scope":11360,"src":"27036:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"},"typeName":{"id":11339,"name":"int112","nodeType":"ElementaryTypeName","src":"27036:6:49","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"visibility":"internal"}],"src":"27035:19:49"},"scope":11729,"src":"26981:224:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11385,"nodeType":"Block","src":"27602:150:49","statements":[{"expression":{"id":11373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11368,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11366,"src":"27612:10:49","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11371,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11363,"src":"27632:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11370,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27625:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int104_$","typeString":"type(int104)"},"typeName":{"id":11369,"name":"int104","nodeType":"ElementaryTypeName","src":"27625:6:49","typeDescriptions":{}}},"id":11372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27625:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"src":"27612:26:49","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"id":11374,"nodeType":"ExpressionStatement","src":"27612:26:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11375,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11366,"src":"27652:10:49","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11376,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11363,"src":"27666:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27652:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11384,"nodeType":"IfStatement","src":"27648:98:49","trueBody":{"id":11383,"nodeType":"Block","src":"27673:73:49","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":11379,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27724:3:49","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":11380,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11363,"src":"27729:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11378,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"27694:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11381,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27694:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11382,"nodeType":"RevertStatement","src":"27687:48:49"}]}}]},"documentation":{"id":11361,"nodeType":"StructuredDocumentation","src":"27211:312:49","text":" @dev Returns the downcasted int104 from int256, reverting on\n overflow (when the input is less than smallest int104 or\n greater than largest int104).\n Counterpart to Solidity's `int104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":11386,"implemented":true,"kind":"function","modifiers":[],"name":"toInt104","nameLocation":"27537:8:49","nodeType":"FunctionDefinition","parameters":{"id":11364,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11363,"mutability":"mutable","name":"value","nameLocation":"27553:5:49","nodeType":"VariableDeclaration","scope":11386,"src":"27546:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11362,"name":"int256","nodeType":"ElementaryTypeName","src":"27546:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"27545:14:49"},"returnParameters":{"id":11367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11366,"mutability":"mutable","name":"downcasted","nameLocation":"27590:10:49","nodeType":"VariableDeclaration","scope":11386,"src":"27583:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"},"typeName":{"id":11365,"name":"int104","nodeType":"ElementaryTypeName","src":"27583:6:49","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"visibility":"internal"}],"src":"27582:19:49"},"scope":11729,"src":"27528:224:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11411,"nodeType":"Block","src":"28142:148:49","statements":[{"expression":{"id":11399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11394,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11392,"src":"28152:10:49","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11397,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11389,"src":"28171:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11396,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28165:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int96_$","typeString":"type(int96)"},"typeName":{"id":11395,"name":"int96","nodeType":"ElementaryTypeName","src":"28165:5:49","typeDescriptions":{}}},"id":11398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28165:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"src":"28152:25:49","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"id":11400,"nodeType":"ExpressionStatement","src":"28152:25:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11401,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11392,"src":"28191:10:49","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11402,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11389,"src":"28205:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28191:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11410,"nodeType":"IfStatement","src":"28187:97:49","trueBody":{"id":11409,"nodeType":"Block","src":"28212:72:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":11405,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28263:2:49","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":11406,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11389,"src":"28267:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11404,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"28233:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28233:40:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11408,"nodeType":"RevertStatement","src":"28226:47:49"}]}}]},"documentation":{"id":11387,"nodeType":"StructuredDocumentation","src":"27758:307:49","text":" @dev Returns the downcasted int96 from int256, reverting on\n overflow (when the input is less than smallest int96 or\n greater than largest int96).\n Counterpart to Solidity's `int96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":11412,"implemented":true,"kind":"function","modifiers":[],"name":"toInt96","nameLocation":"28079:7:49","nodeType":"FunctionDefinition","parameters":{"id":11390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11389,"mutability":"mutable","name":"value","nameLocation":"28094:5:49","nodeType":"VariableDeclaration","scope":11412,"src":"28087:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11388,"name":"int256","nodeType":"ElementaryTypeName","src":"28087:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28086:14:49"},"returnParameters":{"id":11393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11392,"mutability":"mutable","name":"downcasted","nameLocation":"28130:10:49","nodeType":"VariableDeclaration","scope":11412,"src":"28124:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"},"typeName":{"id":11391,"name":"int96","nodeType":"ElementaryTypeName","src":"28124:5:49","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"visibility":"internal"}],"src":"28123:18:49"},"scope":11729,"src":"28070:220:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11437,"nodeType":"Block","src":"28680:148:49","statements":[{"expression":{"id":11425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11420,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11418,"src":"28690:10:49","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11423,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11415,"src":"28709:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11422,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28703:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int88_$","typeString":"type(int88)"},"typeName":{"id":11421,"name":"int88","nodeType":"ElementaryTypeName","src":"28703:5:49","typeDescriptions":{}}},"id":11424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28703:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"src":"28690:25:49","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"id":11426,"nodeType":"ExpressionStatement","src":"28690:25:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11427,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11418,"src":"28729:10:49","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11428,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11415,"src":"28743:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28729:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11436,"nodeType":"IfStatement","src":"28725:97:49","trueBody":{"id":11435,"nodeType":"Block","src":"28750:72:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":11431,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28801:2:49","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":11432,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11415,"src":"28805:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11430,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"28771:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28771:40:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11434,"nodeType":"RevertStatement","src":"28764:47:49"}]}}]},"documentation":{"id":11413,"nodeType":"StructuredDocumentation","src":"28296:307:49","text":" @dev Returns the downcasted int88 from int256, reverting on\n overflow (when the input is less than smallest int88 or\n greater than largest int88).\n Counterpart to Solidity's `int88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":11438,"implemented":true,"kind":"function","modifiers":[],"name":"toInt88","nameLocation":"28617:7:49","nodeType":"FunctionDefinition","parameters":{"id":11416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11415,"mutability":"mutable","name":"value","nameLocation":"28632:5:49","nodeType":"VariableDeclaration","scope":11438,"src":"28625:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11414,"name":"int256","nodeType":"ElementaryTypeName","src":"28625:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28624:14:49"},"returnParameters":{"id":11419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11418,"mutability":"mutable","name":"downcasted","nameLocation":"28668:10:49","nodeType":"VariableDeclaration","scope":11438,"src":"28662:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"},"typeName":{"id":11417,"name":"int88","nodeType":"ElementaryTypeName","src":"28662:5:49","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"visibility":"internal"}],"src":"28661:18:49"},"scope":11729,"src":"28608:220:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11463,"nodeType":"Block","src":"29218:148:49","statements":[{"expression":{"id":11451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11446,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11444,"src":"29228:10:49","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11449,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11441,"src":"29247:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11448,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29241:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int80_$","typeString":"type(int80)"},"typeName":{"id":11447,"name":"int80","nodeType":"ElementaryTypeName","src":"29241:5:49","typeDescriptions":{}}},"id":11450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29241:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"src":"29228:25:49","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"id":11452,"nodeType":"ExpressionStatement","src":"29228:25:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11453,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11444,"src":"29267:10:49","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11454,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11441,"src":"29281:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29267:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11462,"nodeType":"IfStatement","src":"29263:97:49","trueBody":{"id":11461,"nodeType":"Block","src":"29288:72:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":11457,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29339:2:49","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":11458,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11441,"src":"29343:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11456,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"29309:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29309:40:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11460,"nodeType":"RevertStatement","src":"29302:47:49"}]}}]},"documentation":{"id":11439,"nodeType":"StructuredDocumentation","src":"28834:307:49","text":" @dev Returns the downcasted int80 from int256, reverting on\n overflow (when the input is less than smallest int80 or\n greater than largest int80).\n Counterpart to Solidity's `int80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":11464,"implemented":true,"kind":"function","modifiers":[],"name":"toInt80","nameLocation":"29155:7:49","nodeType":"FunctionDefinition","parameters":{"id":11442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11441,"mutability":"mutable","name":"value","nameLocation":"29170:5:49","nodeType":"VariableDeclaration","scope":11464,"src":"29163:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11440,"name":"int256","nodeType":"ElementaryTypeName","src":"29163:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29162:14:49"},"returnParameters":{"id":11445,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11444,"mutability":"mutable","name":"downcasted","nameLocation":"29206:10:49","nodeType":"VariableDeclaration","scope":11464,"src":"29200:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"},"typeName":{"id":11443,"name":"int80","nodeType":"ElementaryTypeName","src":"29200:5:49","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"visibility":"internal"}],"src":"29199:18:49"},"scope":11729,"src":"29146:220:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11489,"nodeType":"Block","src":"29756:148:49","statements":[{"expression":{"id":11477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11472,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11470,"src":"29766:10:49","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11475,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11467,"src":"29785:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11474,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29779:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int72_$","typeString":"type(int72)"},"typeName":{"id":11473,"name":"int72","nodeType":"ElementaryTypeName","src":"29779:5:49","typeDescriptions":{}}},"id":11476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29779:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"src":"29766:25:49","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"id":11478,"nodeType":"ExpressionStatement","src":"29766:25:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11479,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11470,"src":"29805:10:49","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11480,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11467,"src":"29819:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29805:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11488,"nodeType":"IfStatement","src":"29801:97:49","trueBody":{"id":11487,"nodeType":"Block","src":"29826:72:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":11483,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29877:2:49","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":11484,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11467,"src":"29881:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11482,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"29847:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29847:40:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11486,"nodeType":"RevertStatement","src":"29840:47:49"}]}}]},"documentation":{"id":11465,"nodeType":"StructuredDocumentation","src":"29372:307:49","text":" @dev Returns the downcasted int72 from int256, reverting on\n overflow (when the input is less than smallest int72 or\n greater than largest int72).\n Counterpart to Solidity's `int72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":11490,"implemented":true,"kind":"function","modifiers":[],"name":"toInt72","nameLocation":"29693:7:49","nodeType":"FunctionDefinition","parameters":{"id":11468,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11467,"mutability":"mutable","name":"value","nameLocation":"29708:5:49","nodeType":"VariableDeclaration","scope":11490,"src":"29701:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11466,"name":"int256","nodeType":"ElementaryTypeName","src":"29701:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29700:14:49"},"returnParameters":{"id":11471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11470,"mutability":"mutable","name":"downcasted","nameLocation":"29744:10:49","nodeType":"VariableDeclaration","scope":11490,"src":"29738:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"},"typeName":{"id":11469,"name":"int72","nodeType":"ElementaryTypeName","src":"29738:5:49","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"visibility":"internal"}],"src":"29737:18:49"},"scope":11729,"src":"29684:220:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11515,"nodeType":"Block","src":"30294:148:49","statements":[{"expression":{"id":11503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11498,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11496,"src":"30304:10:49","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11501,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11493,"src":"30323:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11500,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30317:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"},"typeName":{"id":11499,"name":"int64","nodeType":"ElementaryTypeName","src":"30317:5:49","typeDescriptions":{}}},"id":11502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30317:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"src":"30304:25:49","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"id":11504,"nodeType":"ExpressionStatement","src":"30304:25:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11505,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11496,"src":"30343:10:49","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11506,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11493,"src":"30357:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30343:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11514,"nodeType":"IfStatement","src":"30339:97:49","trueBody":{"id":11513,"nodeType":"Block","src":"30364:72:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":11509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30415:2:49","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":11510,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11493,"src":"30419:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11508,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"30385:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30385:40:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11512,"nodeType":"RevertStatement","src":"30378:47:49"}]}}]},"documentation":{"id":11491,"nodeType":"StructuredDocumentation","src":"29910:307:49","text":" @dev Returns the downcasted int64 from int256, reverting on\n overflow (when the input is less than smallest int64 or\n greater than largest int64).\n Counterpart to Solidity's `int64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":11516,"implemented":true,"kind":"function","modifiers":[],"name":"toInt64","nameLocation":"30231:7:49","nodeType":"FunctionDefinition","parameters":{"id":11494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11493,"mutability":"mutable","name":"value","nameLocation":"30246:5:49","nodeType":"VariableDeclaration","scope":11516,"src":"30239:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11492,"name":"int256","nodeType":"ElementaryTypeName","src":"30239:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30238:14:49"},"returnParameters":{"id":11497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11496,"mutability":"mutable","name":"downcasted","nameLocation":"30282:10:49","nodeType":"VariableDeclaration","scope":11516,"src":"30276:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"},"typeName":{"id":11495,"name":"int64","nodeType":"ElementaryTypeName","src":"30276:5:49","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"visibility":"internal"}],"src":"30275:18:49"},"scope":11729,"src":"30222:220:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11541,"nodeType":"Block","src":"30832:148:49","statements":[{"expression":{"id":11529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11524,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11522,"src":"30842:10:49","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11527,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11519,"src":"30861:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11526,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30855:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int56_$","typeString":"type(int56)"},"typeName":{"id":11525,"name":"int56","nodeType":"ElementaryTypeName","src":"30855:5:49","typeDescriptions":{}}},"id":11528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30855:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"src":"30842:25:49","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"id":11530,"nodeType":"ExpressionStatement","src":"30842:25:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11531,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11522,"src":"30881:10:49","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11532,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11519,"src":"30895:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30881:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11540,"nodeType":"IfStatement","src":"30877:97:49","trueBody":{"id":11539,"nodeType":"Block","src":"30902:72:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":11535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30953:2:49","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":11536,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11519,"src":"30957:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11534,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"30923:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30923:40:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11538,"nodeType":"RevertStatement","src":"30916:47:49"}]}}]},"documentation":{"id":11517,"nodeType":"StructuredDocumentation","src":"30448:307:49","text":" @dev Returns the downcasted int56 from int256, reverting on\n overflow (when the input is less than smallest int56 or\n greater than largest int56).\n Counterpart to Solidity's `int56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":11542,"implemented":true,"kind":"function","modifiers":[],"name":"toInt56","nameLocation":"30769:7:49","nodeType":"FunctionDefinition","parameters":{"id":11520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11519,"mutability":"mutable","name":"value","nameLocation":"30784:5:49","nodeType":"VariableDeclaration","scope":11542,"src":"30777:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11518,"name":"int256","nodeType":"ElementaryTypeName","src":"30777:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30776:14:49"},"returnParameters":{"id":11523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11522,"mutability":"mutable","name":"downcasted","nameLocation":"30820:10:49","nodeType":"VariableDeclaration","scope":11542,"src":"30814:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"},"typeName":{"id":11521,"name":"int56","nodeType":"ElementaryTypeName","src":"30814:5:49","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"visibility":"internal"}],"src":"30813:18:49"},"scope":11729,"src":"30760:220:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11567,"nodeType":"Block","src":"31370:148:49","statements":[{"expression":{"id":11555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11550,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"31380:10:49","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11553,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11545,"src":"31399:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11552,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31393:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int48_$","typeString":"type(int48)"},"typeName":{"id":11551,"name":"int48","nodeType":"ElementaryTypeName","src":"31393:5:49","typeDescriptions":{}}},"id":11554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31393:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"src":"31380:25:49","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"id":11556,"nodeType":"ExpressionStatement","src":"31380:25:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11557,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"31419:10:49","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11558,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11545,"src":"31433:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31419:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11566,"nodeType":"IfStatement","src":"31415:97:49","trueBody":{"id":11565,"nodeType":"Block","src":"31440:72:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":11561,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31491:2:49","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":11562,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11545,"src":"31495:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11560,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"31461:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31461:40:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11564,"nodeType":"RevertStatement","src":"31454:47:49"}]}}]},"documentation":{"id":11543,"nodeType":"StructuredDocumentation","src":"30986:307:49","text":" @dev Returns the downcasted int48 from int256, reverting on\n overflow (when the input is less than smallest int48 or\n greater than largest int48).\n Counterpart to Solidity's `int48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":11568,"implemented":true,"kind":"function","modifiers":[],"name":"toInt48","nameLocation":"31307:7:49","nodeType":"FunctionDefinition","parameters":{"id":11546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11545,"mutability":"mutable","name":"value","nameLocation":"31322:5:49","nodeType":"VariableDeclaration","scope":11568,"src":"31315:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11544,"name":"int256","nodeType":"ElementaryTypeName","src":"31315:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31314:14:49"},"returnParameters":{"id":11549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11548,"mutability":"mutable","name":"downcasted","nameLocation":"31358:10:49","nodeType":"VariableDeclaration","scope":11568,"src":"31352:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"},"typeName":{"id":11547,"name":"int48","nodeType":"ElementaryTypeName","src":"31352:5:49","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"visibility":"internal"}],"src":"31351:18:49"},"scope":11729,"src":"31298:220:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11593,"nodeType":"Block","src":"31908:148:49","statements":[{"expression":{"id":11581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11576,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11574,"src":"31918:10:49","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11579,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11571,"src":"31937:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11578,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31931:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int40_$","typeString":"type(int40)"},"typeName":{"id":11577,"name":"int40","nodeType":"ElementaryTypeName","src":"31931:5:49","typeDescriptions":{}}},"id":11580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31931:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"src":"31918:25:49","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"id":11582,"nodeType":"ExpressionStatement","src":"31918:25:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11583,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11574,"src":"31957:10:49","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11584,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11571,"src":"31971:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31957:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11592,"nodeType":"IfStatement","src":"31953:97:49","trueBody":{"id":11591,"nodeType":"Block","src":"31978:72:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":11587,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32029:2:49","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":11588,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11571,"src":"32033:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11586,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"31999:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31999:40:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11590,"nodeType":"RevertStatement","src":"31992:47:49"}]}}]},"documentation":{"id":11569,"nodeType":"StructuredDocumentation","src":"31524:307:49","text":" @dev Returns the downcasted int40 from int256, reverting on\n overflow (when the input is less than smallest int40 or\n greater than largest int40).\n Counterpart to Solidity's `int40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":11594,"implemented":true,"kind":"function","modifiers":[],"name":"toInt40","nameLocation":"31845:7:49","nodeType":"FunctionDefinition","parameters":{"id":11572,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11571,"mutability":"mutable","name":"value","nameLocation":"31860:5:49","nodeType":"VariableDeclaration","scope":11594,"src":"31853:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11570,"name":"int256","nodeType":"ElementaryTypeName","src":"31853:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31852:14:49"},"returnParameters":{"id":11575,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11574,"mutability":"mutable","name":"downcasted","nameLocation":"31896:10:49","nodeType":"VariableDeclaration","scope":11594,"src":"31890:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"},"typeName":{"id":11573,"name":"int40","nodeType":"ElementaryTypeName","src":"31890:5:49","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"visibility":"internal"}],"src":"31889:18:49"},"scope":11729,"src":"31836:220:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11619,"nodeType":"Block","src":"32446:148:49","statements":[{"expression":{"id":11607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11602,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11600,"src":"32456:10:49","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11605,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11597,"src":"32475:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11604,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32469:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"},"typeName":{"id":11603,"name":"int32","nodeType":"ElementaryTypeName","src":"32469:5:49","typeDescriptions":{}}},"id":11606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32469:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"src":"32456:25:49","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"id":11608,"nodeType":"ExpressionStatement","src":"32456:25:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11609,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11600,"src":"32495:10:49","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11610,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11597,"src":"32509:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"32495:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11618,"nodeType":"IfStatement","src":"32491:97:49","trueBody":{"id":11617,"nodeType":"Block","src":"32516:72:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":11613,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32567:2:49","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":11614,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11597,"src":"32571:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11612,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"32537:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32537:40:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11616,"nodeType":"RevertStatement","src":"32530:47:49"}]}}]},"documentation":{"id":11595,"nodeType":"StructuredDocumentation","src":"32062:307:49","text":" @dev Returns the downcasted int32 from int256, reverting on\n overflow (when the input is less than smallest int32 or\n greater than largest int32).\n Counterpart to Solidity's `int32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":11620,"implemented":true,"kind":"function","modifiers":[],"name":"toInt32","nameLocation":"32383:7:49","nodeType":"FunctionDefinition","parameters":{"id":11598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11597,"mutability":"mutable","name":"value","nameLocation":"32398:5:49","nodeType":"VariableDeclaration","scope":11620,"src":"32391:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11596,"name":"int256","nodeType":"ElementaryTypeName","src":"32391:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32390:14:49"},"returnParameters":{"id":11601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11600,"mutability":"mutable","name":"downcasted","nameLocation":"32434:10:49","nodeType":"VariableDeclaration","scope":11620,"src":"32428:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"},"typeName":{"id":11599,"name":"int32","nodeType":"ElementaryTypeName","src":"32428:5:49","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"visibility":"internal"}],"src":"32427:18:49"},"scope":11729,"src":"32374:220:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11645,"nodeType":"Block","src":"32984:148:49","statements":[{"expression":{"id":11633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11628,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11626,"src":"32994:10:49","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11631,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11623,"src":"33013:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11630,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33007:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int24_$","typeString":"type(int24)"},"typeName":{"id":11629,"name":"int24","nodeType":"ElementaryTypeName","src":"33007:5:49","typeDescriptions":{}}},"id":11632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33007:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"src":"32994:25:49","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"id":11634,"nodeType":"ExpressionStatement","src":"32994:25:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11635,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11626,"src":"33033:10:49","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11636,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11623,"src":"33047:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33033:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11644,"nodeType":"IfStatement","src":"33029:97:49","trueBody":{"id":11643,"nodeType":"Block","src":"33054:72:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":11639,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33105:2:49","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":11640,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11623,"src":"33109:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11638,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"33075:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33075:40:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11642,"nodeType":"RevertStatement","src":"33068:47:49"}]}}]},"documentation":{"id":11621,"nodeType":"StructuredDocumentation","src":"32600:307:49","text":" @dev Returns the downcasted int24 from int256, reverting on\n overflow (when the input is less than smallest int24 or\n greater than largest int24).\n Counterpart to Solidity's `int24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":11646,"implemented":true,"kind":"function","modifiers":[],"name":"toInt24","nameLocation":"32921:7:49","nodeType":"FunctionDefinition","parameters":{"id":11624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11623,"mutability":"mutable","name":"value","nameLocation":"32936:5:49","nodeType":"VariableDeclaration","scope":11646,"src":"32929:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11622,"name":"int256","nodeType":"ElementaryTypeName","src":"32929:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32928:14:49"},"returnParameters":{"id":11627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11626,"mutability":"mutable","name":"downcasted","nameLocation":"32972:10:49","nodeType":"VariableDeclaration","scope":11646,"src":"32966:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"},"typeName":{"id":11625,"name":"int24","nodeType":"ElementaryTypeName","src":"32966:5:49","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"visibility":"internal"}],"src":"32965:18:49"},"scope":11729,"src":"32912:220:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11671,"nodeType":"Block","src":"33522:148:49","statements":[{"expression":{"id":11659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11654,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11652,"src":"33532:10:49","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11657,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11649,"src":"33551:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11656,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33545:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"},"typeName":{"id":11655,"name":"int16","nodeType":"ElementaryTypeName","src":"33545:5:49","typeDescriptions":{}}},"id":11658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33545:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"src":"33532:25:49","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"id":11660,"nodeType":"ExpressionStatement","src":"33532:25:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11661,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11652,"src":"33571:10:49","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11662,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11649,"src":"33585:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33571:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11670,"nodeType":"IfStatement","src":"33567:97:49","trueBody":{"id":11669,"nodeType":"Block","src":"33592:72:49","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":11665,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33643:2:49","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":11666,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11649,"src":"33647:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11664,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"33613:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11667,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33613:40:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11668,"nodeType":"RevertStatement","src":"33606:47:49"}]}}]},"documentation":{"id":11647,"nodeType":"StructuredDocumentation","src":"33138:307:49","text":" @dev Returns the downcasted int16 from int256, reverting on\n overflow (when the input is less than smallest int16 or\n greater than largest int16).\n Counterpart to Solidity's `int16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":11672,"implemented":true,"kind":"function","modifiers":[],"name":"toInt16","nameLocation":"33459:7:49","nodeType":"FunctionDefinition","parameters":{"id":11650,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11649,"mutability":"mutable","name":"value","nameLocation":"33474:5:49","nodeType":"VariableDeclaration","scope":11672,"src":"33467:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11648,"name":"int256","nodeType":"ElementaryTypeName","src":"33467:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"33466:14:49"},"returnParameters":{"id":11653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11652,"mutability":"mutable","name":"downcasted","nameLocation":"33510:10:49","nodeType":"VariableDeclaration","scope":11672,"src":"33504:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"},"typeName":{"id":11651,"name":"int16","nodeType":"ElementaryTypeName","src":"33504:5:49","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"visibility":"internal"}],"src":"33503:18:49"},"scope":11729,"src":"33450:220:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11697,"nodeType":"Block","src":"34053:146:49","statements":[{"expression":{"id":11685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11680,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11678,"src":"34063:10:49","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11683,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11675,"src":"34081:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11682,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34076:4:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"},"typeName":{"id":11681,"name":"int8","nodeType":"ElementaryTypeName","src":"34076:4:49","typeDescriptions":{}}},"id":11684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34076:11:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"src":"34063:24:49","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"id":11686,"nodeType":"ExpressionStatement","src":"34063:24:49"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11687,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11678,"src":"34101:10:49","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11688,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11675,"src":"34115:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"34101:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11696,"nodeType":"IfStatement","src":"34097:96:49","trueBody":{"id":11695,"nodeType":"Block","src":"34122:71:49","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":11691,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34173:1:49","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":11692,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11675,"src":"34176:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11690,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"34143:29:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34143:39:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11694,"nodeType":"RevertStatement","src":"34136:46:49"}]}}]},"documentation":{"id":11673,"nodeType":"StructuredDocumentation","src":"33676:302:49","text":" @dev Returns the downcasted int8 from int256, reverting on\n overflow (when the input is less than smallest int8 or\n greater than largest int8).\n Counterpart to Solidity's `int8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":11698,"implemented":true,"kind":"function","modifiers":[],"name":"toInt8","nameLocation":"33992:6:49","nodeType":"FunctionDefinition","parameters":{"id":11676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11675,"mutability":"mutable","name":"value","nameLocation":"34006:5:49","nodeType":"VariableDeclaration","scope":11698,"src":"33999:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11674,"name":"int256","nodeType":"ElementaryTypeName","src":"33999:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"33998:14:49"},"returnParameters":{"id":11679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11678,"mutability":"mutable","name":"downcasted","nameLocation":"34041:10:49","nodeType":"VariableDeclaration","scope":11698,"src":"34036:15:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"},"typeName":{"id":11677,"name":"int8","nodeType":"ElementaryTypeName","src":"34036:4:49","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"visibility":"internal"}],"src":"34035:17:49"},"scope":11729,"src":"33983:216:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11727,"nodeType":"Block","src":"34439:250:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11706,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11701,"src":"34552:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"expression":{"arguments":[{"id":11711,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34573:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":11710,"name":"int256","nodeType":"ElementaryTypeName","src":"34573:6:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":11709,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"34568:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11712,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34568:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":11713,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"34581:3:49","memberName":"max","nodeType":"MemberAccess","src":"34568:16:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11708,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34560:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":11707,"name":"uint256","nodeType":"ElementaryTypeName","src":"34560:7:49","typeDescriptions":{}}},"id":11714,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34560:25:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34552:33:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11721,"nodeType":"IfStatement","src":"34548:105:49","trueBody":{"id":11720,"nodeType":"Block","src":"34587:66:49","statements":[{"errorCall":{"arguments":[{"id":11717,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11701,"src":"34636:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11716,"name":"SafeCastOverflowedUintToInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10001,"src":"34608:27:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":11718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34608:34:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11719,"nodeType":"RevertStatement","src":"34601:41:49"}]}},{"expression":{"arguments":[{"id":11724,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11701,"src":"34676:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11723,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34669:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":11722,"name":"int256","nodeType":"ElementaryTypeName","src":"34669:6:49","typeDescriptions":{}}},"id":11725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34669:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":11705,"id":11726,"nodeType":"Return","src":"34662:20:49"}]},"documentation":{"id":11699,"nodeType":"StructuredDocumentation","src":"34205:165:49","text":" @dev Converts an unsigned uint256 into a signed int256.\n Requirements:\n - input must be less than or equal to maxInt256."},"id":11728,"implemented":true,"kind":"function","modifiers":[],"name":"toInt256","nameLocation":"34384:8:49","nodeType":"FunctionDefinition","parameters":{"id":11702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11701,"mutability":"mutable","name":"value","nameLocation":"34401:5:49","nodeType":"VariableDeclaration","scope":11728,"src":"34393:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11700,"name":"uint256","nodeType":"ElementaryTypeName","src":"34393:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34392:15:49"},"returnParameters":{"id":11705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11704,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11728,"src":"34431:6:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11703,"name":"int256","nodeType":"ElementaryTypeName","src":"34431:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"34430:8:49"},"scope":11729,"src":"34375:314:49","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":11730,"src":"764:33927:49","usedErrors":[9984,9989,9996,10001],"usedEvents":[]}],"src":"192:34500:49"},"id":49},"@openzeppelin/contracts/utils/math/SignedMath.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/SignedMath.sol","exportedSymbols":{"SignedMath":[11834]},"id":11835,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":11731,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"109:24:50"},{"abstract":false,"baseContracts":[],"canonicalName":"SignedMath","contractDependencies":[],"contractKind":"library","documentation":{"id":11732,"nodeType":"StructuredDocumentation","src":"135:80:50","text":" @dev Standard signed math utilities missing in the Solidity language."},"fullyImplemented":true,"id":11834,"linearizedBaseContracts":[11834],"name":"SignedMath","nameLocation":"224:10:50","nodeType":"ContractDefinition","nodes":[{"body":{"id":11749,"nodeType":"Block","src":"376:37:50","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11742,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11735,"src":"393:1:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":11743,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11737,"src":"397:1:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"393:5:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":11746,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11737,"src":"405:1:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":11747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"393:13:50","trueExpression":{"id":11745,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11735,"src":"401:1:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":11741,"id":11748,"nodeType":"Return","src":"386:20:50"}]},"documentation":{"id":11733,"nodeType":"StructuredDocumentation","src":"241:66:50","text":" @dev Returns the largest of two signed numbers."},"id":11750,"implemented":true,"kind":"function","modifiers":[],"name":"max","nameLocation":"321:3:50","nodeType":"FunctionDefinition","parameters":{"id":11738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11735,"mutability":"mutable","name":"a","nameLocation":"332:1:50","nodeType":"VariableDeclaration","scope":11750,"src":"325:8:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11734,"name":"int256","nodeType":"ElementaryTypeName","src":"325:6:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":11737,"mutability":"mutable","name":"b","nameLocation":"342:1:50","nodeType":"VariableDeclaration","scope":11750,"src":"335:8:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11736,"name":"int256","nodeType":"ElementaryTypeName","src":"335:6:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"324:20:50"},"returnParameters":{"id":11741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11740,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11750,"src":"368:6:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11739,"name":"int256","nodeType":"ElementaryTypeName","src":"368:6:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"367:8:50"},"scope":11834,"src":"312:101:50","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11767,"nodeType":"Block","src":"555:37:50","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11760,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11753,"src":"572:1:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11761,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11755,"src":"576:1:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"572:5:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":11764,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11755,"src":"584:1:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":11765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"572:13:50","trueExpression":{"id":11763,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11753,"src":"580:1:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":11759,"id":11766,"nodeType":"Return","src":"565:20:50"}]},"documentation":{"id":11751,"nodeType":"StructuredDocumentation","src":"419:67:50","text":" @dev Returns the smallest of two signed numbers."},"id":11768,"implemented":true,"kind":"function","modifiers":[],"name":"min","nameLocation":"500:3:50","nodeType":"FunctionDefinition","parameters":{"id":11756,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11753,"mutability":"mutable","name":"a","nameLocation":"511:1:50","nodeType":"VariableDeclaration","scope":11768,"src":"504:8:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11752,"name":"int256","nodeType":"ElementaryTypeName","src":"504:6:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":11755,"mutability":"mutable","name":"b","nameLocation":"521:1:50","nodeType":"VariableDeclaration","scope":11768,"src":"514:8:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11754,"name":"int256","nodeType":"ElementaryTypeName","src":"514:6:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"503:20:50"},"returnParameters":{"id":11759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11758,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11768,"src":"547:6:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11757,"name":"int256","nodeType":"ElementaryTypeName","src":"547:6:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"546:8:50"},"scope":11834,"src":"491:101:50","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11811,"nodeType":"Block","src":"797:162:50","statements":[{"assignments":[11779],"declarations":[{"constant":false,"id":11779,"mutability":"mutable","name":"x","nameLocation":"866:1:50","nodeType":"VariableDeclaration","scope":11811,"src":"859:8:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11778,"name":"int256","nodeType":"ElementaryTypeName","src":"859:6:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":11792,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11780,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11771,"src":"871:1:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11781,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11773,"src":"875:1:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"871:5:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":11783,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"870:7:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11784,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11771,"src":"882:1:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":11785,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11773,"src":"886:1:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"882:5:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":11787,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"881:7:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":11788,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"892:1:50","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"881:12:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":11790,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"880:14:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"870:24:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"859:35:50"},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11793,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11779,"src":"911:1:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":11798,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11779,"src":"931:1:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11797,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"923:7:50","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":11796,"name":"uint256","nodeType":"ElementaryTypeName","src":"923:7:50","typeDescriptions":{}}},"id":11799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"923:10:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":11800,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"937:3:50","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"923:17:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11795,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"916:6:50","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":11794,"name":"int256","nodeType":"ElementaryTypeName","src":"916:6:50","typeDescriptions":{}}},"id":11802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"916:25:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11803,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11771,"src":"945:1:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":11804,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11773,"src":"949:1:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"945:5:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":11806,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"944:7:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"916:35:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":11808,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"915:37:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"911:41:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":11777,"id":11810,"nodeType":"Return","src":"904:48:50"}]},"documentation":{"id":11769,"nodeType":"StructuredDocumentation","src":"598:126:50","text":" @dev Returns the average of two signed numbers without overflow.\n The result is rounded towards zero."},"id":11812,"implemented":true,"kind":"function","modifiers":[],"name":"average","nameLocation":"738:7:50","nodeType":"FunctionDefinition","parameters":{"id":11774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11771,"mutability":"mutable","name":"a","nameLocation":"753:1:50","nodeType":"VariableDeclaration","scope":11812,"src":"746:8:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11770,"name":"int256","nodeType":"ElementaryTypeName","src":"746:6:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":11773,"mutability":"mutable","name":"b","nameLocation":"763:1:50","nodeType":"VariableDeclaration","scope":11812,"src":"756:8:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11772,"name":"int256","nodeType":"ElementaryTypeName","src":"756:6:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"745:20:50"},"returnParameters":{"id":11777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11776,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11812,"src":"789:6:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11775,"name":"int256","nodeType":"ElementaryTypeName","src":"789:6:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"788:8:50"},"scope":11834,"src":"729:230:50","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11832,"nodeType":"Block","src":"1103:158:50","statements":[{"id":11831,"nodeType":"UncheckedBlock","src":"1113:142:50","statements":[{"expression":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11822,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11815,"src":"1228:1:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"30","id":11823,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1233:1:50","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1228:6:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":11827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"1241:2:50","subExpression":{"id":11826,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11815,"src":"1242:1:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":11828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"1228:15:50","trueExpression":{"id":11825,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11815,"src":"1237:1:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11821,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1220:7:50","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":11820,"name":"uint256","nodeType":"ElementaryTypeName","src":"1220:7:50","typeDescriptions":{}}},"id":11829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1220:24:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11819,"id":11830,"nodeType":"Return","src":"1213:31:50"}]}]},"documentation":{"id":11813,"nodeType":"StructuredDocumentation","src":"965:78:50","text":" @dev Returns the absolute unsigned value of a signed value."},"id":11833,"implemented":true,"kind":"function","modifiers":[],"name":"abs","nameLocation":"1057:3:50","nodeType":"FunctionDefinition","parameters":{"id":11816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11815,"mutability":"mutable","name":"n","nameLocation":"1068:1:50","nodeType":"VariableDeclaration","scope":11833,"src":"1061:8:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11814,"name":"int256","nodeType":"ElementaryTypeName","src":"1061:6:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1060:10:50"},"returnParameters":{"id":11819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11818,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11833,"src":"1094:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11817,"name":"uint256","nodeType":"ElementaryTypeName","src":"1094:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1093:9:50"},"scope":11834,"src":"1048:213:50","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":11835,"src":"216:1047:50","usedErrors":[],"usedEvents":[]}],"src":"109:1155:50"},"id":50},"contracts/BalancerPoolToken.sol":{"ast":{"absolutePath":"contracts/BalancerPoolToken.sol","exportedSymbols":{"BalancerPoolToken":[12247],"ECDSA":[8583],"EIP712":[8810],"ERC165":[8908],"IERC20":[6980],"IERC20Metadata":[7006],"IERC20Permit":[7042],"IRateProvider":[24],"IVault":[713],"Nonces":[7653],"VaultGuard":[17276]},"id":12248,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":11836,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:51"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","id":11838,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12248,"sourceUnit":7007,"src":"72:99:51","symbolAliases":[{"foreign":{"id":11837,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7006,"src":"81:14:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","id":11840,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12248,"sourceUnit":7043,"src":"172:95:51","symbolAliases":[{"foreign":{"id":11839,"name":"IERC20Permit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7042,"src":"181:12:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/introspection/ERC165.sol","file":"@openzeppelin/contracts/utils/introspection/ERC165.sol","id":11842,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12248,"sourceUnit":8909,"src":"268:80:51","symbolAliases":[{"foreign":{"id":11841,"name":"ERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8908,"src":"277:6:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/cryptography/EIP712.sol","file":"@openzeppelin/contracts/utils/cryptography/EIP712.sol","id":11844,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12248,"sourceUnit":8811,"src":"349:79:51","symbolAliases":[{"foreign":{"id":11843,"name":"EIP712","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8810,"src":"358:6:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/cryptography/ECDSA.sol","file":"@openzeppelin/contracts/utils/cryptography/ECDSA.sol","id":11846,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12248,"sourceUnit":8584,"src":"429:77:51","symbolAliases":[{"foreign":{"id":11845,"name":"ECDSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8583,"src":"438:5:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":11848,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12248,"sourceUnit":6981,"src":"507:72:51","symbolAliases":[{"foreign":{"id":11847,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"516:6:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Nonces.sol","file":"@openzeppelin/contracts/utils/Nonces.sol","id":11850,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12248,"sourceUnit":7654,"src":"580:66:51","symbolAliases":[{"foreign":{"id":11849,"name":"Nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7653,"src":"589:6:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","id":11852,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12248,"sourceUnit":25,"src":"648:112:51","symbolAliases":[{"foreign":{"id":11851,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24,"src":"657:13:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":11854,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12248,"sourceUnit":714,"src":"761:81:51","symbolAliases":[{"foreign":{"id":11853,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":713,"src":"770:6:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/VaultGuard.sol","file":"./VaultGuard.sol","id":11856,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12248,"sourceUnit":17277,"src":"844:46:51","symbolAliases":[{"foreign":{"id":11855,"name":"VaultGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17276,"src":"853:10:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":11858,"name":"IERC20","nameLocations":["1299:6:51"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"1299:6:51"},"id":11859,"nodeType":"InheritanceSpecifier","src":"1299:6:51"},{"baseName":{"id":11860,"name":"IERC20Metadata","nameLocations":["1307:14:51"],"nodeType":"IdentifierPath","referencedDeclaration":7006,"src":"1307:14:51"},"id":11861,"nodeType":"InheritanceSpecifier","src":"1307:14:51"},{"baseName":{"id":11862,"name":"IERC20Permit","nameLocations":["1323:12:51"],"nodeType":"IdentifierPath","referencedDeclaration":7042,"src":"1323:12:51"},"id":11863,"nodeType":"InheritanceSpecifier","src":"1323:12:51"},{"baseName":{"id":11864,"name":"IRateProvider","nameLocations":["1337:13:51"],"nodeType":"IdentifierPath","referencedDeclaration":24,"src":"1337:13:51"},"id":11865,"nodeType":"InheritanceSpecifier","src":"1337:13:51"},{"baseName":{"id":11866,"name":"EIP712","nameLocations":["1352:6:51"],"nodeType":"IdentifierPath","referencedDeclaration":8810,"src":"1352:6:51"},"id":11867,"nodeType":"InheritanceSpecifier","src":"1352:6:51"},{"baseName":{"id":11868,"name":"Nonces","nameLocations":["1360:6:51"],"nodeType":"IdentifierPath","referencedDeclaration":7653,"src":"1360:6:51"},"id":11869,"nodeType":"InheritanceSpecifier","src":"1360:6:51"},{"baseName":{"id":11870,"name":"ERC165","nameLocations":["1368:6:51"],"nodeType":"IdentifierPath","referencedDeclaration":8908,"src":"1368:6:51"},"id":11871,"nodeType":"InheritanceSpecifier","src":"1368:6:51"},{"baseName":{"id":11872,"name":"VaultGuard","nameLocations":["1376:10:51"],"nodeType":"IdentifierPath","referencedDeclaration":17276,"src":"1376:10:51"},"id":11873,"nodeType":"InheritanceSpecifier","src":"1376:10:51"}],"canonicalName":"BalancerPoolToken","contractDependencies":[],"contractKind":"contract","documentation":{"id":11857,"nodeType":"StructuredDocumentation","src":"892:376:51","text":" @notice `BalancerPoolToken` is a fully ERC20-compatible token to be used as the base contract for Balancer Pools,\n with all the data and implementation delegated to the ERC20Multitoken contract.\n @dev Implementation of the ERC-20 Permit extension allowing approvals to be made via signatures, as defined in\n https://eips.ethereum.org/EIPS/eip-2612[ERC-2612]."},"fullyImplemented":true,"id":12247,"linearizedBaseContracts":[12247,17276,8908,8920,7653,8810,6729,24,7042,7006,6980],"name":"BalancerPoolToken","nameLocation":"1278:17:51","nodeType":"ContractDefinition","nodes":[{"constant":true,"functionSelector":"30adf81f","id":11878,"mutability":"constant","name":"PERMIT_TYPEHASH","nameLocation":"1417:15:51","nodeType":"VariableDeclaration","scope":12247,"src":"1393:145:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11874,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1393:7:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529","id":11876,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1453:84:51","typeDescriptions":{"typeIdentifier":"t_stringliteral_6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9","typeString":"literal_string \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\""},"value":"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9","typeString":"literal_string \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\""}],"id":11875,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1443:9:51","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":11877,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1443:95:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"documentation":{"id":11879,"nodeType":"StructuredDocumentation","src":"1545:135:51","text":" @notice Operation failed due to an expired permit signature.\n @param deadline The permit deadline that expired"},"errorSelector":"62791302","id":11883,"name":"ERC2612ExpiredSignature","nameLocation":"1691:23:51","nodeType":"ErrorDefinition","parameters":{"id":11882,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11881,"mutability":"mutable","name":"deadline","nameLocation":"1723:8:51","nodeType":"VariableDeclaration","scope":11883,"src":"1715:16:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11880,"name":"uint256","nodeType":"ElementaryTypeName","src":"1715:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1714:18:51"},"src":"1685:48:51"},{"documentation":{"id":11884,"nodeType":"StructuredDocumentation","src":"1739:237:51","text":" @notice Operation failed due to a non-matching signature.\n @param signer The address corresponding to the signature provider\n @param owner The address of the owner (expected value of the signature provider)"},"errorSelector":"4b800e46","id":11890,"name":"ERC2612InvalidSigner","nameLocation":"1987:20:51","nodeType":"ErrorDefinition","parameters":{"id":11889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11886,"mutability":"mutable","name":"signer","nameLocation":"2016:6:51","nodeType":"VariableDeclaration","scope":11890,"src":"2008:14:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11885,"name":"address","nodeType":"ElementaryTypeName","src":"2008:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11888,"mutability":"mutable","name":"owner","nameLocation":"2032:5:51","nodeType":"VariableDeclaration","scope":11890,"src":"2024:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11887,"name":"address","nodeType":"ElementaryTypeName","src":"2024:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2007:31:51"},"src":"1981:58:51"},{"constant":false,"id":11892,"mutability":"mutable","name":"_bptName","nameLocation":"2094:8:51","nodeType":"VariableDeclaration","scope":12247,"src":"2079:23:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":11891,"name":"string","nodeType":"ElementaryTypeName","src":"2079:6:51","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":11894,"mutability":"mutable","name":"_bptSymbol","nameLocation":"2123:10:51","nodeType":"VariableDeclaration","scope":12247,"src":"2108:25:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":11893,"name":"string","nodeType":"ElementaryTypeName","src":"2108:6:51","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":11919,"nodeType":"Block","src":"2255:67:51","statements":[{"expression":{"id":11913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11911,"name":"_bptName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11892,"src":"2265:8:51","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11912,"name":"bptName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11899,"src":"2276:7:51","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2265:18:51","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":11914,"nodeType":"ExpressionStatement","src":"2265:18:51"},{"expression":{"id":11917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11915,"name":"_bptSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11894,"src":"2293:10:51","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11916,"name":"bptSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11901,"src":"2306:9:51","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2293:22:51","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":11918,"nodeType":"ExpressionStatement","src":"2293:22:51"}]},"id":11920,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":11904,"name":"bptName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11899,"src":"2222:7:51","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"31","id":11905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2231:3:51","typeDescriptions":{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""},"value":"1"}],"id":11906,"kind":"baseConstructorSpecifier","modifierName":{"id":11903,"name":"EIP712","nameLocations":["2215:6:51"],"nodeType":"IdentifierPath","referencedDeclaration":8810,"src":"2215:6:51"},"nodeType":"ModifierInvocation","src":"2215:20:51"},{"arguments":[{"id":11908,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11897,"src":"2247:6:51","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}}],"id":11909,"kind":"baseConstructorSpecifier","modifierName":{"id":11907,"name":"VaultGuard","nameLocations":["2236:10:51"],"nodeType":"IdentifierPath","referencedDeclaration":17276,"src":"2236:10:51"},"nodeType":"ModifierInvocation","src":"2236:18:51"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":11902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11897,"mutability":"mutable","name":"vault_","nameLocation":"2159:6:51","nodeType":"VariableDeclaration","scope":11920,"src":"2152:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"},"typeName":{"id":11896,"nodeType":"UserDefinedTypeName","pathNode":{"id":11895,"name":"IVault","nameLocations":["2152:6:51"],"nodeType":"IdentifierPath","referencedDeclaration":713,"src":"2152:6:51"},"referencedDeclaration":713,"src":"2152:6:51","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":11899,"mutability":"mutable","name":"bptName","nameLocation":"2181:7:51","nodeType":"VariableDeclaration","scope":11920,"src":"2167:21:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11898,"name":"string","nodeType":"ElementaryTypeName","src":"2167:6:51","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":11901,"mutability":"mutable","name":"bptSymbol","nameLocation":"2204:9:51","nodeType":"VariableDeclaration","scope":11920,"src":"2190:23:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11900,"name":"string","nodeType":"ElementaryTypeName","src":"2190:6:51","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2151:63:51"},"returnParameters":{"id":11910,"nodeType":"ParameterList","parameters":[],"src":"2255:0:51"},"scope":12247,"src":"2140:182:51","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[6993],"body":{"id":11928,"nodeType":"Block","src":"2417:32:51","statements":[{"expression":{"id":11926,"name":"_bptName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11892,"src":"2434:8:51","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":11925,"id":11927,"nodeType":"Return","src":"2427:15:51"}]},"documentation":{"id":11921,"nodeType":"StructuredDocumentation","src":"2328:30:51","text":"@inheritdoc IERC20Metadata"},"functionSelector":"06fdde03","id":11929,"implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"2372:4:51","nodeType":"FunctionDefinition","parameters":{"id":11922,"nodeType":"ParameterList","parameters":[],"src":"2376:2:51"},"returnParameters":{"id":11925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11924,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11929,"src":"2402:13:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11923,"name":"string","nodeType":"ElementaryTypeName","src":"2402:6:51","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2401:15:51"},"scope":12247,"src":"2363:86:51","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[6999],"body":{"id":11937,"nodeType":"Block","src":"2546:34:51","statements":[{"expression":{"id":11935,"name":"_bptSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11894,"src":"2563:10:51","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":11934,"id":11936,"nodeType":"Return","src":"2556:17:51"}]},"documentation":{"id":11930,"nodeType":"StructuredDocumentation","src":"2455:30:51","text":"@inheritdoc IERC20Metadata"},"functionSelector":"95d89b41","id":11938,"implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"2499:6:51","nodeType":"FunctionDefinition","parameters":{"id":11931,"nodeType":"ParameterList","parameters":[],"src":"2505:2:51"},"returnParameters":{"id":11934,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11933,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11938,"src":"2531:13:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11932,"name":"string","nodeType":"ElementaryTypeName","src":"2531:6:51","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2530:15:51"},"scope":12247,"src":"2490:90:51","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[7005],"body":{"id":11946,"nodeType":"Block","src":"2671:65:51","statements":[{"expression":{"hexValue":"3138","id":11944,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2727:2:51","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"functionReturnParameters":11943,"id":11945,"nodeType":"Return","src":"2720:9:51"}]},"documentation":{"id":11939,"nodeType":"StructuredDocumentation","src":"2586:30:51","text":"@inheritdoc IERC20Metadata"},"functionSelector":"313ce567","id":11947,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"2630:8:51","nodeType":"FunctionDefinition","parameters":{"id":11940,"nodeType":"ParameterList","parameters":[],"src":"2638:2:51"},"returnParameters":{"id":11943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11942,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11947,"src":"2664:5:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":11941,"name":"uint8","nodeType":"ElementaryTypeName","src":"2664:5:51","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"2663:7:51"},"scope":12247,"src":"2621:115:51","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[6929],"body":{"id":11961,"nodeType":"Block","src":"2822:57:51","statements":[{"expression":{"arguments":[{"arguments":[{"id":11957,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2866:4:51","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$12247","typeString":"contract BalancerPoolToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerPoolToken_$12247","typeString":"contract BalancerPoolToken"}],"id":11956,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2858:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11955,"name":"address","nodeType":"ElementaryTypeName","src":"2858:7:51","typeDescriptions":{}}},"id":11958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2858:13:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":11953,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17237,"src":"2839:6:51","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}},"id":11954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2846:11:51","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1831,"src":"2839:18:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":11959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2839:33:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11952,"id":11960,"nodeType":"Return","src":"2832:40:51"}]},"documentation":{"id":11948,"nodeType":"StructuredDocumentation","src":"2742:22:51","text":"@inheritdoc IERC20"},"functionSelector":"18160ddd","id":11962,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"2778:11:51","nodeType":"FunctionDefinition","parameters":{"id":11949,"nodeType":"ParameterList","parameters":[],"src":"2789:2:51"},"returnParameters":{"id":11952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11951,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11962,"src":"2813:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11950,"name":"uint256","nodeType":"ElementaryTypeName","src":"2813:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2812:9:51"},"scope":12247,"src":"2769:110:51","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":11970,"nodeType":"Block","src":"2934:30:51","statements":[{"expression":{"id":11968,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17237,"src":"2951:6:51","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}},"functionReturnParameters":11967,"id":11969,"nodeType":"Return","src":"2944:13:51"}]},"functionSelector":"8d928af8","id":11971,"implemented":true,"kind":"function","modifiers":[],"name":"getVault","nameLocation":"2894:8:51","nodeType":"FunctionDefinition","parameters":{"id":11963,"nodeType":"ParameterList","parameters":[],"src":"2902:2:51"},"returnParameters":{"id":11967,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11966,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11971,"src":"2926:6:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"},"typeName":{"id":11965,"nodeType":"UserDefinedTypeName","pathNode":{"id":11964,"name":"IVault","nameLocations":["2926:6:51"],"nodeType":"IdentifierPath","referencedDeclaration":713,"src":"2926:6:51"},"referencedDeclaration":713,"src":"2926:6:51","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}},"visibility":"internal"}],"src":"2925:8:51"},"scope":12247,"src":"2885:79:51","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[6937],"body":{"id":11988,"nodeType":"Block","src":"3065:64:51","statements":[{"expression":{"arguments":[{"arguments":[{"id":11983,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3107:4:51","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$12247","typeString":"contract BalancerPoolToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerPoolToken_$12247","typeString":"contract BalancerPoolToken"}],"id":11982,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3099:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11981,"name":"address","nodeType":"ElementaryTypeName","src":"3099:7:51","typeDescriptions":{}}},"id":11984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3099:13:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11985,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11974,"src":"3114:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":11979,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17237,"src":"3082:6:51","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}},"id":11980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3089:9:51","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1841,"src":"3082:16:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":11986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3082:40:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11978,"id":11987,"nodeType":"Return","src":"3075:47:51"}]},"documentation":{"id":11972,"nodeType":"StructuredDocumentation","src":"2970:22:51","text":"@inheritdoc IERC20"},"functionSelector":"70a08231","id":11989,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"3006:9:51","nodeType":"FunctionDefinition","parameters":{"id":11975,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11974,"mutability":"mutable","name":"account","nameLocation":"3024:7:51","nodeType":"VariableDeclaration","scope":11989,"src":"3016:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11973,"name":"address","nodeType":"ElementaryTypeName","src":"3016:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3015:17:51"},"returnParameters":{"id":11978,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11977,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11989,"src":"3056:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11976,"name":"uint256","nodeType":"ElementaryTypeName","src":"3056:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3055:9:51"},"scope":12247,"src":"2997:132:51","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[6947],"body":{"id":12010,"nodeType":"Block","src":"3232:180:51","statements":[{"expression":{"arguments":[{"expression":{"id":12002,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3361:3:51","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3365:6:51","memberName":"sender","nodeType":"MemberAccess","src":"3361:10:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12004,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11992,"src":"3373:2:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12005,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11994,"src":"3377:6:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11999,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17237,"src":"3345:6:51","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}},"id":12001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3352:8:51","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":2130,"src":"3345:15:51","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":12006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3345:39:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12007,"nodeType":"ExpressionStatement","src":"3345:39:51"},{"expression":{"hexValue":"74727565","id":12008,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3401:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":11998,"id":12009,"nodeType":"Return","src":"3394:11:51"}]},"documentation":{"id":11990,"nodeType":"StructuredDocumentation","src":"3135:22:51","text":"@inheritdoc IERC20"},"functionSelector":"a9059cbb","id":12011,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"3171:8:51","nodeType":"FunctionDefinition","parameters":{"id":11995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11992,"mutability":"mutable","name":"to","nameLocation":"3188:2:51","nodeType":"VariableDeclaration","scope":12011,"src":"3180:10:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11991,"name":"address","nodeType":"ElementaryTypeName","src":"3180:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11994,"mutability":"mutable","name":"amount","nameLocation":"3200:6:51","nodeType":"VariableDeclaration","scope":12011,"src":"3192:14:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11993,"name":"uint256","nodeType":"ElementaryTypeName","src":"3192:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3179:28:51"},"returnParameters":{"id":11998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11997,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12011,"src":"3226:4:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11996,"name":"bool","nodeType":"ElementaryTypeName","src":"3226:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3225:6:51"},"scope":12247,"src":"3162:250:51","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[6957],"body":{"id":12031,"nodeType":"Block","src":"3528:71:51","statements":[{"expression":{"arguments":[{"arguments":[{"id":12025,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3570:4:51","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$12247","typeString":"contract BalancerPoolToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerPoolToken_$12247","typeString":"contract BalancerPoolToken"}],"id":12024,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3562:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12023,"name":"address","nodeType":"ElementaryTypeName","src":"3562:7:51","typeDescriptions":{}}},"id":12026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3562:13:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12027,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12014,"src":"3577:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12028,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12016,"src":"3584:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":12021,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17237,"src":"3545:6:51","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}},"id":12022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3552:9:51","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":1853,"src":"3545:16:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address,address) view external returns (uint256)"}},"id":12029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3545:47:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12020,"id":12030,"nodeType":"Return","src":"3538:54:51"}]},"documentation":{"id":12012,"nodeType":"StructuredDocumentation","src":"3418:22:51","text":"@inheritdoc IERC20"},"functionSelector":"dd62ed3e","id":12032,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"3454:9:51","nodeType":"FunctionDefinition","parameters":{"id":12017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12014,"mutability":"mutable","name":"owner","nameLocation":"3472:5:51","nodeType":"VariableDeclaration","scope":12032,"src":"3464:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12013,"name":"address","nodeType":"ElementaryTypeName","src":"3464:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12016,"mutability":"mutable","name":"spender","nameLocation":"3487:7:51","nodeType":"VariableDeclaration","scope":12032,"src":"3479:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12015,"name":"address","nodeType":"ElementaryTypeName","src":"3479:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3463:32:51"},"returnParameters":{"id":12020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12019,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12032,"src":"3519:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12018,"name":"uint256","nodeType":"ElementaryTypeName","src":"3519:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3518:9:51"},"scope":12247,"src":"3445:154:51","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[6967],"body":{"id":12053,"nodeType":"Block","src":"3706:184:51","statements":[{"expression":{"arguments":[{"expression":{"id":12045,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3834:3:51","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3838:6:51","memberName":"sender","nodeType":"MemberAccess","src":"3834:10:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12047,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12035,"src":"3846:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12048,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12037,"src":"3855:6:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12042,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17237,"src":"3819:6:51","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}},"id":12044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3826:7:51","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1865,"src":"3819:14:51","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":12049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3819:43:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12050,"nodeType":"ExpressionStatement","src":"3819:43:51"},{"expression":{"hexValue":"74727565","id":12051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3879:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":12041,"id":12052,"nodeType":"Return","src":"3872:11:51"}]},"documentation":{"id":12033,"nodeType":"StructuredDocumentation","src":"3605:22:51","text":"@inheritdoc IERC20"},"functionSelector":"095ea7b3","id":12054,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"3641:7:51","nodeType":"FunctionDefinition","parameters":{"id":12038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12035,"mutability":"mutable","name":"spender","nameLocation":"3657:7:51","nodeType":"VariableDeclaration","scope":12054,"src":"3649:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12034,"name":"address","nodeType":"ElementaryTypeName","src":"3649:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12037,"mutability":"mutable","name":"amount","nameLocation":"3674:6:51","nodeType":"VariableDeclaration","scope":12054,"src":"3666:14:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12036,"name":"uint256","nodeType":"ElementaryTypeName","src":"3666:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3648:33:51"},"returnParameters":{"id":12041,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12040,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12054,"src":"3700:4:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12039,"name":"bool","nodeType":"ElementaryTypeName","src":"3700:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3699:6:51"},"scope":12247,"src":"3632:258:51","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[6979],"body":{"id":12078,"nodeType":"Block","src":"4011:190:51","statements":[{"expression":{"arguments":[{"expression":{"id":12069,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4144:3:51","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4148:6:51","memberName":"sender","nodeType":"MemberAccess","src":"4144:10:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12071,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12057,"src":"4156:4:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12072,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12059,"src":"4162:2:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12073,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12061,"src":"4166:6:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12066,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17237,"src":"4124:6:51","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}},"id":12068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4131:12:51","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":2144,"src":"4124:19:51","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,address,uint256) external returns (bool)"}},"id":12074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4124:49:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12075,"nodeType":"ExpressionStatement","src":"4124:49:51"},{"expression":{"hexValue":"74727565","id":12076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4190:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":12065,"id":12077,"nodeType":"Return","src":"4183:11:51"}]},"documentation":{"id":12055,"nodeType":"StructuredDocumentation","src":"3896:22:51","text":"@inheritdoc IERC20"},"functionSelector":"23b872dd","id":12079,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"3932:12:51","nodeType":"FunctionDefinition","parameters":{"id":12062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12057,"mutability":"mutable","name":"from","nameLocation":"3953:4:51","nodeType":"VariableDeclaration","scope":12079,"src":"3945:12:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12056,"name":"address","nodeType":"ElementaryTypeName","src":"3945:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12059,"mutability":"mutable","name":"to","nameLocation":"3967:2:51","nodeType":"VariableDeclaration","scope":12079,"src":"3959:10:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12058,"name":"address","nodeType":"ElementaryTypeName","src":"3959:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12061,"mutability":"mutable","name":"amount","nameLocation":"3979:6:51","nodeType":"VariableDeclaration","scope":12079,"src":"3971:14:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12060,"name":"uint256","nodeType":"ElementaryTypeName","src":"3971:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3944:42:51"},"returnParameters":{"id":12065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12064,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12079,"src":"4005:4:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12063,"name":"bool","nodeType":"ElementaryTypeName","src":"4005:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4004:6:51"},"scope":12247,"src":"3923:278:51","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":12097,"nodeType":"Block","src":"4927:48:51","statements":[{"eventCall":{"arguments":[{"id":12092,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12082,"src":"4951:4:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12093,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12084,"src":"4957:2:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12094,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12086,"src":"4961:6:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12091,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6914,"src":"4942:8:51","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":12095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4942:26:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12096,"nodeType":"EmitStatement","src":"4937:31:51"}]},"documentation":{"id":12080,"nodeType":"StructuredDocumentation","src":"4754:85:51","text":"@dev Emit the Transfer event. This function can only be called by the MultiToken."},"functionSelector":"23de6651","id":12098,"implemented":true,"kind":"function","modifiers":[{"id":12089,"kind":"modifierInvocation","modifierName":{"id":12088,"name":"onlyVault","nameLocations":["4917:9:51"],"nodeType":"IdentifierPath","referencedDeclaration":17255,"src":"4917:9:51"},"nodeType":"ModifierInvocation","src":"4917:9:51"}],"name":"emitTransfer","nameLocation":"4853:12:51","nodeType":"FunctionDefinition","parameters":{"id":12087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12082,"mutability":"mutable","name":"from","nameLocation":"4874:4:51","nodeType":"VariableDeclaration","scope":12098,"src":"4866:12:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12081,"name":"address","nodeType":"ElementaryTypeName","src":"4866:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12084,"mutability":"mutable","name":"to","nameLocation":"4888:2:51","nodeType":"VariableDeclaration","scope":12098,"src":"4880:10:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12083,"name":"address","nodeType":"ElementaryTypeName","src":"4880:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12086,"mutability":"mutable","name":"amount","nameLocation":"4900:6:51","nodeType":"VariableDeclaration","scope":12098,"src":"4892:14:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12085,"name":"uint256","nodeType":"ElementaryTypeName","src":"4892:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4865:42:51"},"returnParameters":{"id":12090,"nodeType":"ParameterList","parameters":[],"src":"4927:0:51"},"scope":12247,"src":"4844:131:51","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":12116,"nodeType":"Block","src":"5160:54:51","statements":[{"eventCall":{"arguments":[{"id":12111,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12101,"src":"5184:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12112,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12103,"src":"5191:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12113,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12105,"src":"5200:6:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12110,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6923,"src":"5175:8:51","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":12114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5175:32:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12115,"nodeType":"EmitStatement","src":"5170:37:51"}]},"documentation":{"id":12099,"nodeType":"StructuredDocumentation","src":"4981:85:51","text":"@dev Emit the Approval event. This function can only be called by the MultiToken."},"functionSelector":"5687f2b8","id":12117,"implemented":true,"kind":"function","modifiers":[{"id":12108,"kind":"modifierInvocation","modifierName":{"id":12107,"name":"onlyVault","nameLocations":["5150:9:51"],"nodeType":"IdentifierPath","referencedDeclaration":17255,"src":"5150:9:51"},"nodeType":"ModifierInvocation","src":"5150:9:51"}],"name":"emitApproval","nameLocation":"5080:12:51","nodeType":"FunctionDefinition","parameters":{"id":12106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12101,"mutability":"mutable","name":"owner","nameLocation":"5101:5:51","nodeType":"VariableDeclaration","scope":12117,"src":"5093:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12100,"name":"address","nodeType":"ElementaryTypeName","src":"5093:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12103,"mutability":"mutable","name":"spender","nameLocation":"5116:7:51","nodeType":"VariableDeclaration","scope":12117,"src":"5108:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12102,"name":"address","nodeType":"ElementaryTypeName","src":"5108:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12105,"mutability":"mutable","name":"amount","nameLocation":"5133:6:51","nodeType":"VariableDeclaration","scope":12117,"src":"5125:14:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12104,"name":"uint256","nodeType":"ElementaryTypeName","src":"5125:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5092:48:51"},"returnParameters":{"id":12109,"nodeType":"ParameterList","parameters":[],"src":"5160:0:51"},"scope":12247,"src":"5071:143:51","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[7027],"body":{"id":12194,"nodeType":"Block","src":"5442:545:51","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12134,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"5510:5:51","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":12135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5516:9:51","memberName":"timestamp","nodeType":"MemberAccess","src":"5510:15:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":12136,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12125,"src":"5528:8:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5510:26:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12143,"nodeType":"IfStatement","src":"5506:97:51","trueBody":{"id":12142,"nodeType":"Block","src":"5538:65:51","statements":[{"errorCall":{"arguments":[{"id":12139,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12125,"src":"5583:8:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12138,"name":"ERC2612ExpiredSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11883,"src":"5559:23:51","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":12140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5559:33:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12141,"nodeType":"RevertStatement","src":"5552:40:51"}]}},{"assignments":[12145],"declarations":[{"constant":false,"id":12145,"mutability":"mutable","name":"structHash","nameLocation":"5621:10:51","nodeType":"VariableDeclaration","scope":12194,"src":"5613:18:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12144,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5613:7:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12159,"initialValue":{"arguments":[{"arguments":[{"id":12149,"name":"PERMIT_TYPEHASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11878,"src":"5655:15:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":12150,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12119,"src":"5672:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12151,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12121,"src":"5679:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12152,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12123,"src":"5688:6:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":12154,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12119,"src":"5706:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12153,"name":"_useNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7627,"src":"5696:9:51","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$","typeString":"function (address) returns (uint256)"}},"id":12155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5696:16:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12156,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12125,"src":"5714:8:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12147,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5644:3:51","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":12148,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5648:6:51","memberName":"encode","nodeType":"MemberAccess","src":"5644:10:51","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":12157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5644:79:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":12146,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5634:9:51","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":12158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5634:90:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5613:111:51"},{"assignments":[12161],"declarations":[{"constant":false,"id":12161,"mutability":"mutable","name":"hash","nameLocation":"5743:4:51","nodeType":"VariableDeclaration","scope":12194,"src":"5735:12:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12160,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5735:7:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12165,"initialValue":{"arguments":[{"id":12163,"name":"structHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12145,"src":"5767:10:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12162,"name":"_hashTypedDataV4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8743,"src":"5750:16:51","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":12164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5750:28:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5735:43:51"},{"assignments":[12167],"declarations":[{"constant":false,"id":12167,"mutability":"mutable","name":"signer","nameLocation":"5797:6:51","nodeType":"VariableDeclaration","scope":12194,"src":"5789:14:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12166,"name":"address","nodeType":"ElementaryTypeName","src":"5789:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":12175,"initialValue":{"arguments":[{"id":12170,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12161,"src":"5820:4:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":12171,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12127,"src":"5826:1:51","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":12172,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12129,"src":"5829:1:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":12173,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12131,"src":"5832:1:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":12168,"name":"ECDSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8583,"src":"5806:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ECDSA_$8583_$","typeString":"type(library ECDSA)"}},"id":12169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5812:7:51","memberName":"recover","nodeType":"MemberAccess","referencedDeclaration":8533,"src":"5806:13:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address)"}},"id":12174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5806:28:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5789:45:51"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":12178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12176,"name":"signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12167,"src":"5848:6:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12177,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12119,"src":"5858:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5848:15:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12185,"nodeType":"IfStatement","src":"5844:88:51","trueBody":{"id":12184,"nodeType":"Block","src":"5865:67:51","statements":[{"errorCall":{"arguments":[{"id":12180,"name":"signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12167,"src":"5907:6:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12181,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12119,"src":"5915:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":12179,"name":"ERC2612InvalidSigner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11890,"src":"5886:20:51","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address) pure returns (error)"}},"id":12182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5886:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12183,"nodeType":"RevertStatement","src":"5879:42:51"}]}},{"expression":{"arguments":[{"id":12189,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12119,"src":"5957:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12190,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12121,"src":"5964:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12191,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12123,"src":"5973:6:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12186,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17237,"src":"5942:6:51","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}},"id":12188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5949:7:51","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1865,"src":"5942:14:51","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":12192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5942:38:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12193,"nodeType":"ExpressionStatement","src":"5942:38:51"}]},"functionSelector":"d505accf","id":12195,"implemented":true,"kind":"function","modifiers":[],"name":"permit","nameLocation":"5261:6:51","nodeType":"FunctionDefinition","parameters":{"id":12132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12119,"mutability":"mutable","name":"owner","nameLocation":"5285:5:51","nodeType":"VariableDeclaration","scope":12195,"src":"5277:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12118,"name":"address","nodeType":"ElementaryTypeName","src":"5277:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12121,"mutability":"mutable","name":"spender","nameLocation":"5308:7:51","nodeType":"VariableDeclaration","scope":12195,"src":"5300:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12120,"name":"address","nodeType":"ElementaryTypeName","src":"5300:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12123,"mutability":"mutable","name":"amount","nameLocation":"5333:6:51","nodeType":"VariableDeclaration","scope":12195,"src":"5325:14:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12122,"name":"uint256","nodeType":"ElementaryTypeName","src":"5325:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12125,"mutability":"mutable","name":"deadline","nameLocation":"5357:8:51","nodeType":"VariableDeclaration","scope":12195,"src":"5349:16:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12124,"name":"uint256","nodeType":"ElementaryTypeName","src":"5349:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12127,"mutability":"mutable","name":"v","nameLocation":"5381:1:51","nodeType":"VariableDeclaration","scope":12195,"src":"5375:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":12126,"name":"uint8","nodeType":"ElementaryTypeName","src":"5375:5:51","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":12129,"mutability":"mutable","name":"r","nameLocation":"5400:1:51","nodeType":"VariableDeclaration","scope":12195,"src":"5392:9:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12128,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5392:7:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12131,"mutability":"mutable","name":"s","nameLocation":"5419:1:51","nodeType":"VariableDeclaration","scope":12195,"src":"5411:9:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12130,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5411:7:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5267:159:51"},"returnParameters":{"id":12133,"nodeType":"ParameterList","parameters":[],"src":"5442:0:51"},"scope":12247,"src":"5252:735:51","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[7035,7612],"body":{"id":12210,"nodeType":"Block","src":"6125:43:51","statements":[{"expression":{"arguments":[{"id":12207,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12197,"src":"6155:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":12205,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"6142:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_BalancerPoolToken_$12247_$","typeString":"type(contract super BalancerPoolToken)"}},"id":12206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6148:6:51","memberName":"nonces","nodeType":"MemberAccess","referencedDeclaration":7612,"src":"6142:12:51","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":12208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6142:19:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12204,"id":12209,"nodeType":"Return","src":"6135:26:51"}]},"functionSelector":"7ecebe00","id":12211,"implemented":true,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"6034:6:51","nodeType":"FunctionDefinition","overrides":{"id":12201,"nodeType":"OverrideSpecifier","overrides":[{"id":12199,"name":"IERC20Permit","nameLocations":["6085:12:51"],"nodeType":"IdentifierPath","referencedDeclaration":7042,"src":"6085:12:51"},{"id":12200,"name":"Nonces","nameLocations":["6099:6:51"],"nodeType":"IdentifierPath","referencedDeclaration":7653,"src":"6099:6:51"}],"src":"6076:30:51"},"parameters":{"id":12198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12197,"mutability":"mutable","name":"owner","nameLocation":"6049:5:51","nodeType":"VariableDeclaration","scope":12211,"src":"6041:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12196,"name":"address","nodeType":"ElementaryTypeName","src":"6041:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6040:15:51"},"returnParameters":{"id":12204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12203,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12211,"src":"6116:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12202,"name":"uint256","nodeType":"ElementaryTypeName","src":"6116:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6115:9:51"},"scope":12247,"src":"6025:143:51","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":12220,"nodeType":"Block","src":"6319:38:51","statements":[{"expression":{"arguments":[{"expression":{"id":12216,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6339:3:51","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6343:6:51","memberName":"sender","nodeType":"MemberAccess","src":"6339:10:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12215,"name":"_useNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7627,"src":"6329:9:51","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$","typeString":"function (address) returns (uint256)"}},"id":12218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6329:21:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12219,"nodeType":"ExpressionStatement","src":"6329:21:51"}]},"documentation":{"id":12212,"nodeType":"StructuredDocumentation","src":"6174:105:51","text":"@notice Increment the sender's nonce to revoke any currently granted (but not yet executed) `permit`."},"functionSelector":"627cdcb9","id":12221,"implemented":true,"kind":"function","modifiers":[],"name":"incrementNonce","nameLocation":"6293:14:51","nodeType":"FunctionDefinition","parameters":{"id":12213,"nodeType":"ParameterList","parameters":[],"src":"6307:2:51"},"returnParameters":{"id":12214,"nodeType":"ParameterList","parameters":[],"src":"6319:0:51"},"scope":12247,"src":"6284:73:51","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[7041],"body":{"id":12229,"nodeType":"Block","src":"6516:44:51","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12226,"name":"_domainSeparatorV4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8706,"src":"6533:18:51","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":12227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6533:20:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":12225,"id":12228,"nodeType":"Return","src":"6526:27:51"}]},"functionSelector":"3644e515","id":12230,"implemented":true,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"6457:16:51","nodeType":"FunctionDefinition","parameters":{"id":12222,"nodeType":"ParameterList","parameters":[],"src":"6473:2:51"},"returnParameters":{"id":12225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12224,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12230,"src":"6507:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12223,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6507:7:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6506:9:51"},"scope":12247,"src":"6448:112:51","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[23],"body":{"id":12245,"nodeType":"Block","src":"6956:60:51","statements":[{"expression":{"arguments":[{"arguments":[{"id":12241,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7003:4:51","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$12247","typeString":"contract BalancerPoolToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerPoolToken_$12247","typeString":"contract BalancerPoolToken"}],"id":12240,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6995:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12239,"name":"address","nodeType":"ElementaryTypeName","src":"6995:7:51","typeDescriptions":{}}},"id":12242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6995:13:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12236,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11971,"src":"6973:8:51","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$713_$","typeString":"function () view returns (contract IVault)"}},"id":12237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6973:10:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}},"id":12238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6984:10:51","memberName":"getBptRate","nodeType":"MemberAccess","referencedDeclaration":1823,"src":"6973:21:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":12243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6973:36:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12235,"id":12244,"nodeType":"Return","src":"6966:43:51"}]},"documentation":{"id":12231,"nodeType":"StructuredDocumentation","src":"6566:328:51","text":" @notice Get the BPT rate, which is defined as: pool invariant/total supply.\n @dev The VaultExtension contract defines a default implementation (`getBptRate`) to calculate the rate\n of any given pool, which should be sufficient in nearly all cases.\n @return rate Rate of the pool's BPT"},"functionSelector":"679aefce","id":12246,"implemented":true,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"6908:7:51","nodeType":"FunctionDefinition","parameters":{"id":12232,"nodeType":"ParameterList","parameters":[],"src":"6915:2:51"},"returnParameters":{"id":12235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12234,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12246,"src":"6947:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12233,"name":"uint256","nodeType":"ElementaryTypeName","src":"6947:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6946:9:51"},"scope":12247,"src":"6899:117:51","stateMutability":"view","virtual":true,"visibility":"public"}],"scope":12248,"src":"1269:5749:51","usedErrors":[1242,7595,7667,7669,8246,8251,8256,11883,11890],"usedEvents":[6709,6914,6923]}],"src":"46:6973:51"},"id":51},"contracts/BasePoolMath.sol":{"ast":{"absolutePath":"contracts/BasePoolMath.sol","exportedSymbols":{"BasePoolMath":[12981],"FixedPoint":[4766],"IBasePool":[90],"Rounding":[2334]},"id":12982,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":12249,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:52"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","id":12251,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12982,"sourceUnit":91,"src":"72:87:52","symbolAliases":[{"foreign":{"id":12250,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90,"src":"81:9:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":12253,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12982,"sourceUnit":2474,"src":"160:87:52","symbolAliases":[{"foreign":{"id":12252,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"169:8:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":12255,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12982,"sourceUnit":4767,"src":"249:92:52","symbolAliases":[{"foreign":{"id":12254,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4766,"src":"258:10:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"BasePoolMath","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":12981,"linearizedBaseContracts":[12981],"name":"BasePoolMath","nameLocation":"351:12:52","nodeType":"ContractDefinition","nodes":[{"global":false,"id":12258,"libraryName":{"id":12256,"name":"FixedPoint","nameLocations":["376:10:52"],"nodeType":"IdentifierPath","referencedDeclaration":4766,"src":"376:10:52"},"nodeType":"UsingForDirective","src":"370:29:52","typeName":{"id":12257,"name":"uint256","nodeType":"ElementaryTypeName","src":"391:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"documentation":{"id":12259,"nodeType":"StructuredDocumentation","src":"405:390:52","text":" @notice An add liquidity operation increased the invariant above the limit.\n @dev This value is determined by each pool type, and depends on the specific math used to compute\n the price curve.\n @param invariantRatio The ratio of the new invariant (after an operation) to the old\n @param maxInvariantRatio The maximum allowed invariant ratio"},"errorSelector":"3e8960dc","id":12265,"name":"InvariantRatioAboveMax","nameLocation":"806:22:52","nodeType":"ErrorDefinition","parameters":{"id":12264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12261,"mutability":"mutable","name":"invariantRatio","nameLocation":"837:14:52","nodeType":"VariableDeclaration","scope":12265,"src":"829:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12260,"name":"uint256","nodeType":"ElementaryTypeName","src":"829:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12263,"mutability":"mutable","name":"maxInvariantRatio","nameLocation":"861:17:52","nodeType":"VariableDeclaration","scope":12265,"src":"853:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12262,"name":"uint256","nodeType":"ElementaryTypeName","src":"853:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"828:51:52"},"src":"800:80:52"},{"documentation":{"id":12266,"nodeType":"StructuredDocumentation","src":"886:392:52","text":" @notice A remove liquidity operation decreased the invariant below the limit.\n @dev This value is determined by each pool type, and depends on the specific math used to compute\n the price curve.\n @param invariantRatio The ratio of the new invariant (after an operation) to the old\n @param minInvariantRatio The minimum allowed invariant ratio"},"errorSelector":"e31c95be","id":12272,"name":"InvariantRatioBelowMin","nameLocation":"1289:22:52","nodeType":"ErrorDefinition","parameters":{"id":12271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12268,"mutability":"mutable","name":"invariantRatio","nameLocation":"1320:14:52","nodeType":"VariableDeclaration","scope":12272,"src":"1312:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12267,"name":"uint256","nodeType":"ElementaryTypeName","src":"1312:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12270,"mutability":"mutable","name":"minInvariantRatio","nameLocation":"1344:17:52","nodeType":"VariableDeclaration","scope":12272,"src":"1336:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12269,"name":"uint256","nodeType":"ElementaryTypeName","src":"1336:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1311:51:52"},"src":"1283:80:52"},{"body":{"id":12320,"nodeType":"Block","src":"2612:1172:52","statements":[{"expression":{"id":12293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12286,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12284,"src":"3456:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":12290,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12276,"src":"3482:8:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3491:6:52","memberName":"length","nodeType":"MemberAccess","src":"3482:15:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12289,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3468:13:52","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":12287,"name":"uint256","nodeType":"ElementaryTypeName","src":"3472:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12288,"nodeType":"ArrayTypeName","src":"3472:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":12292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3468:30:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"3456:42:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12294,"nodeType":"ExpressionStatement","src":"3456:42:52"},{"body":{"id":12318,"nodeType":"Block","src":"3554:224:52","statements":[{"expression":{"id":12316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12306,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12284,"src":"3702:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12308,"indexExpression":{"id":12307,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12296,"src":"3712:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3702:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12313,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12280,"src":"3738:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12314,"name":"bptTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12278,"src":"3752:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":12309,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12276,"src":"3717:8:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12311,"indexExpression":{"id":12310,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12296,"src":"3726:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3717:11:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3729:8:52","memberName":"mulDivUp","nodeType":"MemberAccess","referencedDeclaration":4592,"src":"3717:20:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":12315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3717:50:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3702:65:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12317,"nodeType":"ExpressionStatement","src":"3702:65:52"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12299,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12296,"src":"3528:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":12300,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12276,"src":"3532:8:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3541:6:52","memberName":"length","nodeType":"MemberAccess","src":"3532:15:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3528:19:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12319,"initializationExpression":{"assignments":[12296],"declarations":[{"constant":false,"id":12296,"mutability":"mutable","name":"i","nameLocation":"3521:1:52","nodeType":"VariableDeclaration","scope":12319,"src":"3513:9:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12295,"name":"uint256","nodeType":"ElementaryTypeName","src":"3513:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12298,"initialValue":{"hexValue":"30","id":12297,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3525:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3513:13:52"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":12304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3549:3:52","subExpression":{"id":12303,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12296,"src":"3551:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12305,"nodeType":"ExpressionStatement","src":"3549:3:52"},"nodeType":"ForStatement","src":"3508:270:52"}]},"documentation":{"id":12273,"nodeType":"StructuredDocumentation","src":"1603:812:52","text":" @notice Computes the proportional amounts of tokens to be deposited into the pool.\n @dev This function computes the amount of each token that needs to be deposited in order to mint a specific\n amount of pool tokens (BPT). It ensures that the amounts of tokens deposited are proportional to the current\n pool balances.\n Calculation: For each token, amountIn = balance * (bptAmountOut / bptTotalSupply).\n Rounding up is used to ensure that the pool is not underfunded.\n @param balances Array of current token balances in the pool\n @param bptTotalSupply Total supply of the pool tokens (BPT)\n @param bptAmountOut The amount of pool tokens that need to be minted\n @return amountsIn Array of amounts for each token to be deposited"},"id":12321,"implemented":true,"kind":"function","modifiers":[],"name":"computeProportionalAmountsIn","nameLocation":"2429:28:52","nodeType":"FunctionDefinition","parameters":{"id":12281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12276,"mutability":"mutable","name":"balances","nameLocation":"2484:8:52","nodeType":"VariableDeclaration","scope":12321,"src":"2467:25:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12274,"name":"uint256","nodeType":"ElementaryTypeName","src":"2467:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12275,"nodeType":"ArrayTypeName","src":"2467:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12278,"mutability":"mutable","name":"bptTotalSupply","nameLocation":"2510:14:52","nodeType":"VariableDeclaration","scope":12321,"src":"2502:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12277,"name":"uint256","nodeType":"ElementaryTypeName","src":"2502:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12280,"mutability":"mutable","name":"bptAmountOut","nameLocation":"2542:12:52","nodeType":"VariableDeclaration","scope":12321,"src":"2534:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12279,"name":"uint256","nodeType":"ElementaryTypeName","src":"2534:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2457:103:52"},"returnParameters":{"id":12285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12284,"mutability":"mutable","name":"amountsIn","nameLocation":"2601:9:52","nodeType":"VariableDeclaration","scope":12321,"src":"2584:26:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12282,"name":"uint256","nodeType":"ElementaryTypeName","src":"2584:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12283,"nodeType":"ArrayTypeName","src":"2584:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2583:28:52"},"scope":12981,"src":"2420:1364:52","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12370,"nodeType":"Block","src":"4812:1251:52","statements":[{"expression":{"id":12342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12335,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12333,"src":"5736:10:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":12339,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12325,"src":"5763:8:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5772:6:52","memberName":"length","nodeType":"MemberAccess","src":"5763:15:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12338,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"5749:13:52","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":12336,"name":"uint256","nodeType":"ElementaryTypeName","src":"5753:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12337,"nodeType":"ArrayTypeName","src":"5753:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":12341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5749:30:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"5736:43:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12343,"nodeType":"ExpressionStatement","src":"5736:43:52"},{"body":{"id":12368,"nodeType":"Block","src":"5835:222:52","statements":[{"expression":{"id":12366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12355,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12333,"src":"5986:10:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12357,"indexExpression":{"id":12356,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12345,"src":"5997:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5986:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":12358,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12325,"src":"6003:8:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12360,"indexExpression":{"id":12359,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12345,"src":"6012:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6003:11:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":12361,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12329,"src":"6017:11:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6003:25:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12363,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6002:27:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":12364,"name":"bptTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12327,"src":"6032:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6002:44:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5986:60:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12367,"nodeType":"ExpressionStatement","src":"5986:60:52"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12348,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12345,"src":"5809:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":12349,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12325,"src":"5813:8:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5822:6:52","memberName":"length","nodeType":"MemberAccess","src":"5813:15:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5809:19:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12369,"initializationExpression":{"assignments":[12345],"declarations":[{"constant":false,"id":12345,"mutability":"mutable","name":"i","nameLocation":"5802:1:52","nodeType":"VariableDeclaration","scope":12369,"src":"5794:9:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12344,"name":"uint256","nodeType":"ElementaryTypeName","src":"5794:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12347,"initialValue":{"hexValue":"30","id":12346,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5806:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5794:13:52"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":12353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5830:3:52","subExpression":{"id":12352,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12345,"src":"5832:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12354,"nodeType":"ExpressionStatement","src":"5830:3:52"},"nodeType":"ForStatement","src":"5789:268:52"}]},"documentation":{"id":12322,"nodeType":"StructuredDocumentation","src":"3790:824:52","text":" @notice Computes the proportional amounts of tokens to be withdrawn from the pool.\n @dev This function computes the amount of each token that will be withdrawn in exchange for burning\n a specific amount of pool tokens (BPT). It ensures that the amounts of tokens withdrawn are proportional\n to the current pool balances.\n Calculation: For each token, amountOut = balance * (bptAmountIn / bptTotalSupply).\n Rounding down is used to prevent withdrawing more than the pool can afford.\n @param balances Array of current token balances in the pool\n @param bptTotalSupply Total supply of the pool tokens (BPT)\n @param bptAmountIn The amount of pool tokens that will be burned\n @return amountsOut Array of amounts for each token to be withdrawn"},"id":12371,"implemented":true,"kind":"function","modifiers":[],"name":"computeProportionalAmountsOut","nameLocation":"4628:29:52","nodeType":"FunctionDefinition","parameters":{"id":12330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12325,"mutability":"mutable","name":"balances","nameLocation":"4684:8:52","nodeType":"VariableDeclaration","scope":12371,"src":"4667:25:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12323,"name":"uint256","nodeType":"ElementaryTypeName","src":"4667:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12324,"nodeType":"ArrayTypeName","src":"4667:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12327,"mutability":"mutable","name":"bptTotalSupply","nameLocation":"4710:14:52","nodeType":"VariableDeclaration","scope":12371,"src":"4702:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12326,"name":"uint256","nodeType":"ElementaryTypeName","src":"4702:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12329,"mutability":"mutable","name":"bptAmountIn","nameLocation":"4742:11:52","nodeType":"VariableDeclaration","scope":12371,"src":"4734:19:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12328,"name":"uint256","nodeType":"ElementaryTypeName","src":"4734:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4657:102:52"},"returnParameters":{"id":12334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12333,"mutability":"mutable","name":"amountsOut","nameLocation":"4800:10:52","nodeType":"VariableDeclaration","scope":12371,"src":"4783:27:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12331,"name":"uint256","nodeType":"ElementaryTypeName","src":"4783:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12332,"nodeType":"ArrayTypeName","src":"4783:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4782:29:52"},"scope":12981,"src":"4619:1444:52","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12551,"nodeType":"Block","src":"7540:4654:52","statements":[{"assignments":[12394],"declarations":[{"constant":false,"id":12394,"mutability":"mutable","name":"numTokens","nameLocation":"8343:9:52","nodeType":"VariableDeclaration","scope":12551,"src":"8335:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12393,"name":"uint256","nodeType":"ElementaryTypeName","src":"8335:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12397,"initialValue":{"expression":{"id":12395,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12375,"src":"8355:15:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8371:6:52","memberName":"length","nodeType":"MemberAccess","src":"8355:22:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8335:42:52"},{"assignments":[12402],"declarations":[{"constant":false,"id":12402,"mutability":"mutable","name":"newBalances","nameLocation":"8484:11:52","nodeType":"VariableDeclaration","scope":12551,"src":"8467:28:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12400,"name":"uint256","nodeType":"ElementaryTypeName","src":"8467:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12401,"nodeType":"ArrayTypeName","src":"8467:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":12408,"initialValue":{"arguments":[{"id":12406,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12394,"src":"8512:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12405,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"8498:13:52","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":12403,"name":"uint256","nodeType":"ElementaryTypeName","src":"8502:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12404,"nodeType":"ArrayTypeName","src":"8502:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":12407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8498:24:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"8467:55:52"},{"expression":{"id":12415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12409,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12391,"src":"8606:14:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12413,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12394,"src":"8637:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12412,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"8623:13:52","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":12410,"name":"uint256","nodeType":"ElementaryTypeName","src":"8627:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12411,"nodeType":"ArrayTypeName","src":"8627:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":12414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8623:24:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"8606:41:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12416,"nodeType":"ExpressionStatement","src":"8606:41:52"},{"body":{"id":12441,"nodeType":"Block","src":"8778:125:52","statements":[{"expression":{"id":12439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12427,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"8792:11:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12429,"indexExpression":{"id":12428,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12418,"src":"8804:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8792:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":12430,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12375,"src":"8809:15:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12432,"indexExpression":{"id":12431,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12418,"src":"8825:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8809:18:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"baseExpression":{"id":12433,"name":"exactAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12378,"src":"8830:12:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12435,"indexExpression":{"id":12434,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12418,"src":"8843:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8830:15:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8809:36:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":12437,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8848:1:52","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8809:40:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8792:57:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12440,"nodeType":"ExpressionStatement","src":"8792:57:52"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12421,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12418,"src":"8758:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":12422,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12394,"src":"8762:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8758:13:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12442,"initializationExpression":{"assignments":[12418],"declarations":[{"constant":false,"id":12418,"mutability":"mutable","name":"i","nameLocation":"8751:1:52","nodeType":"VariableDeclaration","scope":12442,"src":"8743:9:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12417,"name":"uint256","nodeType":"ElementaryTypeName","src":"8743:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12420,"initialValue":{"hexValue":"30","id":12419,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8755:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8743:13:52"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":12425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"8773:3:52","subExpression":{"id":12424,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12418,"src":"8775:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12426,"nodeType":"ExpressionStatement","src":"8773:3:52"},"nodeType":"ForStatement","src":"8738:165:52"},{"assignments":[12444],"declarations":[{"constant":false,"id":12444,"mutability":"mutable","name":"currentInvariant","nameLocation":"9115:16:52","nodeType":"VariableDeclaration","scope":12551,"src":"9107:24:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12443,"name":"uint256","nodeType":"ElementaryTypeName","src":"9107:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12451,"initialValue":{"arguments":[{"id":12447,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12375,"src":"9156:15:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":12448,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"9173:8:52","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2334_$","typeString":"type(enum Rounding)"}},"id":12449,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9182:8:52","memberName":"ROUND_UP","nodeType":"MemberAccess","referencedDeclaration":2332,"src":"9173:17:52","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"expression":{"id":12445,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12385,"src":"9134:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},"id":12446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9139:16:52","memberName":"computeInvariant","nodeType":"MemberAccess","referencedDeclaration":67,"src":"9134:21:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_enum$_Rounding_$2334_$returns$_t_uint256_$","typeString":"function (uint256[] memory,enum Rounding) view external returns (uint256)"}},"id":12450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9134:57:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9107:84:52"},{"assignments":[12453],"declarations":[{"constant":false,"id":12453,"mutability":"mutable","name":"invariantRatio","nameLocation":"9269:14:52","nodeType":"VariableDeclaration","scope":12551,"src":"9261:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12452,"name":"uint256","nodeType":"ElementaryTypeName","src":"9261:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12463,"initialValue":{"arguments":[{"id":12461,"name":"currentInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12444,"src":"9350:16:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":12456,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"9308:11:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":12457,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"9321:8:52","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2334_$","typeString":"type(enum Rounding)"}},"id":12458,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9330:10:52","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":2333,"src":"9321:19:52","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"expression":{"id":12454,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12385,"src":"9286:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},"id":12455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9291:16:52","memberName":"computeInvariant","nodeType":"MemberAccess","referencedDeclaration":67,"src":"9286:21:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_enum$_Rounding_$2334_$returns$_t_uint256_$","typeString":"function (uint256[] memory,enum Rounding) view external returns (uint256)"}},"id":12459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9286:55:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9342:7:52","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4548,"src":"9286:63:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":12462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9286:81:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9261:106:52"},{"expression":{"arguments":[{"id":12465,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12385,"src":"9416:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},{"id":12466,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12453,"src":"9422:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12464,"name":"ensureInvariantRatioBelowMaximumBound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12954,"src":"9378:37:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IBasePool_$90_$_t_uint256_$returns$__$","typeString":"function (contract IBasePool,uint256) view"}},"id":12467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9378:59:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12468,"nodeType":"ExpressionStatement","src":"9378:59:52"},{"body":{"id":12528,"nodeType":"Block","src":"9551:1335:52","statements":[{"assignments":[12480],"declarations":[{"constant":false,"id":12480,"mutability":"mutable","name":"proportionalTokenBalance","nameLocation":"9997:24:52","nodeType":"VariableDeclaration","scope":12528,"src":"9989:32:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12479,"name":"uint256","nodeType":"ElementaryTypeName","src":"9989:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12487,"initialValue":{"arguments":[{"baseExpression":{"id":12483,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12375,"src":"10047:15:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12485,"indexExpression":{"id":12484,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12470,"src":"10063:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10047:18:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12481,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12453,"src":"10024:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10039:7:52","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4511,"src":"10024:22:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":12486,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10024:42:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9989:77:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":12488,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"10084:11:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12490,"indexExpression":{"id":12489,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12470,"src":"10096:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10084:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":12491,"name":"proportionalTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12480,"src":"10101:24:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10084:41:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12527,"nodeType":"IfStatement","src":"10080:796:52","trueBody":{"id":12526,"nodeType":"Block","src":"10127:749:52","statements":[{"assignments":[12494],"declarations":[{"constant":false,"id":12494,"mutability":"mutable","name":"taxableAmount","nameLocation":"10153:13:52","nodeType":"VariableDeclaration","scope":12526,"src":"10145:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12493,"name":"uint256","nodeType":"ElementaryTypeName","src":"10145:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12495,"nodeType":"VariableDeclarationStatement","src":"10145:21:52"},{"id":12504,"nodeType":"UncheckedBlock","src":"10184:108:52","statements":[{"expression":{"id":12502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12496,"name":"taxableAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12494,"src":"10216:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":12497,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"10232:11:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12499,"indexExpression":{"id":12498,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12470,"src":"10244:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10232:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":12500,"name":"proportionalTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12480,"src":"10249:24:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10232:41:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10216:57:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12503,"nodeType":"ExpressionStatement","src":"10216:57:52"}]},{"expression":{"id":12512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12505,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12391,"src":"10354:14:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12507,"indexExpression":{"id":12506,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12470,"src":"10369:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10354:17:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12510,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12382,"src":"10394:17:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12508,"name":"taxableAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12494,"src":"10374:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10388:5:52","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":4528,"src":"10374:19:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":12511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10374:38:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10354:58:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12513,"nodeType":"ExpressionStatement","src":"10354:58:52"},{"expression":{"id":12524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12514,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"10810:11:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12516,"indexExpression":{"id":12515,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12470,"src":"10822:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10810:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":12517,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"10827:11:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12519,"indexExpression":{"id":12518,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12470,"src":"10839:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10827:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":12520,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12391,"src":"10844:14:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12522,"indexExpression":{"id":12521,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12470,"src":"10859:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10844:17:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10827:34:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10810:51:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12525,"nodeType":"ExpressionStatement","src":"10810:51:52"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12473,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12470,"src":"9531:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":12474,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12394,"src":"9535:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9531:13:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12529,"initializationExpression":{"assignments":[12470],"declarations":[{"constant":false,"id":12470,"mutability":"mutable","name":"i","nameLocation":"9524:1:52","nodeType":"VariableDeclaration","scope":12529,"src":"9516:9:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12469,"name":"uint256","nodeType":"ElementaryTypeName","src":"9516:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12472,"initialValue":{"hexValue":"30","id":12471,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9528:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9516:13:52"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":12477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"9546:3:52","subExpression":{"id":12476,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12470,"src":"9548:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12478,"nodeType":"ExpressionStatement","src":"9546:3:52"},"nodeType":"ForStatement","src":"9511:1375:52"},{"assignments":[12531],"declarations":[{"constant":false,"id":12531,"mutability":"mutable","name":"invariantWithFeesApplied","nameLocation":"11156:24:52","nodeType":"VariableDeclaration","scope":12551,"src":"11148:32:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12530,"name":"uint256","nodeType":"ElementaryTypeName","src":"11148:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12538,"initialValue":{"arguments":[{"id":12534,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"11205:11:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":12535,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"11218:8:52","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2334_$","typeString":"type(enum Rounding)"}},"id":12536,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11227:10:52","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":2333,"src":"11218:19:52","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"expression":{"id":12532,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12385,"src":"11183:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},"id":12533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11188:16:52","memberName":"computeInvariant","nodeType":"MemberAccess","referencedDeclaration":67,"src":"11183:21:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_enum$_Rounding_$2334_$returns$_t_uint256_$","typeString":"function (uint256[] memory,enum Rounding) view external returns (uint256)"}},"id":12537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11183:55:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11148:90:52"},{"expression":{"id":12549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12539,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12388,"src":"12092:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12540,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12380,"src":"12108:11:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12541,"name":"invariantWithFeesApplied","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12531,"src":"12123:24:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":12542,"name":"currentInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12444,"src":"12150:16:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12123:43:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12544,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12122:45:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12108:59:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12546,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12107:61:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":12547,"name":"currentInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12444,"src":"12171:16:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12107:80:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12092:95:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12550,"nodeType":"ExpressionStatement","src":"12092:95:52"}]},"documentation":{"id":12372,"nodeType":"StructuredDocumentation","src":"6069:1174:52","text":" @notice Computes the amount of pool tokens (BPT) to be minted for an unbalanced liquidity addition.\n @dev This function handles liquidity addition where the proportion of tokens deposited does not match\n the current pool composition. It considers the current balances, exact amounts of tokens to be added,\n total supply, and swap fee percentage. The function calculates a new invariant with the added tokens,\n applying swap fees if necessary, and then calculates the amount of BPT to mint based on the change\n in the invariant.\n @param currentBalances Current pool balances, sorted in token registration order\n @param exactAmounts Array of exact amounts for each token to be added to the pool\n @param totalSupply The current total supply of the pool tokens (BPT)\n @param swapFeePercentage The swap fee percentage applied to the transaction\n @param pool The pool to which we're adding liquidity\n @return bptAmountOut The amount of pool tokens (BPT) that will be minted as a result of the liquidity addition\n @return swapFeeAmounts The amount of swap fees charged for each token"},"id":12552,"implemented":true,"kind":"function","modifiers":[],"name":"computeAddLiquidityUnbalanced","nameLocation":"7257:29:52","nodeType":"FunctionDefinition","parameters":{"id":12386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12375,"mutability":"mutable","name":"currentBalances","nameLocation":"7313:15:52","nodeType":"VariableDeclaration","scope":12552,"src":"7296:32:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12373,"name":"uint256","nodeType":"ElementaryTypeName","src":"7296:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12374,"nodeType":"ArrayTypeName","src":"7296:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12378,"mutability":"mutable","name":"exactAmounts","nameLocation":"7355:12:52","nodeType":"VariableDeclaration","scope":12552,"src":"7338:29:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12376,"name":"uint256","nodeType":"ElementaryTypeName","src":"7338:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12377,"nodeType":"ArrayTypeName","src":"7338:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12380,"mutability":"mutable","name":"totalSupply","nameLocation":"7385:11:52","nodeType":"VariableDeclaration","scope":12552,"src":"7377:19:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12379,"name":"uint256","nodeType":"ElementaryTypeName","src":"7377:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12382,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"7414:17:52","nodeType":"VariableDeclaration","scope":12552,"src":"7406:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12381,"name":"uint256","nodeType":"ElementaryTypeName","src":"7406:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12385,"mutability":"mutable","name":"pool","nameLocation":"7451:4:52","nodeType":"VariableDeclaration","scope":12552,"src":"7441:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"},"typeName":{"id":12384,"nodeType":"UserDefinedTypeName","pathNode":{"id":12383,"name":"IBasePool","nameLocations":["7441:9:52"],"nodeType":"IdentifierPath","referencedDeclaration":90,"src":"7441:9:52"},"referencedDeclaration":90,"src":"7441:9:52","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},"visibility":"internal"}],"src":"7286:175:52"},"returnParameters":{"id":12392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12388,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7493:12:52","nodeType":"VariableDeclaration","scope":12552,"src":"7485:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12387,"name":"uint256","nodeType":"ElementaryTypeName","src":"7485:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12391,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"7524:14:52","nodeType":"VariableDeclaration","scope":12552,"src":"7507:31:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12389,"name":"uint256","nodeType":"ElementaryTypeName","src":"7507:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12390,"nodeType":"ArrayTypeName","src":"7507:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7484:55:52"},"scope":12981,"src":"7248:4946:52","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":12659,"nodeType":"Block","src":"13760:1833:52","statements":[{"assignments":[12576],"declarations":[{"constant":false,"id":12576,"mutability":"mutable","name":"newSupply","nameLocation":"13843:9:52","nodeType":"VariableDeclaration","scope":12659,"src":"13835:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12575,"name":"uint256","nodeType":"ElementaryTypeName","src":"13835:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12580,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12577,"name":"exactBptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12560,"src":"13855:17:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":12578,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12562,"src":"13875:11:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13855:31:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13835:51:52"},{"assignments":[12582],"declarations":[{"constant":false,"id":12582,"mutability":"mutable","name":"invariantRatio","nameLocation":"14184:14:52","nodeType":"VariableDeclaration","scope":12659,"src":"14176:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12581,"name":"uint256","nodeType":"ElementaryTypeName","src":"14176:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12587,"initialValue":{"arguments":[{"id":12585,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12562,"src":"14217:11:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12583,"name":"newSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12576,"src":"14201:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14211:5:52","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":4564,"src":"14201:15:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":12586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14201:28:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14176:53:52"},{"expression":{"arguments":[{"id":12589,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12567,"src":"14277:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},{"id":12590,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12582,"src":"14283:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12588,"name":"ensureInvariantRatioBelowMaximumBound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12954,"src":"14239:37:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IBasePool_$90_$_t_uint256_$returns$__$","typeString":"function (contract IBasePool,uint256) view"}},"id":12591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14239:59:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12592,"nodeType":"ExpressionStatement","src":"14239:59:52"},{"assignments":[12594],"declarations":[{"constant":false,"id":12594,"mutability":"mutable","name":"newBalance","nameLocation":"14317:10:52","nodeType":"VariableDeclaration","scope":12659,"src":"14309:18:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12593,"name":"uint256","nodeType":"ElementaryTypeName","src":"14309:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12601,"initialValue":{"arguments":[{"id":12597,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12556,"src":"14350:15:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":12598,"name":"tokenInIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12558,"src":"14367:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12599,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12582,"src":"14381:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12595,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12567,"src":"14330:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},"id":12596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14335:14:52","memberName":"computeBalance","nodeType":"MemberAccess","referencedDeclaration":80,"src":"14330:19:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256,uint256) view external returns (uint256)"}},"id":12600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14330:66:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14309:87:52"},{"assignments":[12603],"declarations":[{"constant":false,"id":12603,"mutability":"mutable","name":"amountIn","nameLocation":"14476:8:52","nodeType":"VariableDeclaration","scope":12659,"src":"14468:16:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12602,"name":"uint256","nodeType":"ElementaryTypeName","src":"14468:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12609,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12604,"name":"newBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12594,"src":"14487:10:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":12605,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12556,"src":"14500:15:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12607,"indexExpression":{"id":12606,"name":"tokenInIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12558,"src":"14516:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14500:29:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14487:42:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14468:61:52"},{"assignments":[12611],"declarations":[{"constant":false,"id":12611,"mutability":"mutable","name":"nonTaxableBalance","nameLocation":"14816:17:52","nodeType":"VariableDeclaration","scope":12659,"src":"14808:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12610,"name":"uint256","nodeType":"ElementaryTypeName","src":"14808:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12620,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12612,"name":"newSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12576,"src":"14837:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"baseExpression":{"id":12613,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12556,"src":"14849:15:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12615,"indexExpression":{"id":12614,"name":"tokenInIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12558,"src":"14865:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14849:29:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14837:41:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12617,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14836:43:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":12618,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12562,"src":"14882:11:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14836:57:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14808:85:52"},{"assignments":[12622],"declarations":[{"constant":false,"id":12622,"mutability":"mutable","name":"taxableAmount","nameLocation":"15048:13:52","nodeType":"VariableDeclaration","scope":12659,"src":"15040:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12621,"name":"uint256","nodeType":"ElementaryTypeName","src":"15040:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12626,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12623,"name":"newBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12594,"src":"15064:10:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":12624,"name":"nonTaxableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12611,"src":"15077:17:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15064:30:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15040:54:52"},{"assignments":[12628],"declarations":[{"constant":false,"id":12628,"mutability":"mutable","name":"fee","nameLocation":"15204:3:52","nodeType":"VariableDeclaration","scope":12659,"src":"15196:11:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12627,"name":"uint256","nodeType":"ElementaryTypeName","src":"15196:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12637,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12631,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12564,"src":"15230:17:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15248:10:52","memberName":"complement","nodeType":"MemberAccess","referencedDeclaration":4765,"src":"15230:28:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":12633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15230:30:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12629,"name":"taxableAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12622,"src":"15210:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15224:5:52","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":4564,"src":"15210:19:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":12634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15210:51:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":12635,"name":"taxableAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12622,"src":"15264:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15210:67:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15196:81:52"},{"expression":{"id":12645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12638,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12573,"src":"15363:14:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":12642,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12556,"src":"15394:15:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15410:6:52","memberName":"length","nodeType":"MemberAccess","src":"15394:22:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12641,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15380:13:52","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":12639,"name":"uint256","nodeType":"ElementaryTypeName","src":"15384:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12640,"nodeType":"ArrayTypeName","src":"15384:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":12644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15380:37:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15363:54:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12646,"nodeType":"ExpressionStatement","src":"15363:54:52"},{"expression":{"id":12651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12647,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12573,"src":"15427:14:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12649,"indexExpression":{"id":12648,"name":"tokenInIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12558,"src":"15442:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15427:28:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12650,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12628,"src":"15458:3:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15427:34:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12652,"nodeType":"ExpressionStatement","src":"15427:34:52"},{"expression":{"id":12657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12653,"name":"amountInWithFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12570,"src":"15554:15:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12654,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"15572:8:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":12655,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12628,"src":"15583:3:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15572:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15554:32:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12658,"nodeType":"ExpressionStatement","src":"15554:32:52"}]},"documentation":{"id":12553,"nodeType":"StructuredDocumentation","src":"12200:1225:52","text":" @notice Computes the amount of input token needed to receive an exact amount of pool tokens (BPT) in a\n single-token liquidity addition.\n @dev This function is used when a user wants to add liquidity to the pool by specifying the exact amount\n of pool tokens they want to receive, and the function calculates the corresponding amount of the input token.\n It considers the current pool balances, total supply, swap fee percentage, and the desired BPT amount.\n @param currentBalances Array of current token balances in the pool, sorted in token registration order\n @param tokenInIndex Index of the input token for which the amount needs to be calculated\n @param exactBptAmountOut Exact amount of pool tokens (BPT) the user wants to receive\n @param totalSupply The current total supply of the pool tokens (BPT)\n @param swapFeePercentage The swap fee percentage applied to the taxable amount\n @param pool The pool to which we're adding liquidity\n @return amountInWithFee The amount of input token needed, including the swap fee, to receive the exact BPT amount\n @return swapFeeAmounts The amount of swap fees charged for each token"},"id":12660,"implemented":true,"kind":"function","modifiers":[],"name":"computeAddLiquiditySingleTokenExactOut","nameLocation":"13439:38:52","nodeType":"FunctionDefinition","parameters":{"id":12568,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12556,"mutability":"mutable","name":"currentBalances","nameLocation":"13504:15:52","nodeType":"VariableDeclaration","scope":12660,"src":"13487:32:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12554,"name":"uint256","nodeType":"ElementaryTypeName","src":"13487:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12555,"nodeType":"ArrayTypeName","src":"13487:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12558,"mutability":"mutable","name":"tokenInIndex","nameLocation":"13537:12:52","nodeType":"VariableDeclaration","scope":12660,"src":"13529:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12557,"name":"uint256","nodeType":"ElementaryTypeName","src":"13529:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12560,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"13567:17:52","nodeType":"VariableDeclaration","scope":12660,"src":"13559:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12559,"name":"uint256","nodeType":"ElementaryTypeName","src":"13559:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12562,"mutability":"mutable","name":"totalSupply","nameLocation":"13602:11:52","nodeType":"VariableDeclaration","scope":12660,"src":"13594:19:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12561,"name":"uint256","nodeType":"ElementaryTypeName","src":"13594:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12564,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"13631:17:52","nodeType":"VariableDeclaration","scope":12660,"src":"13623:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12563,"name":"uint256","nodeType":"ElementaryTypeName","src":"13623:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12567,"mutability":"mutable","name":"pool","nameLocation":"13668:4:52","nodeType":"VariableDeclaration","scope":12660,"src":"13658:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"},"typeName":{"id":12566,"nodeType":"UserDefinedTypeName","pathNode":{"id":12565,"name":"IBasePool","nameLocations":["13658:9:52"],"nodeType":"IdentifierPath","referencedDeclaration":90,"src":"13658:9:52"},"referencedDeclaration":90,"src":"13658:9:52","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},"visibility":"internal"}],"src":"13477:201:52"},"returnParameters":{"id":12574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12570,"mutability":"mutable","name":"amountInWithFee","nameLocation":"13710:15:52","nodeType":"VariableDeclaration","scope":12660,"src":"13702:23:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12569,"name":"uint256","nodeType":"ElementaryTypeName","src":"13702:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12573,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"13744:14:52","nodeType":"VariableDeclaration","scope":12660,"src":"13727:31:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12571,"name":"uint256","nodeType":"ElementaryTypeName","src":"13727:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12572,"nodeType":"ArrayTypeName","src":"13727:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"13701:58:52"},"scope":12981,"src":"13430:2163:52","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":12824,"nodeType":"Block","src":"16633:3561:52","statements":[{"assignments":[12684],"declarations":[{"constant":false,"id":12684,"mutability":"mutable","name":"numTokens","nameLocation":"16706:9:52","nodeType":"VariableDeclaration","scope":12824,"src":"16698:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12683,"name":"uint256","nodeType":"ElementaryTypeName","src":"16698:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12687,"initialValue":{"expression":{"id":12685,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12664,"src":"16718:15:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16734:6:52","memberName":"length","nodeType":"MemberAccess","src":"16718:22:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16698:42:52"},{"assignments":[12692],"declarations":[{"constant":false,"id":12692,"mutability":"mutable","name":"newBalances","nameLocation":"16828:11:52","nodeType":"VariableDeclaration","scope":12824,"src":"16811:28:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12690,"name":"uint256","nodeType":"ElementaryTypeName","src":"16811:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12691,"nodeType":"ArrayTypeName","src":"16811:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":12698,"initialValue":{"arguments":[{"id":12696,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12684,"src":"16856:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12695,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"16842:13:52","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":12693,"name":"uint256","nodeType":"ElementaryTypeName","src":"16846:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12694,"nodeType":"ArrayTypeName","src":"16846:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":12697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16842:24:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"16811:55:52"},{"body":{"id":12719,"nodeType":"Block","src":"16965:64:52","statements":[{"expression":{"id":12717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12709,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12692,"src":"16979:11:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12711,"indexExpression":{"id":12710,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12700,"src":"16991:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16979:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":12712,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12664,"src":"16996:15:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12714,"indexExpression":{"id":12713,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12700,"src":"17012:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16996:18:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":12715,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17017:1:52","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"16996:22:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16979:39:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12718,"nodeType":"ExpressionStatement","src":"16979:39:52"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12703,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12700,"src":"16945:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":12704,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12684,"src":"16949:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16945:13:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12720,"initializationExpression":{"assignments":[12700],"declarations":[{"constant":false,"id":12700,"mutability":"mutable","name":"i","nameLocation":"16938:1:52","nodeType":"VariableDeclaration","scope":12720,"src":"16930:9:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12699,"name":"uint256","nodeType":"ElementaryTypeName","src":"16930:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12702,"initialValue":{"hexValue":"30","id":12701,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16942:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16930:13:52"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":12707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"16960:3:52","subExpression":{"id":12706,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12700,"src":"16962:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12708,"nodeType":"ExpressionStatement","src":"16960:3:52"},"nodeType":"ForStatement","src":"16925:104:52"},{"expression":{"id":12729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12721,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12692,"src":"17107:11:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12723,"indexExpression":{"id":12722,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12666,"src":"17119:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"17107:26:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":12724,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12692,"src":"17136:11:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12726,"indexExpression":{"id":12725,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12666,"src":"17148:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17136:26:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":12727,"name":"exactAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12668,"src":"17165:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17136:43:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17107:72:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12730,"nodeType":"ExpressionStatement","src":"17107:72:52"},{"assignments":[12732],"declarations":[{"constant":false,"id":12732,"mutability":"mutable","name":"currentInvariant","nameLocation":"17711:16:52","nodeType":"VariableDeclaration","scope":12824,"src":"17703:24:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12731,"name":"uint256","nodeType":"ElementaryTypeName","src":"17703:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12739,"initialValue":{"arguments":[{"id":12735,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12664,"src":"17752:15:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":12736,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"17769:8:52","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2334_$","typeString":"type(enum Rounding)"}},"id":12737,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17778:8:52","memberName":"ROUND_UP","nodeType":"MemberAccess","referencedDeclaration":2332,"src":"17769:17:52","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"expression":{"id":12733,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12675,"src":"17730:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},"id":12734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17735:16:52","memberName":"computeInvariant","nodeType":"MemberAccess","referencedDeclaration":67,"src":"17730:21:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_enum$_Rounding_$2334_$returns$_t_uint256_$","typeString":"function (uint256[] memory,enum Rounding) view external returns (uint256)"}},"id":12738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17730:57:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17703:84:52"},{"assignments":[12741],"declarations":[{"constant":false,"id":12741,"mutability":"mutable","name":"invariantRatio","nameLocation":"18164:14:52","nodeType":"VariableDeclaration","scope":12824,"src":"18156:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12740,"name":"uint256","nodeType":"ElementaryTypeName","src":"18156:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12751,"initialValue":{"arguments":[{"id":12749,"name":"currentInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12732,"src":"18241:16:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":12744,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12692,"src":"18203:11:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":12745,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"18216:8:52","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2334_$","typeString":"type(enum Rounding)"}},"id":12746,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"18225:8:52","memberName":"ROUND_UP","nodeType":"MemberAccess","referencedDeclaration":2332,"src":"18216:17:52","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"expression":{"id":12742,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12675,"src":"18181:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},"id":12743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18186:16:52","memberName":"computeInvariant","nodeType":"MemberAccess","referencedDeclaration":67,"src":"18181:21:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_enum$_Rounding_$2334_$returns$_t_uint256_$","typeString":"function (uint256[] memory,enum Rounding) view external returns (uint256)"}},"id":12747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18181:53:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18235:5:52","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":4564,"src":"18181:59:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":12750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18181:77:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"18156:102:52"},{"expression":{"arguments":[{"id":12753,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12675,"src":"18307:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},{"id":12754,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12741,"src":"18313:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12752,"name":"ensureInvariantRatioAboveMinimumBound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12980,"src":"18269:37:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IBasePool_$90_$_t_uint256_$returns$__$","typeString":"function (contract IBasePool,uint256) view"}},"id":12755,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18269:59:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12756,"nodeType":"ExpressionStatement","src":"18269:59:52"},{"assignments":[12758],"declarations":[{"constant":false,"id":12758,"mutability":"mutable","name":"taxableAmount","nameLocation":"18462:13:52","nodeType":"VariableDeclaration","scope":12824,"src":"18454:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12757,"name":"uint256","nodeType":"ElementaryTypeName","src":"18454:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12769,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"id":12761,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12664,"src":"18499:15:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12763,"indexExpression":{"id":12762,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12666,"src":"18515:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18499:30:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12759,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12741,"src":"18478:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18493:5:52","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":4528,"src":"18478:20:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":12764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18478:52:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":12765,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12692,"src":"18533:11:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12767,"indexExpression":{"id":12766,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12666,"src":"18545:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18533:26:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18478:81:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"18454:105:52"},{"assignments":[12771],"declarations":[{"constant":false,"id":12771,"mutability":"mutable","name":"fee","nameLocation":"18759:3:52","nodeType":"VariableDeclaration","scope":12824,"src":"18751:11:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12770,"name":"uint256","nodeType":"ElementaryTypeName","src":"18751:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12780,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12774,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12672,"src":"18785:17:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18803:10:52","memberName":"complement","nodeType":"MemberAccess","referencedDeclaration":4765,"src":"18785:28:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":12776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18785:30:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12772,"name":"taxableAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12758,"src":"18765:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18779:5:52","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":4564,"src":"18765:19:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":12777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18765:51:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":12778,"name":"taxableAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12758,"src":"18819:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18765:67:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"18751:81:52"},{"expression":{"id":12789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12781,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12692,"src":"18892:11:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12783,"indexExpression":{"id":12782,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12666,"src":"18904:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18892:26:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":12784,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12692,"src":"18921:11:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12786,"indexExpression":{"id":12785,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12666,"src":"18933:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18921:26:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":12787,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12771,"src":"18950:3:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18921:32:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18892:61:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12790,"nodeType":"ExpressionStatement","src":"18892:61:52"},{"assignments":[12792],"declarations":[{"constant":false,"id":12792,"mutability":"mutable","name":"invariantWithFeesApplied","nameLocation":"19097:24:52","nodeType":"VariableDeclaration","scope":12824,"src":"19089:32:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12791,"name":"uint256","nodeType":"ElementaryTypeName","src":"19089:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12799,"initialValue":{"arguments":[{"id":12795,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12692,"src":"19146:11:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":12796,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"19159:8:52","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2334_$","typeString":"type(enum Rounding)"}},"id":12797,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"19168:10:52","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":2333,"src":"19159:19:52","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"expression":{"id":12793,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12675,"src":"19124:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},"id":12794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19129:16:52","memberName":"computeInvariant","nodeType":"MemberAccess","referencedDeclaration":67,"src":"19124:21:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_enum$_Rounding_$2334_$returns$_t_uint256_$","typeString":"function (uint256[] memory,enum Rounding) view external returns (uint256)"}},"id":12798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19124:55:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19089:90:52"},{"expression":{"id":12806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12800,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12681,"src":"19265:14:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12804,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12684,"src":"19296:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12803,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"19282:13:52","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":12801,"name":"uint256","nodeType":"ElementaryTypeName","src":"19286:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12802,"nodeType":"ArrayTypeName","src":"19286:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":12805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19282:24:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"19265:41:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12807,"nodeType":"ExpressionStatement","src":"19265:41:52"},{"expression":{"id":12812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12808,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12681,"src":"19316:14:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12810,"indexExpression":{"id":12809,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12666,"src":"19331:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"19316:29:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12811,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12771,"src":"19348:3:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19316:35:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12813,"nodeType":"ExpressionStatement","src":"19316:35:52"},{"expression":{"id":12822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12814,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12678,"src":"20090:11:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12817,"name":"currentInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12732,"src":"20125:16:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":12818,"name":"invariantWithFeesApplied","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12792,"src":"20144:24:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20125:43:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12820,"name":"currentInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12732,"src":"20170:16:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12815,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12670,"src":"20104:11:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20116:8:52","memberName":"mulDivUp","nodeType":"MemberAccess","referencedDeclaration":4592,"src":"20104:20:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":12821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20104:83:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20090:97:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12823,"nodeType":"ExpressionStatement","src":"20090:97:52"}]},"documentation":{"id":12661,"nodeType":"StructuredDocumentation","src":"15599:702:52","text":" @notice Computes the amount of pool tokens to burn to receive exact amount out.\n @param currentBalances Current pool balances, sorted in token registration order\n @param tokenOutIndex Index of the token to receive in exchange for pool tokens burned\n @param exactAmountOut Exact amount of tokens to receive\n @param totalSupply The current total supply of the pool tokens (BPT)\n @param swapFeePercentage The swap fee percentage applied to the taxable amount\n @param pool The pool from which we're removing liquidity\n @return bptAmountIn Amount of pool tokens to burn\n @return swapFeeAmounts The amount of swap fees charged for each token"},"id":12825,"implemented":true,"kind":"function","modifiers":[],"name":"computeRemoveLiquiditySingleTokenExactOut","nameLocation":"16315:41:52","nodeType":"FunctionDefinition","parameters":{"id":12676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12664,"mutability":"mutable","name":"currentBalances","nameLocation":"16383:15:52","nodeType":"VariableDeclaration","scope":12825,"src":"16366:32:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12662,"name":"uint256","nodeType":"ElementaryTypeName","src":"16366:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12663,"nodeType":"ArrayTypeName","src":"16366:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12666,"mutability":"mutable","name":"tokenOutIndex","nameLocation":"16416:13:52","nodeType":"VariableDeclaration","scope":12825,"src":"16408:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12665,"name":"uint256","nodeType":"ElementaryTypeName","src":"16408:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12668,"mutability":"mutable","name":"exactAmountOut","nameLocation":"16447:14:52","nodeType":"VariableDeclaration","scope":12825,"src":"16439:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12667,"name":"uint256","nodeType":"ElementaryTypeName","src":"16439:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12670,"mutability":"mutable","name":"totalSupply","nameLocation":"16479:11:52","nodeType":"VariableDeclaration","scope":12825,"src":"16471:19:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12669,"name":"uint256","nodeType":"ElementaryTypeName","src":"16471:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12672,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"16508:17:52","nodeType":"VariableDeclaration","scope":12825,"src":"16500:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12671,"name":"uint256","nodeType":"ElementaryTypeName","src":"16500:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12675,"mutability":"mutable","name":"pool","nameLocation":"16545:4:52","nodeType":"VariableDeclaration","scope":12825,"src":"16535:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"},"typeName":{"id":12674,"nodeType":"UserDefinedTypeName","pathNode":{"id":12673,"name":"IBasePool","nameLocations":["16535:9:52"],"nodeType":"IdentifierPath","referencedDeclaration":90,"src":"16535:9:52"},"referencedDeclaration":90,"src":"16535:9:52","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},"visibility":"internal"}],"src":"16356:199:52"},"returnParameters":{"id":12682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12678,"mutability":"mutable","name":"bptAmountIn","nameLocation":"16587:11:52","nodeType":"VariableDeclaration","scope":12825,"src":"16579:19:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12677,"name":"uint256","nodeType":"ElementaryTypeName","src":"16579:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12681,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"16617:14:52","nodeType":"VariableDeclaration","scope":12825,"src":"16600:31:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12679,"name":"uint256","nodeType":"ElementaryTypeName","src":"16600:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12680,"nodeType":"ArrayTypeName","src":"16600:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"16578:54:52"},"scope":12981,"src":"16306:3888:52","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":12927,"nodeType":"Block","src":"21412:1896:52","statements":[{"assignments":[12849],"declarations":[{"constant":false,"id":12849,"mutability":"mutable","name":"newSupply","nameLocation":"21503:9:52","nodeType":"VariableDeclaration","scope":12927,"src":"21495:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12848,"name":"uint256","nodeType":"ElementaryTypeName","src":"21495:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12853,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12850,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12835,"src":"21515:11:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":12851,"name":"exactBptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12833,"src":"21529:16:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21515:30:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21495:50:52"},{"assignments":[12855],"declarations":[{"constant":false,"id":12855,"mutability":"mutable","name":"invariantRatio","nameLocation":"21563:14:52","nodeType":"VariableDeclaration","scope":12927,"src":"21555:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12854,"name":"uint256","nodeType":"ElementaryTypeName","src":"21555:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12860,"initialValue":{"arguments":[{"id":12858,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12835,"src":"21596:11:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12856,"name":"newSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12849,"src":"21580:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21590:5:52","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":4564,"src":"21580:15:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":12859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21580:28:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21555:53:52"},{"expression":{"arguments":[{"id":12862,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12840,"src":"21656:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},{"id":12863,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12855,"src":"21662:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12861,"name":"ensureInvariantRatioAboveMinimumBound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12980,"src":"21618:37:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IBasePool_$90_$_t_uint256_$returns$__$","typeString":"function (contract IBasePool,uint256) view"}},"id":12864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21618:59:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12865,"nodeType":"ExpressionStatement","src":"21618:59:52"},{"assignments":[12867],"declarations":[{"constant":false,"id":12867,"mutability":"mutable","name":"newBalance","nameLocation":"22195:10:52","nodeType":"VariableDeclaration","scope":12927,"src":"22187:18:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12866,"name":"uint256","nodeType":"ElementaryTypeName","src":"22187:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12874,"initialValue":{"arguments":[{"id":12870,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12829,"src":"22228:15:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":12871,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12831,"src":"22245:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12872,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12855,"src":"22260:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12868,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12840,"src":"22208:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},"id":12869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22213:14:52","memberName":"computeBalance","nodeType":"MemberAccess","referencedDeclaration":80,"src":"22208:19:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256,uint256) view external returns (uint256)"}},"id":12873,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22208:67:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22187:88:52"},{"assignments":[12876],"declarations":[{"constant":false,"id":12876,"mutability":"mutable","name":"amountOut","nameLocation":"22355:9:52","nodeType":"VariableDeclaration","scope":12927,"src":"22347:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12875,"name":"uint256","nodeType":"ElementaryTypeName","src":"22347:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12882,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":12877,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12829,"src":"22367:15:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12879,"indexExpression":{"id":12878,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12831,"src":"22383:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22367:30:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":12880,"name":"newBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12867,"src":"22400:10:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22367:43:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22347:63:52"},{"assignments":[12884],"declarations":[{"constant":false,"id":12884,"mutability":"mutable","name":"newBalanceBeforeTax","nameLocation":"22626:19:52","nodeType":"VariableDeclaration","scope":12927,"src":"22618:27:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12883,"name":"uint256","nodeType":"ElementaryTypeName","src":"22618:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12892,"initialValue":{"arguments":[{"baseExpression":{"id":12887,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12829,"src":"22667:15:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12889,"indexExpression":{"id":12888,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12831,"src":"22683:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22667:30:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12890,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12835,"src":"22699:11:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12885,"name":"newSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12849,"src":"22648:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22658:8:52","memberName":"mulDivUp","nodeType":"MemberAccess","referencedDeclaration":4592,"src":"22648:18:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":12891,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22648:63:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22618:93:52"},{"assignments":[12894],"declarations":[{"constant":false,"id":12894,"mutability":"mutable","name":"taxableAmount","nameLocation":"22843:13:52","nodeType":"VariableDeclaration","scope":12927,"src":"22835:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12893,"name":"uint256","nodeType":"ElementaryTypeName","src":"22835:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12898,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12895,"name":"newBalanceBeforeTax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12884,"src":"22859:19:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":12896,"name":"newBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12867,"src":"22881:10:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22859:32:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22835:56:52"},{"assignments":[12900],"declarations":[{"constant":false,"id":12900,"mutability":"mutable","name":"fee","nameLocation":"22967:3:52","nodeType":"VariableDeclaration","scope":12927,"src":"22959:11:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12899,"name":"uint256","nodeType":"ElementaryTypeName","src":"22959:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12905,"initialValue":{"arguments":[{"id":12903,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12837,"src":"22993:17:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12901,"name":"taxableAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12894,"src":"22973:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22987:5:52","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":4528,"src":"22973:19:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":12904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22973:38:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22959:52:52"},{"expression":{"id":12913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12906,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12846,"src":"23097:14:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":12910,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12829,"src":"23128:15:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23144:6:52","memberName":"length","nodeType":"MemberAccess","src":"23128:22:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12909,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"23114:13:52","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":12907,"name":"uint256","nodeType":"ElementaryTypeName","src":"23118:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12908,"nodeType":"ArrayTypeName","src":"23118:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":12912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23114:37:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"23097:54:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12914,"nodeType":"ExpressionStatement","src":"23097:54:52"},{"expression":{"id":12919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12915,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12846,"src":"23161:14:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12917,"indexExpression":{"id":12916,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12831,"src":"23176:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23161:29:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12918,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12900,"src":"23193:3:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23161:35:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12920,"nodeType":"ExpressionStatement","src":"23161:35:52"},{"expression":{"id":12925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12921,"name":"amountOutWithFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12843,"src":"23267:16:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12922,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12876,"src":"23286:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":12923,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12900,"src":"23298:3:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23286:15:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23267:34:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12926,"nodeType":"ExpressionStatement","src":"23267:34:52"}]},"documentation":{"id":12826,"nodeType":"StructuredDocumentation","src":"20200:874:52","text":" @notice Computes the amount of a single token to withdraw for a given amount of BPT to burn.\n @dev It computes the output token amount for an exact input of BPT, considering current balances,\n total supply, and swap fees.\n @param currentBalances The current token balances in the pool\n @param tokenOutIndex The index of the token to be withdrawn\n @param exactBptAmountIn The exact amount of BPT the user wants to burn\n @param totalSupply The current total supply of the pool tokens (BPT)\n @param swapFeePercentage The swap fee percentage applied to the taxable amount\n @param pool The pool from which we're removing liquidity\n @return amountOutWithFee The amount of the output token the user receives, accounting for swap fees\n @return swapFeeAmounts The total amount of swap fees charged"},"id":12928,"implemented":true,"kind":"function","modifiers":[],"name":"computeRemoveLiquiditySingleTokenExactIn","nameLocation":"21088:40:52","nodeType":"FunctionDefinition","parameters":{"id":12841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12829,"mutability":"mutable","name":"currentBalances","nameLocation":"21155:15:52","nodeType":"VariableDeclaration","scope":12928,"src":"21138:32:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12827,"name":"uint256","nodeType":"ElementaryTypeName","src":"21138:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12828,"nodeType":"ArrayTypeName","src":"21138:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12831,"mutability":"mutable","name":"tokenOutIndex","nameLocation":"21188:13:52","nodeType":"VariableDeclaration","scope":12928,"src":"21180:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12830,"name":"uint256","nodeType":"ElementaryTypeName","src":"21180:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12833,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"21219:16:52","nodeType":"VariableDeclaration","scope":12928,"src":"21211:24:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12832,"name":"uint256","nodeType":"ElementaryTypeName","src":"21211:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12835,"mutability":"mutable","name":"totalSupply","nameLocation":"21253:11:52","nodeType":"VariableDeclaration","scope":12928,"src":"21245:19:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12834,"name":"uint256","nodeType":"ElementaryTypeName","src":"21245:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12837,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"21282:17:52","nodeType":"VariableDeclaration","scope":12928,"src":"21274:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12836,"name":"uint256","nodeType":"ElementaryTypeName","src":"21274:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12840,"mutability":"mutable","name":"pool","nameLocation":"21319:4:52","nodeType":"VariableDeclaration","scope":12928,"src":"21309:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"},"typeName":{"id":12839,"nodeType":"UserDefinedTypeName","pathNode":{"id":12838,"name":"IBasePool","nameLocations":["21309:9:52"],"nodeType":"IdentifierPath","referencedDeclaration":90,"src":"21309:9:52"},"referencedDeclaration":90,"src":"21309:9:52","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},"visibility":"internal"}],"src":"21128:201:52"},"returnParameters":{"id":12847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12843,"mutability":"mutable","name":"amountOutWithFee","nameLocation":"21361:16:52","nodeType":"VariableDeclaration","scope":12928,"src":"21353:24:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12842,"name":"uint256","nodeType":"ElementaryTypeName","src":"21353:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12846,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"21396:14:52","nodeType":"VariableDeclaration","scope":12928,"src":"21379:31:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12844,"name":"uint256","nodeType":"ElementaryTypeName","src":"21379:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12845,"nodeType":"ArrayTypeName","src":"21379:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"21352:59:52"},"scope":12981,"src":"21079:2229:52","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":12953,"nodeType":"Block","src":"23740:214:52","statements":[{"assignments":[12938],"declarations":[{"constant":false,"id":12938,"mutability":"mutable","name":"maxInvariantRatio","nameLocation":"23758:17:52","nodeType":"VariableDeclaration","scope":12953,"src":"23750:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12937,"name":"uint256","nodeType":"ElementaryTypeName","src":"23750:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12942,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12939,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12932,"src":"23778:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},"id":12940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23783:24:52","memberName":"getMaximumInvariantRatio","nodeType":"MemberAccess","referencedDeclaration":674,"src":"23778:29:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":12941,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23778:31:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23750:59:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12943,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12934,"src":"23823:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":12944,"name":"maxInvariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12938,"src":"23840:17:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23823:34:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12952,"nodeType":"IfStatement","src":"23819:129:52","trueBody":{"id":12951,"nodeType":"Block","src":"23859:89:52","statements":[{"errorCall":{"arguments":[{"id":12947,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12934,"src":"23903:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12948,"name":"maxInvariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12938,"src":"23919:17:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12946,"name":"InvariantRatioAboveMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12265,"src":"23880:22:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":12949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23880:57:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12950,"nodeType":"RevertStatement","src":"23873:64:52"}]}}]},"documentation":{"id":12929,"nodeType":"StructuredDocumentation","src":"23314:320:52","text":" @notice Validate the invariant ratio against the maximum bound.\n @dev This is checked when we're adding liquidity, so the `invariantRatio` > 1.\n @param pool The pool to which we're adding liquidity\n @param invariantRatio The ratio of the new invariant (after an operation) to the old"},"id":12954,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInvariantRatioBelowMaximumBound","nameLocation":"23648:37:52","nodeType":"FunctionDefinition","parameters":{"id":12935,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12932,"mutability":"mutable","name":"pool","nameLocation":"23696:4:52","nodeType":"VariableDeclaration","scope":12954,"src":"23686:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"},"typeName":{"id":12931,"nodeType":"UserDefinedTypeName","pathNode":{"id":12930,"name":"IBasePool","nameLocations":["23686:9:52"],"nodeType":"IdentifierPath","referencedDeclaration":90,"src":"23686:9:52"},"referencedDeclaration":90,"src":"23686:9:52","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},"visibility":"internal"},{"constant":false,"id":12934,"mutability":"mutable","name":"invariantRatio","nameLocation":"23710:14:52","nodeType":"VariableDeclaration","scope":12954,"src":"23702:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12933,"name":"uint256","nodeType":"ElementaryTypeName","src":"23702:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23685:40:52"},"returnParameters":{"id":12936,"nodeType":"ParameterList","parameters":[],"src":"23740:0:52"},"scope":12981,"src":"23639:315:52","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":12979,"nodeType":"Block","src":"24392:214:52","statements":[{"assignments":[12964],"declarations":[{"constant":false,"id":12964,"mutability":"mutable","name":"minInvariantRatio","nameLocation":"24410:17:52","nodeType":"VariableDeclaration","scope":12979,"src":"24402:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12963,"name":"uint256","nodeType":"ElementaryTypeName","src":"24402:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12968,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12965,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12958,"src":"24430:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},"id":12966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24435:24:52","memberName":"getMinimumInvariantRatio","nodeType":"MemberAccess","referencedDeclaration":668,"src":"24430:29:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":12967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24430:31:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"24402:59:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12969,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12960,"src":"24475:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":12970,"name":"minInvariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12964,"src":"24492:17:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24475:34:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12978,"nodeType":"IfStatement","src":"24471:129:52","trueBody":{"id":12977,"nodeType":"Block","src":"24511:89:52","statements":[{"errorCall":{"arguments":[{"id":12973,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12960,"src":"24555:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12974,"name":"minInvariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12964,"src":"24571:17:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12972,"name":"InvariantRatioBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12272,"src":"24532:22:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":12975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24532:57:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12976,"nodeType":"RevertStatement","src":"24525:64:52"}]}}]},"documentation":{"id":12955,"nodeType":"StructuredDocumentation","src":"23960:326:52","text":" @notice Validate the invariant ratio against the maximum bound.\n @dev This is checked when we're removing liquidity, so the `invariantRatio` < 1.\n @param pool The pool from which we're removing liquidity\n @param invariantRatio The ratio of the new invariant (after an operation) to the old"},"id":12980,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInvariantRatioAboveMinimumBound","nameLocation":"24300:37:52","nodeType":"FunctionDefinition","parameters":{"id":12961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12958,"mutability":"mutable","name":"pool","nameLocation":"24348:4:52","nodeType":"VariableDeclaration","scope":12980,"src":"24338:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"},"typeName":{"id":12957,"nodeType":"UserDefinedTypeName","pathNode":{"id":12956,"name":"IBasePool","nameLocations":["24338:9:52"],"nodeType":"IdentifierPath","referencedDeclaration":90,"src":"24338:9:52"},"referencedDeclaration":90,"src":"24338:9:52","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},"visibility":"internal"},{"constant":false,"id":12960,"mutability":"mutable","name":"invariantRatio","nameLocation":"24362:14:52","nodeType":"VariableDeclaration","scope":12980,"src":"24354:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12959,"name":"uint256","nodeType":"ElementaryTypeName","src":"24354:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24337:40:52"},"returnParameters":{"id":12962,"nodeType":"ParameterList","parameters":[],"src":"24392:0:52"},"scope":12981,"src":"24291:315:52","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":12982,"src":"343:24265:52","usedErrors":[12265,12272],"usedEvents":[]}],"src":"46:24563:52"},"id":52},"contracts/Vault.sol":{"ast":{"absolutePath":"contracts/Vault.sol","exportedSymbols":{"AddLiquidityKind":[2409],"AddLiquidityParams":[2425],"Address":[7585],"AfterSwapParams":[2403],"BasePoolMath":[12981],"BufferHelpers":[2585],"BufferWrapOrUnwrapParams":[2464],"CastingHelpers":[2617],"FEE_BITLENGTH":[2467],"FEE_SCALING_FACTOR":[2470],"FixedPoint":[4766],"HookFlags":[2229],"HooksConfig":[2253],"HooksConfigLib":[18601],"IAuthorizer":[40],"IBasePool":[90],"IERC20":[6980],"IERC4626":[6704],"IHooks":[300],"IPoolLiquidity":[356],"IProtocolFeeController":[643],"IRateProvider":[24],"IVaultAdmin":[1003],"IVaultExtension":[2028],"IVaultMain":[2164],"InputHelpers":[2881],"LiquidityManagement":[2182],"MAX_FEE_PERCENTAGE":[2473],"PackedTokenBalance":[3032],"PoolConfig":[2207],"PoolConfigBits":[2184],"PoolConfigLib":[19568],"PoolData":[2331],"PoolDataLib":[20158],"PoolRoleAccounts":[2279],"PoolSwapParams":[2374],"Proxy":[6902],"RemoveLiquidityKind":[2430],"RemoveLiquidityParams":[2446],"Rounding":[2334],"SafeCast":[11729],"SafeERC20":[7332],"ScalingHelpers":[3446],"StorageSlotExtension":[6534],"SwapKind":[2337],"SwapState":[2263],"TokenConfig":[2296],"TokenInfo":[2306],"TokenType":[2283],"TransientStorageHelpers":[4040],"Vault":[16391],"VaultCommon":[17227],"VaultState":[2271],"VaultStateBits":[20164],"VaultStateLib":[20305],"VaultSwapParams":[2356],"WrappingDirection":[2449]},"id":16392,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":12983,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:53"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":12985,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":7333,"src":"72:84:53","symbolAliases":[{"foreign":{"id":12984,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7332,"src":"81:9:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":12987,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":11730,"src":"157:75:53","symbolAliases":[{"foreign":{"id":12986,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11729,"src":"166:8:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":12989,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":6705,"src":"233:75:53","symbolAliases":[{"foreign":{"id":12988,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6704,"src":"242:8:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":12991,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":6981,"src":"309:72:53","symbolAliases":[{"foreign":{"id":12990,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"318:6:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","id":12993,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":7586,"src":"382:68:53","symbolAliases":[{"foreign":{"id":12992,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7585,"src":"391:7:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/proxy/Proxy.sol","file":"@openzeppelin/contracts/proxy/Proxy.sol","id":12995,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":6903,"src":"451:64:53","symbolAliases":[{"foreign":{"id":12994,"name":"Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6902,"src":"460:5:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":12997,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":644,"src":"517:113:53","symbolAliases":[{"foreign":{"id":12996,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":643,"src":"526:22:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","id":12999,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":2029,"src":"631:99:53","symbolAliases":[{"foreign":{"id":12998,"name":"IVaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2028,"src":"640:15:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol","id":13001,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":357,"src":"731:97:53","symbolAliases":[{"foreign":{"id":13000,"name":"IPoolLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":356,"src":"740:14:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":13003,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":41,"src":"829:91:53","symbolAliases":[{"foreign":{"id":13002,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40,"src":"838:11:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","id":13005,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":1004,"src":"921:91:53","symbolAliases":[{"foreign":{"id":13004,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1003,"src":"930:11:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","id":13007,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":2165,"src":"1013:89:53","symbolAliases":[{"foreign":{"id":13006,"name":"IVaultMain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2164,"src":"1022:10:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","id":13009,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":91,"src":"1103:87:53","symbolAliases":[{"foreign":{"id":13008,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90,"src":"1112:9:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","id":13011,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":301,"src":"1191:81:53","symbolAliases":[{"foreign":{"id":13010,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":300,"src":"1200:6:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":13012,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":2474,"src":"1273:69:53","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","id":13014,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":6535,"src":"1344:120:53","symbolAliases":[{"foreign":{"id":13013,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6534,"src":"1353:20:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","id":13016,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":3033,"src":"1465:111:53","symbolAliases":[{"foreign":{"id":13015,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3032,"src":"1474:18:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","id":13018,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":3447,"src":"1577:103:53","symbolAliases":[{"foreign":{"id":13017,"name":"ScalingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"1586:14:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","id":13020,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":2618,"src":"1681:103:53","symbolAliases":[{"foreign":{"id":13019,"name":"CastingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2617,"src":"1690:14:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol","id":13022,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":2586,"src":"1785:101:53","symbolAliases":[{"foreign":{"id":13021,"name":"BufferHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2585,"src":"1794:13:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","id":13024,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":2882,"src":"1887:99:53","symbolAliases":[{"foreign":{"id":13023,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2881,"src":"1896:12:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":13026,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":4767,"src":"1987:92:53","symbolAliases":[{"foreign":{"id":13025,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4766,"src":"1996:10:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","id":13028,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":4041,"src":"2080:125:53","symbolAliases":[{"foreign":{"id":13027,"name":"TransientStorageHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4040,"src":"2093:23:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/lib/VaultStateLib.sol","file":"./lib/VaultStateLib.sol","id":13031,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":20306,"src":"2207:72:53","symbolAliases":[{"foreign":{"id":13029,"name":"VaultStateLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20305,"src":"2216:13:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":13030,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20164,"src":"2231:14:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/lib/HooksConfigLib.sol","file":"./lib/HooksConfigLib.sol","id":13033,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":18602,"src":"2280:58:53","symbolAliases":[{"foreign":{"id":13032,"name":"HooksConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18601,"src":"2289:14:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/lib/PoolConfigLib.sol","file":"./lib/PoolConfigLib.sol","id":13035,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":19569,"src":"2339:56:53","symbolAliases":[{"foreign":{"id":13034,"name":"PoolConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19568,"src":"2348:13:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/lib/PoolDataLib.sol","file":"./lib/PoolDataLib.sol","id":13037,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":20159,"src":"2396:52:53","symbolAliases":[{"foreign":{"id":13036,"name":"PoolDataLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20158,"src":"2405:11:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/BasePoolMath.sol","file":"./BasePoolMath.sol","id":13039,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":12982,"src":"2449:50:53","symbolAliases":[{"foreign":{"id":13038,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12981,"src":"2458:12:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/VaultCommon.sol","file":"./VaultCommon.sol","id":13041,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16392,"sourceUnit":17228,"src":"2500:48:53","symbolAliases":[{"foreign":{"id":13040,"name":"VaultCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17227,"src":"2509:11:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":13042,"name":"IVaultMain","nameLocations":["2568:10:53"],"nodeType":"IdentifierPath","referencedDeclaration":2164,"src":"2568:10:53"},"id":13043,"nodeType":"InheritanceSpecifier","src":"2568:10:53"},{"baseName":{"id":13044,"name":"VaultCommon","nameLocations":["2580:11:53"],"nodeType":"IdentifierPath","referencedDeclaration":17227,"src":"2580:11:53"},"id":13045,"nodeType":"InheritanceSpecifier","src":"2580:11:53"},{"baseName":{"id":13046,"name":"Proxy","nameLocations":["2593:5:53"],"nodeType":"IdentifierPath","referencedDeclaration":6902,"src":"2593:5:53"},"id":13047,"nodeType":"InheritanceSpecifier","src":"2593:5:53"}],"canonicalName":"Vault","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":16391,"internalFunctionIDs":{"3065":1,"3086":2},"linearizedBaseContracts":[16391,6902,17227,20898,98,6771,6191,17511,1370,1609,2164],"name":"Vault","nameLocation":"2559:5:53","nodeType":"ContractDefinition","nodes":[{"global":false,"id":13050,"libraryName":{"id":13048,"name":"PackedTokenBalance","nameLocations":["2611:18:53"],"nodeType":"IdentifierPath","referencedDeclaration":3032,"src":"2611:18:53"},"nodeType":"UsingForDirective","src":"2605:37:53","typeName":{"id":13049,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2634:7:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"global":false,"id":13053,"libraryName":{"id":13051,"name":"BufferHelpers","nameLocations":["2653:13:53"],"nodeType":"IdentifierPath","referencedDeclaration":2585,"src":"2653:13:53"},"nodeType":"UsingForDirective","src":"2647:32:53","typeName":{"id":13052,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2671:7:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"global":false,"id":13056,"libraryName":{"id":13054,"name":"InputHelpers","nameLocations":["2690:12:53"],"nodeType":"IdentifierPath","referencedDeclaration":2881,"src":"2690:12:53"},"nodeType":"UsingForDirective","src":"2684:31:53","typeName":{"id":13055,"name":"uint256","nodeType":"ElementaryTypeName","src":"2707:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":13058,"libraryName":{"id":13057,"name":"FixedPoint","nameLocations":["2726:10:53"],"nodeType":"IdentifierPath","referencedDeclaration":4766,"src":"2726:10:53"},"nodeType":"UsingForDirective","src":"2720:23:53"},{"global":false,"id":13060,"libraryName":{"id":13059,"name":"Address","nameLocations":["2754:7:53"],"nodeType":"IdentifierPath","referencedDeclaration":7585,"src":"2754:7:53"},"nodeType":"UsingForDirective","src":"2748:20:53"},{"global":false,"id":13064,"libraryName":{"id":13061,"name":"CastingHelpers","nameLocations":["2779:14:53"],"nodeType":"IdentifierPath","referencedDeclaration":2617,"src":"2779:14:53"},"nodeType":"UsingForDirective","src":"2773:35:53","typeName":{"baseType":{"id":13062,"name":"uint256","nodeType":"ElementaryTypeName","src":"2798:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13063,"nodeType":"ArrayTypeName","src":"2798:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},{"global":false,"id":13066,"libraryName":{"id":13065,"name":"SafeCast","nameLocations":["2819:8:53"],"nodeType":"IdentifierPath","referencedDeclaration":11729,"src":"2819:8:53"},"nodeType":"UsingForDirective","src":"2813:21:53"},{"global":false,"id":13070,"libraryName":{"id":13067,"name":"SafeERC20","nameLocations":["2845:9:53"],"nodeType":"IdentifierPath","referencedDeclaration":7332,"src":"2845:9:53"},"nodeType":"UsingForDirective","src":"2839:27:53","typeName":{"id":13069,"nodeType":"UserDefinedTypeName","pathNode":{"id":13068,"name":"IERC20","nameLocations":["2859:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"2859:6:53"},"referencedDeclaration":6980,"src":"2859:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}}},{"global":false,"id":13074,"libraryName":{"id":13071,"name":"PoolConfigLib","nameLocations":["2877:13:53"],"nodeType":"IdentifierPath","referencedDeclaration":19568,"src":"2877:13:53"},"nodeType":"UsingForDirective","src":"2871:39:53","typeName":{"id":13073,"nodeType":"UserDefinedTypeName","pathNode":{"id":13072,"name":"PoolConfigBits","nameLocations":["2895:14:53"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"2895:14:53"},"referencedDeclaration":2184,"src":"2895:14:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}},{"global":false,"id":13078,"libraryName":{"id":13075,"name":"HooksConfigLib","nameLocations":["2921:14:53"],"nodeType":"IdentifierPath","referencedDeclaration":18601,"src":"2921:14:53"},"nodeType":"UsingForDirective","src":"2915:40:53","typeName":{"id":13077,"nodeType":"UserDefinedTypeName","pathNode":{"id":13076,"name":"PoolConfigBits","nameLocations":["2940:14:53"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"2940:14:53"},"referencedDeclaration":2184,"src":"2940:14:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}},{"global":false,"id":13082,"libraryName":{"id":13079,"name":"VaultStateLib","nameLocations":["2966:13:53"],"nodeType":"IdentifierPath","referencedDeclaration":20305,"src":"2966:13:53"},"nodeType":"UsingForDirective","src":"2960:39:53","typeName":{"id":13081,"nodeType":"UserDefinedTypeName","pathNode":{"id":13080,"name":"VaultStateBits","nameLocations":["2984:14:53"],"nodeType":"IdentifierPath","referencedDeclaration":20164,"src":"2984:14:53"},"referencedDeclaration":20164,"src":"2984:14:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}}},{"global":false,"id":13084,"libraryName":{"id":13083,"name":"ScalingHelpers","nameLocations":["3010:14:53"],"nodeType":"IdentifierPath","referencedDeclaration":3446,"src":"3010:14:53"},"nodeType":"UsingForDirective","src":"3004:27:53"},{"global":false,"id":13086,"libraryName":{"id":13085,"name":"TransientStorageHelpers","nameLocations":["3042:23:53"],"nodeType":"IdentifierPath","referencedDeclaration":4040,"src":"3042:23:53"},"nodeType":"UsingForDirective","src":"3036:36:53"},{"global":false,"id":13088,"libraryName":{"id":13087,"name":"StorageSlotExtension","nameLocations":["3083:20:53"],"nodeType":"IdentifierPath","referencedDeclaration":6534,"src":"3083:20:53"},"nodeType":"UsingForDirective","src":"3077:33:53"},{"global":false,"id":13092,"libraryName":{"id":13089,"name":"PoolDataLib","nameLocations":["3121:11:53"],"nodeType":"IdentifierPath","referencedDeclaration":20158,"src":"3121:11:53"},"nodeType":"UsingForDirective","src":"3115:31:53","typeName":{"id":13091,"nodeType":"UserDefinedTypeName","pathNode":{"id":13090,"name":"PoolData","nameLocations":["3137:8:53"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"3137:8:53"},"referencedDeclaration":2331,"src":"3137:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}}},{"constant":false,"id":13095,"mutability":"immutable","name":"_vaultExtension","nameLocation":"3256:15:53","nodeType":"VariableDeclaration","scope":16391,"src":"3222:49:53","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$2028","typeString":"contract IVaultExtension"},"typeName":{"id":13094,"nodeType":"UserDefinedTypeName","pathNode":{"id":13093,"name":"IVaultExtension","nameLocations":["3222:15:53"],"nodeType":"IdentifierPath","referencedDeclaration":2028,"src":"3222:15:53"},"referencedDeclaration":2028,"src":"3222:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$2028","typeString":"contract IVaultExtension"}},"visibility":"private"},{"body":{"id":13206,"nodeType":"Block","src":"3392:893:53","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":13109,"name":"vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13098,"src":"3414:14:53","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$2028","typeString":"contract IVaultExtension"}},"id":13110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3429:5:53","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":1632,"src":"3414:20:53","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IVault_$713_$","typeString":"function () view external returns (contract IVault)"}},"id":13111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3414:22:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}],"id":13108,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3406:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13107,"name":"address","nodeType":"ElementaryTypeName","src":"3406:7:53","typeDescriptions":{}}},"id":13112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3406:31:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":13115,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3449:4:53","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}],"id":13114,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3441:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13113,"name":"address","nodeType":"ElementaryTypeName","src":"3441:7:53","typeDescriptions":{}}},"id":13116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3441:13:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3406:48:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13122,"nodeType":"IfStatement","src":"3402:117:53","trueBody":{"id":13121,"nodeType":"Block","src":"3456:63:53","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13118,"name":"WrongVaultExtensionDeployment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1360,"src":"3477:29:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":13119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3477:31:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13120,"nodeType":"RevertStatement","src":"3470:38:53"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":13125,"name":"protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"3541:21:53","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$643","typeString":"contract IProtocolFeeController"}},"id":13126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3563:5:53","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":473,"src":"3541:27:53","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IVault_$713_$","typeString":"function () view external returns (contract IVault)"}},"id":13127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3541:29:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}],"id":13124,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3533:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13123,"name":"address","nodeType":"ElementaryTypeName","src":"3533:7:53","typeDescriptions":{}}},"id":13128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3533:38:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":13131,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3583:4:53","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}],"id":13130,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3575:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13129,"name":"address","nodeType":"ElementaryTypeName","src":"3575:7:53","typeDescriptions":{}}},"id":13132,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3575:13:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3533:55:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13138,"nodeType":"IfStatement","src":"3529:131:53","trueBody":{"id":13137,"nodeType":"Block","src":"3590:70:53","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13134,"name":"WrongProtocolFeeControllerDeployment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1363,"src":"3611:36:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":13135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3611:38:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13136,"nodeType":"RevertStatement","src":"3604:45:53"}]}},{"expression":{"id":13141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13139,"name":"_vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13095,"src":"3670:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$2028","typeString":"contract IVaultExtension"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13140,"name":"vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13098,"src":"3688:14:53","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$2028","typeString":"contract IVaultExtension"}},"src":"3670:32:53","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$2028","typeString":"contract IVaultExtension"}},"id":13142,"nodeType":"ExpressionStatement","src":"3670:32:53"},{"expression":{"id":13145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13143,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17414,"src":"3712:22:53","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$643","typeString":"contract IProtocolFeeController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13144,"name":"protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"3737:21:53","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$643","typeString":"contract IProtocolFeeController"}},"src":"3712:46:53","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$643","typeString":"contract IProtocolFeeController"}},"id":13146,"nodeType":"ExpressionStatement","src":"3712:46:53"},{"expression":{"id":13156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13147,"name":"_vaultPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17392,"src":"3769:24:53","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":13151,"name":"vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13098,"src":"3816:14:53","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$2028","typeString":"contract IVaultExtension"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVaultExtension_$2028","typeString":"contract IVaultExtension"}],"id":13150,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3808:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13149,"name":"address","nodeType":"ElementaryTypeName","src":"3808:7:53","typeDescriptions":{}}},"id":13152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3808:23:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13148,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1003,"src":"3796:11:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultAdmin_$1003_$","typeString":"type(contract IVaultAdmin)"}},"id":13153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3796:36:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$1003","typeString":"contract IVaultAdmin"}},"id":13154,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3833:21:53","memberName":"getPauseWindowEndTime","nodeType":"MemberAccess","referencedDeclaration":737,"src":"3796:58:53","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint32_$","typeString":"function () view external returns (uint32)"}},"id":13155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3796:60:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"3769:87:53","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":13157,"nodeType":"ExpressionStatement","src":"3769:87:53"},{"expression":{"id":13167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13158,"name":"_vaultBufferPeriodDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17396,"src":"3866:26:53","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":13162,"name":"vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13098,"src":"3915:14:53","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$2028","typeString":"contract IVaultExtension"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVaultExtension_$2028","typeString":"contract IVaultExtension"}],"id":13161,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3907:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13160,"name":"address","nodeType":"ElementaryTypeName","src":"3907:7:53","typeDescriptions":{}}},"id":13163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3907:23:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13159,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1003,"src":"3895:11:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultAdmin_$1003_$","typeString":"type(contract IVaultAdmin)"}},"id":13164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3895:36:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$1003","typeString":"contract IVaultAdmin"}},"id":13165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3932:23:53","memberName":"getBufferPeriodDuration","nodeType":"MemberAccess","referencedDeclaration":743,"src":"3895:60:53","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint32_$","typeString":"function () view external returns (uint32)"}},"id":13166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3895:62:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"3866:91:53","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":13168,"nodeType":"ExpressionStatement","src":"3866:91:53"},{"expression":{"id":13178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13169,"name":"_vaultBufferPeriodEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17394,"src":"3967:25:53","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":13173,"name":"vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13098,"src":"4015:14:53","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$2028","typeString":"contract IVaultExtension"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVaultExtension_$2028","typeString":"contract IVaultExtension"}],"id":13172,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4007:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13171,"name":"address","nodeType":"ElementaryTypeName","src":"4007:7:53","typeDescriptions":{}}},"id":13174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4007:23:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13170,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1003,"src":"3995:11:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultAdmin_$1003_$","typeString":"type(contract IVaultAdmin)"}},"id":13175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3995:36:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$1003","typeString":"contract IVaultAdmin"}},"id":13176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4032:22:53","memberName":"getBufferPeriodEndTime","nodeType":"MemberAccess","referencedDeclaration":749,"src":"3995:59:53","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint32_$","typeString":"function () view external returns (uint32)"}},"id":13177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3995:61:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"3967:89:53","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":13179,"nodeType":"ExpressionStatement","src":"3967:89:53"},{"expression":{"id":13189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13180,"name":"_MINIMUM_TRADE_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17321,"src":"4067:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":13184,"name":"vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13098,"src":"4111:14:53","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$2028","typeString":"contract IVaultExtension"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVaultExtension_$2028","typeString":"contract IVaultExtension"}],"id":13183,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4103:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13182,"name":"address","nodeType":"ElementaryTypeName","src":"4103:7:53","typeDescriptions":{}}},"id":13185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4103:23:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13181,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1003,"src":"4091:11:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultAdmin_$1003_$","typeString":"type(contract IVaultAdmin)"}},"id":13186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4091:36:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$1003","typeString":"contract IVaultAdmin"}},"id":13187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4128:21:53","memberName":"getMinimumTradeAmount","nodeType":"MemberAccess","referencedDeclaration":779,"src":"4091:58:53","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":13188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4091:60:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4067:84:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13190,"nodeType":"ExpressionStatement","src":"4067:84:53"},{"expression":{"id":13200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13191,"name":"_MINIMUM_WRAP_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17323,"src":"4161:20:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":13195,"name":"vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13098,"src":"4204:14:53","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$2028","typeString":"contract IVaultExtension"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVaultExtension_$2028","typeString":"contract IVaultExtension"}],"id":13194,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4196:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13193,"name":"address","nodeType":"ElementaryTypeName","src":"4196:7:53","typeDescriptions":{}}},"id":13196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4196:23:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13192,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1003,"src":"4184:11:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultAdmin_$1003_$","typeString":"type(contract IVaultAdmin)"}},"id":13197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4184:36:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$1003","typeString":"contract IVaultAdmin"}},"id":13198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4221:20:53","memberName":"getMinimumWrapAmount","nodeType":"MemberAccess","referencedDeclaration":785,"src":"4184:57:53","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":13199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4184:59:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4161:82:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13201,"nodeType":"ExpressionStatement","src":"4161:82:53"},{"expression":{"id":13204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13202,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17411,"src":"4254:11:53","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$40","typeString":"contract IAuthorizer"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13203,"name":"authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13101,"src":"4268:10:53","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$40","typeString":"contract IAuthorizer"}},"src":"4254:24:53","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$40","typeString":"contract IAuthorizer"}},"id":13205,"nodeType":"ExpressionStatement","src":"4254:24:53"}]},"id":13207,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":13105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13098,"mutability":"mutable","name":"vaultExtension","nameLocation":"3306:14:53","nodeType":"VariableDeclaration","scope":13207,"src":"3290:30:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$2028","typeString":"contract IVaultExtension"},"typeName":{"id":13097,"nodeType":"UserDefinedTypeName","pathNode":{"id":13096,"name":"IVaultExtension","nameLocations":["3290:15:53"],"nodeType":"IdentifierPath","referencedDeclaration":2028,"src":"3290:15:53"},"referencedDeclaration":2028,"src":"3290:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$2028","typeString":"contract IVaultExtension"}},"visibility":"internal"},{"constant":false,"id":13101,"mutability":"mutable","name":"authorizer","nameLocation":"3334:10:53","nodeType":"VariableDeclaration","scope":13207,"src":"3322:22:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$40","typeString":"contract IAuthorizer"},"typeName":{"id":13100,"nodeType":"UserDefinedTypeName","pathNode":{"id":13099,"name":"IAuthorizer","nameLocations":["3322:11:53"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"3322:11:53"},"referencedDeclaration":40,"src":"3322:11:53","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$40","typeString":"contract IAuthorizer"}},"visibility":"internal"},{"constant":false,"id":13104,"mutability":"mutable","name":"protocolFeeController","nameLocation":"3369:21:53","nodeType":"VariableDeclaration","scope":13207,"src":"3346:44:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$643","typeString":"contract IProtocolFeeController"},"typeName":{"id":13103,"nodeType":"UserDefinedTypeName","pathNode":{"id":13102,"name":"IProtocolFeeController","nameLocations":["3346:22:53"],"nodeType":"IdentifierPath","referencedDeclaration":643,"src":"3346:22:53"},"referencedDeclaration":643,"src":"3346:22:53","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$643","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"3289:102:53"},"returnParameters":{"id":13106,"nodeType":"ParameterList","parameters":[],"src":"3392:0:53"},"scope":16391,"src":"3278:1007:53","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":13256,"nodeType":"Block","src":"5082:1796:53","statements":[{"assignments":[13211],"declarations":[{"constant":false,"id":13211,"mutability":"mutable","name":"isUnlockedBefore","nameLocation":"5097:16:53","nodeType":"VariableDeclaration","scope":13256,"src":"5092:21:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13210,"name":"bool","nodeType":"ElementaryTypeName","src":"5092:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":13216,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13212,"name":"_isUnlocked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17447,"src":"5116:11:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_BooleanSlotType_$6357_$","typeString":"function () view returns (StorageSlotExtension.BooleanSlotType)"}},"id":13213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5116:13:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6357","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":13214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5130:5:53","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":6456,"src":"5116:19:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_BooleanSlotType_$6357_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_BooleanSlotType_$6357_$","typeString":"function (StorageSlotExtension.BooleanSlotType) view returns (bool)"}},"id":13215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5116:21:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"5092:45:53"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13217,"name":"isUnlockedBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13211,"src":"5152:16:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":13218,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5172:5:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"5152:25:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13227,"nodeType":"IfStatement","src":"5148:82:53","trueBody":{"id":13226,"nodeType":"Block","src":"5179:51:53","statements":[{"expression":{"arguments":[{"hexValue":"74727565","id":13223,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5214:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13220,"name":"_isUnlocked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17447,"src":"5193:11:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_BooleanSlotType_$6357_$","typeString":"function () view returns (StorageSlotExtension.BooleanSlotType)"}},"id":13221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5193:13:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6357","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":13222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5207:6:53","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":6467,"src":"5193:20:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$6357_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$6357_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":13224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5193:26:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13225,"nodeType":"ExpressionStatement","src":"5193:26:53"}]}},{"id":13228,"nodeType":"PlaceholderStatement","src":"5327:1:53"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13229,"name":"isUnlockedBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13211,"src":"5343:16:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":13230,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5363:5:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"5343:25:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13255,"nodeType":"IfStatement","src":"5339:1533:53","trueBody":{"id":13254,"nodeType":"Block","src":"5370:1502:53","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13232,"name":"_nonZeroDeltaCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17458,"src":"5388:18:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function () view returns (StorageSlotExtension.Uint256SlotType)"}},"id":13233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5388:20:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":13234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5409:5:53","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":6500,"src":"5388:26:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$6391_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":13235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5388:28:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13236,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5420:1:53","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5388:33:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13242,"nodeType":"IfStatement","src":"5384:98:53","trueBody":{"id":13241,"nodeType":"Block","src":"5423:59:53","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13238,"name":"BalanceNotSettled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1075,"src":"5448:17:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":13239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5448:19:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13240,"nodeType":"RevertStatement","src":"5441:26:53"}]}},{"expression":{"arguments":[{"hexValue":"66616c7365","id":13246,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5517:5:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13243,"name":"_isUnlocked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17447,"src":"5496:11:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_BooleanSlotType_$6357_$","typeString":"function () view returns (StorageSlotExtension.BooleanSlotType)"}},"id":13244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5496:13:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6357","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":13245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5510:6:53","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":6467,"src":"5496:20:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$6357_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$6357_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":13247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5496:27:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13248,"nodeType":"ExpressionStatement","src":"5496:27:53"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13249,"name":"_sessionIdSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17493,"src":"6832:14:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function () view returns (StorageSlotExtension.Uint256SlotType)"}},"id":13250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6832:16:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":13251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6849:10:53","memberName":"tIncrement","nodeType":"MemberAccess","referencedDeclaration":4022,"src":"6832:27:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$6391_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (StorageSlotExtension.Uint256SlotType)"}},"id":13252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6832:29:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13253,"nodeType":"ExpressionStatement","src":"6832:29:53"}]}}]},"documentation":{"id":13208,"nodeType":"StructuredDocumentation","src":"4513:543:53","text":" @dev This modifier is used for functions that temporarily modify the token deltas\n of the Vault, but expect to revert or settle balances by the end of their execution.\n It works by ensuring that the balances are properly settled by the time the last\n operation is executed.\n This is useful for functions like `unlock`, which perform arbitrary external calls:\n we can keep track of temporary deltas changes, and make sure they are settled by the\n time the external call is complete."},"id":13257,"name":"transient","nameLocation":"5070:9:53","nodeType":"ModifierDefinition","parameters":{"id":13209,"nodeType":"ParameterList","parameters":[],"src":"5079:2:53"},"src":"5061:1817:53","virtual":false,"visibility":"internal"},{"baseFunctions":[2042],"body":{"id":13274,"nodeType":"Block","src":"7001:55:53","statements":[{"expression":{"arguments":[{"id":13271,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13260,"src":"7044:4:53","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"components":[{"expression":{"id":13267,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7019:3:53","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7023:6:53","memberName":"sender","nodeType":"MemberAccess","src":"7019:10:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":13269,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7018:12:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":13270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7031:12:53","memberName":"functionCall","nodeType":"MemberAccess","referencedDeclaration":7406,"src":"7018:25:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$attached_to$_t_address_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":13272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7018:31:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":13266,"id":13273,"nodeType":"Return","src":"7011:38:53"}]},"documentation":{"id":13258,"nodeType":"StructuredDocumentation","src":"6884:26:53","text":"@inheritdoc IVaultMain"},"functionSelector":"48c89491","id":13275,"implemented":true,"kind":"function","modifiers":[{"id":13263,"kind":"modifierInvocation","modifierName":{"id":13262,"name":"transient","nameLocations":["6961:9:53"],"nodeType":"IdentifierPath","referencedDeclaration":13257,"src":"6961:9:53"},"nodeType":"ModifierInvocation","src":"6961:9:53"}],"name":"unlock","nameLocation":"6924:6:53","nodeType":"FunctionDefinition","parameters":{"id":13261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13260,"mutability":"mutable","name":"data","nameLocation":"6946:4:53","nodeType":"VariableDeclaration","scope":13275,"src":"6931:19:53","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":13259,"name":"bytes","nodeType":"ElementaryTypeName","src":"6931:5:53","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6930:21:53"},"returnParameters":{"id":13266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13265,"mutability":"mutable","name":"result","nameLocation":"6993:6:53","nodeType":"VariableDeclaration","scope":13275,"src":"6980:19:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13264,"name":"bytes","nodeType":"ElementaryTypeName","src":"6980:5:53","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6979:21:53"},"scope":16391,"src":"6915:141:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2053],"body":{"id":13332,"nodeType":"Block","src":"7207:1022:53","statements":[{"assignments":[13291],"declarations":[{"constant":false,"id":13291,"mutability":"mutable","name":"reservesBefore","nameLocation":"7225:14:53","nodeType":"VariableDeclaration","scope":13332,"src":"7217:22:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13290,"name":"uint256","nodeType":"ElementaryTypeName","src":"7217:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13295,"initialValue":{"baseExpression":{"id":13292,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17405,"src":"7242:11:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":13294,"indexExpression":{"id":13293,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13279,"src":"7254:5:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7242:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7217:43:53"},{"assignments":[13297],"declarations":[{"constant":false,"id":13297,"mutability":"mutable","name":"currentReserves","nameLocation":"7278:15:53","nodeType":"VariableDeclaration","scope":13332,"src":"7270:23:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13296,"name":"uint256","nodeType":"ElementaryTypeName","src":"7270:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13305,"initialValue":{"arguments":[{"arguments":[{"id":13302,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7320:4:53","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}],"id":13301,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7312:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13300,"name":"address","nodeType":"ElementaryTypeName","src":"7312:7:53","typeDescriptions":{}}},"id":13303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7312:13:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":13298,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13279,"src":"7296:5:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":13299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7302:9:53","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":6937,"src":"7296:15:53","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":13304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7296:30:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7270:56:53"},{"expression":{"id":13310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":13306,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17405,"src":"7336:11:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":13308,"indexExpression":{"id":13307,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13279,"src":"7348:5:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7336:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13309,"name":"currentReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13297,"src":"7357:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7336:36:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13311,"nodeType":"ExpressionStatement","src":"7336:36:53"},{"expression":{"id":13316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13312,"name":"credit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13288,"src":"7382:6:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13313,"name":"currentReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13297,"src":"7391:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":13314,"name":"reservesBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13291,"src":"7409:14:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7391:32:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7382:41:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13317,"nodeType":"ExpressionStatement","src":"7382:41:53"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13318,"name":"credit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13288,"src":"7656:6:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":13319,"name":"amountHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13281,"src":"7665:10:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7656:19:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13326,"nodeType":"IfStatement","src":"7652:532:53","trueBody":{"id":13325,"nodeType":"Block","src":"7677:507:53","statements":[{"expression":{"id":13323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13321,"name":"credit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13288,"src":"8154:6:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13322,"name":"amountHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13281,"src":"8163:10:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8154:19:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13324,"nodeType":"ExpressionStatement","src":"8154:19:53"}]}},{"expression":{"arguments":[{"id":13328,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13279,"src":"8208:5:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":13329,"name":"credit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13288,"src":"8215:6:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13327,"name":"_supplyCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16512,"src":"8194:13:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":13330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8194:28:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13331,"nodeType":"ExpressionStatement","src":"8194:28:53"}]},"documentation":{"id":13276,"nodeType":"StructuredDocumentation","src":"7062:26:53","text":"@inheritdoc IVaultMain"},"functionSelector":"15afd409","id":13333,"implemented":true,"kind":"function","modifiers":[{"id":13284,"kind":"modifierInvocation","modifierName":{"id":13283,"name":"nonReentrant","nameLocations":["7152:12:53"],"nodeType":"IdentifierPath","referencedDeclaration":6146,"src":"7152:12:53"},"nodeType":"ModifierInvocation","src":"7152:12:53"},{"id":13286,"kind":"modifierInvocation","modifierName":{"id":13285,"name":"onlyWhenUnlocked","nameLocations":["7165:16:53"],"nodeType":"IdentifierPath","referencedDeclaration":16469,"src":"7165:16:53"},"nodeType":"ModifierInvocation","src":"7165:16:53"}],"name":"settle","nameLocation":"7102:6:53","nodeType":"FunctionDefinition","parameters":{"id":13282,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13279,"mutability":"mutable","name":"token","nameLocation":"7116:5:53","nodeType":"VariableDeclaration","scope":13333,"src":"7109:12:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":13278,"nodeType":"UserDefinedTypeName","pathNode":{"id":13277,"name":"IERC20","nameLocations":["7109:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"7109:6:53"},"referencedDeclaration":6980,"src":"7109:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":13281,"mutability":"mutable","name":"amountHint","nameLocation":"7131:10:53","nodeType":"VariableDeclaration","scope":13333,"src":"7123:18:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13280,"name":"uint256","nodeType":"ElementaryTypeName","src":"7123:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7108:34:53"},"returnParameters":{"id":13289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13288,"mutability":"mutable","name":"credit","nameLocation":"7199:6:53","nodeType":"VariableDeclaration","scope":13333,"src":"7191:14:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13287,"name":"uint256","nodeType":"ElementaryTypeName","src":"7191:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7190:16:53"},"scope":16391,"src":"7093:1136:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2064],"body":{"id":13366,"nodeType":"Block","src":"8363:120:53","statements":[{"expression":{"arguments":[{"id":13349,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13337,"src":"8383:5:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":13350,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13341,"src":"8390:6:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13348,"name":"_takeDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16529,"src":"8373:9:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":13351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8373:24:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13352,"nodeType":"ExpressionStatement","src":"8373:24:53"},{"expression":{"id":13357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":13353,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17405,"src":"8407:11:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":13355,"indexExpression":{"id":13354,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13337,"src":"8419:5:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8407:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":13356,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13341,"src":"8429:6:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8407:28:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13358,"nodeType":"ExpressionStatement","src":"8407:28:53"},{"expression":{"arguments":[{"id":13362,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13339,"src":"8465:2:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13363,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13341,"src":"8469:6:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13359,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13337,"src":"8446:5:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":13361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8452:12:53","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":7092,"src":"8446:18:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$6980_$","typeString":"function (contract IERC20,address,uint256)"}},"id":13364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8446:30:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13365,"nodeType":"ExpressionStatement","src":"8446:30:53"}]},"documentation":{"id":13334,"nodeType":"StructuredDocumentation","src":"8235:26:53","text":"@inheritdoc IVaultMain"},"functionSelector":"ae639329","id":13367,"implemented":true,"kind":"function","modifiers":[{"id":13344,"kind":"modifierInvocation","modifierName":{"id":13343,"name":"nonReentrant","nameLocations":["8333:12:53"],"nodeType":"IdentifierPath","referencedDeclaration":6146,"src":"8333:12:53"},"nodeType":"ModifierInvocation","src":"8333:12:53"},{"id":13346,"kind":"modifierInvocation","modifierName":{"id":13345,"name":"onlyWhenUnlocked","nameLocations":["8346:16:53"],"nodeType":"IdentifierPath","referencedDeclaration":16469,"src":"8346:16:53"},"nodeType":"ModifierInvocation","src":"8346:16:53"}],"name":"sendTo","nameLocation":"8275:6:53","nodeType":"FunctionDefinition","parameters":{"id":13342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13337,"mutability":"mutable","name":"token","nameLocation":"8289:5:53","nodeType":"VariableDeclaration","scope":13367,"src":"8282:12:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":13336,"nodeType":"UserDefinedTypeName","pathNode":{"id":13335,"name":"IERC20","nameLocations":["8282:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"8282:6:53"},"referencedDeclaration":6980,"src":"8282:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":13339,"mutability":"mutable","name":"to","nameLocation":"8304:2:53","nodeType":"VariableDeclaration","scope":13367,"src":"8296:10:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13338,"name":"address","nodeType":"ElementaryTypeName","src":"8296:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13341,"mutability":"mutable","name":"amount","nameLocation":"8316:6:53","nodeType":"VariableDeclaration","scope":13367,"src":"8308:14:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13340,"name":"uint256","nodeType":"ElementaryTypeName","src":"8308:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8281:42:53"},"returnParameters":{"id":13347,"nodeType":"ParameterList","parameters":[],"src":"8363:0:53"},"scope":16391,"src":"8266:217:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2077],"body":{"id":13568,"nodeType":"Block","src":"10954:4211:53","statements":[{"expression":{"arguments":[{"expression":{"id":13387,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"10980:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13388,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10996:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2343,"src":"10980:20:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13386,"name":"_ensureUnpaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16619,"src":"10964:15:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":13389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10964:37:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13390,"nodeType":"ExpressionStatement","src":"10964:37:53"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13391,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"11016:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13392,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11032:14:53","memberName":"amountGivenRaw","nodeType":"MemberAccess","referencedDeclaration":2351,"src":"11016:30:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13393,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11050:1:53","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11016:35:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13399,"nodeType":"IfStatement","src":"11012:90:53","trueBody":{"id":13398,"nodeType":"Block","src":"11053:49:53","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13395,"name":"AmountGivenZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1111,"src":"11074:15:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":13396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11074:17:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13397,"nodeType":"RevertStatement","src":"11067:24:53"}]}},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"id":13404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13400,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"11116:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13401,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11132:7:53","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":2346,"src":"11116:23:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":13402,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"11143:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13403,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11159:8:53","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":2349,"src":"11143:24:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"src":"11116:51:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13409,"nodeType":"IfStatement","src":"11112:110:53","trueBody":{"id":13408,"nodeType":"Block","src":"11169:53:53","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13405,"name":"CannotSwapSameToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1114,"src":"11190:19:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":13406,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11190:21:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13407,"nodeType":"RevertStatement","src":"11183:28:53"}]}},{"assignments":[13412],"declarations":[{"constant":false,"id":13412,"mutability":"mutable","name":"poolData","nameLocation":"11683:8:53","nodeType":"VariableDeclaration","scope":13568,"src":"11667:24:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":13411,"nodeType":"UserDefinedTypeName","pathNode":{"id":13410,"name":"PoolData","nameLocations":["11667:8:53"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"11667:8:53"},"referencedDeclaration":2331,"src":"11667:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"id":13419,"initialValue":{"arguments":[{"expression":{"id":13414,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"11736:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13415,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11752:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2343,"src":"11736:20:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13416,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"11758:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2334_$","typeString":"type(enum Rounding)"}},"id":13417,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11767:10:53","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":2333,"src":"11758:19:53","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"id":13413,"name":"_loadPoolDataUpdatingBalancesAndYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17002,"src":"11694:41:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_Rounding_$2334_$returns$_t_struct$_PoolData_$2331_memory_ptr_$","typeString":"function (address,enum Rounding) returns (struct PoolData memory)"}},"id":13418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11694:84:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"nodeType":"VariableDeclarationStatement","src":"11667:111:53"},{"assignments":[13422],"declarations":[{"constant":false,"id":13422,"mutability":"mutable","name":"swapState","nameLocation":"11805:9:53","nodeType":"VariableDeclaration","scope":13568,"src":"11788:26:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":13421,"nodeType":"UserDefinedTypeName","pathNode":{"id":13420,"name":"SwapState","nameLocations":["11788:9:53"],"nodeType":"IdentifierPath","referencedDeclaration":2263,"src":"11788:9:53"},"referencedDeclaration":2263,"src":"11788:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"}],"id":13427,"initialValue":{"arguments":[{"id":13424,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"11832:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":13425,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13412,"src":"11849:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}],"id":13423,"name":"_loadSwapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13623,"src":"11817:14:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_VaultSwapParams_$2356_memory_ptr_$_t_struct$_PoolData_$2331_memory_ptr_$returns$_t_struct$_SwapState_$2263_memory_ptr_$","typeString":"function (struct VaultSwapParams memory,struct PoolData memory) pure returns (struct SwapState memory)"}},"id":13426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11817:41:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"nodeType":"VariableDeclarationStatement","src":"11788:70:53"},{"assignments":[13430],"declarations":[{"constant":false,"id":13430,"mutability":"mutable","name":"poolSwapParams","nameLocation":"11890:14:53","nodeType":"VariableDeclaration","scope":13568,"src":"11868:36:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":13429,"nodeType":"UserDefinedTypeName","pathNode":{"id":13428,"name":"PoolSwapParams","nameLocations":["11868:14:53"],"nodeType":"IdentifierPath","referencedDeclaration":2374,"src":"11868:14:53"},"referencedDeclaration":2374,"src":"11868:14:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"id":13436,"initialValue":{"arguments":[{"id":13432,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"11928:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":13433,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13422,"src":"11945:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},{"id":13434,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13412,"src":"11956:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"},{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}],"id":13431,"name":"_buildPoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13656,"src":"11907:20:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_VaultSwapParams_$2356_memory_ptr_$_t_struct$_SwapState_$2263_memory_ptr_$_t_struct$_PoolData_$2331_memory_ptr_$returns$_t_struct$_PoolSwapParams_$2374_memory_ptr_$","typeString":"function (struct VaultSwapParams memory,struct SwapState memory,struct PoolData memory) view returns (struct PoolSwapParams memory)"}},"id":13435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11907:58:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"}},"nodeType":"VariableDeclarationStatement","src":"11868:97:53"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":13437,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13412,"src":"11980:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13438,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11989:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"11980:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":13439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12004:20:53","memberName":"shouldCallBeforeSwap","nodeType":"MemberAccess","referencedDeclaration":17720,"src":"11980:44:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":13440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11980:46:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13483,"nodeType":"IfStatement","src":"11976:992:53","trueBody":{"id":13482,"nodeType":"Block","src":"12028:940:53","statements":[{"expression":{"arguments":[{"id":13444,"name":"poolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13430,"src":"12093:14:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"}},{"expression":{"id":13445,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"12125:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13446,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12141:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2343,"src":"12125:20:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":13447,"name":"_hooksContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17363,"src":"12163:15:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$300_$","typeString":"mapping(address => contract IHooks)"}},"id":13450,"indexExpression":{"expression":{"id":13448,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"12179:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13449,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12195:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2343,"src":"12179:20:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12163:37:53","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}],"expression":{"id":13441,"name":"HooksConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18601,"src":"12042:14:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_HooksConfigLib_$18601_$","typeString":"type(library HooksConfigLib)"}},"id":13443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12057:18:53","memberName":"callBeforeSwapHook","nodeType":"MemberAccess","referencedDeclaration":18087,"src":"12042:33:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PoolSwapParams_$2374_memory_ptr_$_t_address_$_t_contract$_IHooks_$300_$returns$__$","typeString":"function (struct PoolSwapParams memory,address,contract IHooks)"}},"id":13451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12042:172:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13452,"nodeType":"ExpressionStatement","src":"12042:172:53"},{"expression":{"arguments":[{"baseExpression":{"id":13456,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17383,"src":"12575:18:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":13459,"indexExpression":{"expression":{"id":13457,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"12594:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13458,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12610:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2343,"src":"12594:20:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12575:40:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},{"expression":{"id":13460,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"12617:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2334_$","typeString":"type(enum Rounding)"}},"id":13461,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12626:10:53","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":2333,"src":"12617:19:53","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"expression":{"id":13453,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13412,"src":"12543:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13455,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12552:22:53","memberName":"reloadBalancesAndRates","nodeType":"MemberAccess","referencedDeclaration":19998,"src":"12543:31:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PoolData_$2331_memory_ptr_$_t_mapping$_t_uint256_$_t_bytes32_$_$_t_enum$_Rounding_$2334_$returns$__$attached_to$_t_struct$_PoolData_$2331_memory_ptr_$","typeString":"function (struct PoolData memory,mapping(uint256 => bytes32),enum Rounding) view"}},"id":13462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12543:94:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13463,"nodeType":"ExpressionStatement","src":"12543:94:53"},{"expression":{"id":13472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13464,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13422,"src":"12770:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13466,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"12780:19:53","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":2260,"src":"12770:29:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13468,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"12830:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":13469,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13412,"src":"12847:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},{"id":13470,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13422,"src":"12857:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}],"id":13467,"name":"_computeAmountGivenScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13709,"src":"12802:27:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_VaultSwapParams_$2356_memory_ptr_$_t_struct$_PoolData_$2331_memory_ptr_$_t_struct$_SwapState_$2263_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct VaultSwapParams memory,struct PoolData memory,struct SwapState memory) pure returns (uint256)"}},"id":13471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12802:65:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12770:97:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13473,"nodeType":"ExpressionStatement","src":"12770:97:53"},{"expression":{"id":13480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13474,"name":"poolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13430,"src":"12882:14:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13476,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"12920:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":13477,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13422,"src":"12937:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},{"id":13478,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13412,"src":"12948:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"},{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}],"id":13475,"name":"_buildPoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13656,"src":"12899:20:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_VaultSwapParams_$2356_memory_ptr_$_t_struct$_SwapState_$2263_memory_ptr_$_t_struct$_PoolData_$2331_memory_ptr_$returns$_t_struct$_PoolSwapParams_$2374_memory_ptr_$","typeString":"function (struct VaultSwapParams memory,struct SwapState memory,struct PoolData memory) view returns (struct PoolSwapParams memory)"}},"id":13479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12899:58:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"}},"src":"12882:75:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":13481,"nodeType":"ExpressionStatement","src":"12882:75:53"}]}},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":13484,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13412,"src":"13437:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13485,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13446:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"13437:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":13486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13461:31:53","memberName":"shouldCallComputeDynamicSwapFee","nodeType":"MemberAccess","referencedDeclaration":17677,"src":"13437:55:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":13487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13437:57:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13506,"nodeType":"IfStatement","src":"13433:346:53","trueBody":{"id":13505,"nodeType":"Block","src":"13496:283:53","statements":[{"expression":{"id":13503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13488,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13422,"src":"13510:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13490,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"13520:17:53","memberName":"swapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2262,"src":"13510:27:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13493,"name":"poolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13430,"src":"13602:14:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"}},{"expression":{"id":13494,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"13634:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13495,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13650:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2343,"src":"13634:20:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13496,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13422,"src":"13672:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13497,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13682:17:53","memberName":"swapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2262,"src":"13672:27:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":13498,"name":"_hooksContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17363,"src":"13717:15:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$300_$","typeString":"mapping(address => contract IHooks)"}},"id":13501,"indexExpression":{"expression":{"id":13499,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"13733:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13500,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13749:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2343,"src":"13733:20:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13717:37:53","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}],"expression":{"id":13491,"name":"HooksConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18601,"src":"13540:14:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_HooksConfigLib_$18601_$","typeString":"type(library HooksConfigLib)"}},"id":13492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13555:29:53","memberName":"callComputeDynamicSwapFeeHook","nodeType":"MemberAccess","referencedDeclaration":18060,"src":"13540:44:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PoolSwapParams_$2374_memory_ptr_$_t_address_$_t_uint256_$_t_contract$_IHooks_$300_$returns$_t_uint256_$","typeString":"function (struct PoolSwapParams memory,address,uint256,contract IHooks) view returns (uint256)"}},"id":13502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13540:228:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13510:258:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13504,"nodeType":"ExpressionStatement","src":"13510:258:53"}]}},{"assignments":[13508],"declarations":[{"constant":false,"id":13508,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"14026:24:53","nodeType":"VariableDeclaration","scope":13568,"src":"14018:32:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13507,"name":"uint256","nodeType":"ElementaryTypeName","src":"14018:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13509,"nodeType":"VariableDeclarationStatement","src":"14018:32:53"},{"expression":{"id":13521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":13510,"name":"amountCalculated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13380,"src":"14061:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13511,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13508,"src":"14079:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13512,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13382,"src":"14105:8:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13513,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13384,"src":"14115:9:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13514,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"14060:65:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13516,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"14147:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":13517,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13422,"src":"14176:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},{"id":13518,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13412,"src":"14199:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},{"id":13519,"name":"poolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13430,"src":"14221:14:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"},{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"}],"id":13515,"name":"_swap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14030,"src":"14128:5:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_VaultSwapParams_$2356_memory_ptr_$_t_struct$_SwapState_$2263_memory_ptr_$_t_struct$_PoolData_$2331_memory_ptr_$_t_struct$_PoolSwapParams_$2374_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct VaultSwapParams memory,struct SwapState memory,struct PoolData memory,struct PoolSwapParams memory) returns (uint256,uint256,uint256,uint256)"}},"id":13520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14128:117:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"src":"14060:185:53","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13522,"nodeType":"ExpressionStatement","src":"14060:185:53"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":13523,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13412,"src":"14488:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13524,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14497:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"14488:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":13525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14512:19:53","memberName":"shouldCallAfterSwap","nodeType":"MemberAccess","referencedDeclaration":17763,"src":"14488:43:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":13526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14488:45:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13551,"nodeType":"IfStatement","src":"14484:507:53","trueBody":{"id":13550,"nodeType":"Block","src":"14535:456:53","statements":[{"assignments":[13529],"declarations":[{"constant":false,"id":13529,"mutability":"mutable","name":"hooksContract","nameLocation":"14617:13:53","nodeType":"VariableDeclaration","scope":13550,"src":"14610:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"},"typeName":{"id":13528,"nodeType":"UserDefinedTypeName","pathNode":{"id":13527,"name":"IHooks","nameLocations":["14610:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":300,"src":"14610:6:53"},"referencedDeclaration":300,"src":"14610:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"visibility":"internal"}],"id":13534,"initialValue":{"baseExpression":{"id":13530,"name":"_hooksContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17363,"src":"14633:15:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$300_$","typeString":"mapping(address => contract IHooks)"}},"id":13533,"indexExpression":{"expression":{"id":13531,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"14649:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13532,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14665:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2343,"src":"14649:20:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14633:37:53","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"nodeType":"VariableDeclarationStatement","src":"14610:60:53"},{"expression":{"id":13548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13535,"name":"amountCalculated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13380,"src":"14685:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13539,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13508,"src":"14763:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13540,"name":"amountCalculated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13380,"src":"14805:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13541,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14839:3:53","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14843:6:53","memberName":"sender","nodeType":"MemberAccess","src":"14839:10:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13543,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"14867:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":13544,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13422,"src":"14900:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},{"id":13545,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13412,"src":"14927:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},{"id":13546,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13529,"src":"14953:13:53","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"},{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}],"expression":{"expression":{"id":13536,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13412,"src":"14704:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13537,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14713:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"14704:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":13538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14728:17:53","memberName":"callAfterSwapHook","nodeType":"MemberAccess","referencedDeclaration":18223,"src":"14704:41:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_PoolConfigBits_$2184_$_t_uint256_$_t_uint256_$_t_address_$_t_struct$_VaultSwapParams_$2356_memory_ptr_$_t_struct$_SwapState_$2263_memory_ptr_$_t_struct$_PoolData_$2331_memory_ptr_$_t_contract$_IHooks_$300_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits,uint256,uint256,address,struct VaultSwapParams memory,struct SwapState memory,struct PoolData memory,contract IHooks) returns (uint256)"}},"id":13547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14704:276:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14685:295:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13549,"nodeType":"ExpressionStatement","src":"14685:295:53"}]}},{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},"id":13556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13552,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"15005:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13553,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15021:4:53","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2341,"src":"15005:20:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":13554,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2337,"src":"15029:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$2337_$","typeString":"type(enum SwapKind)"}},"id":13555,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15038:8:53","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":2335,"src":"15029:17:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"src":"15005:41:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":13566,"nodeType":"Block","src":"15107:52:53","statements":[{"expression":{"id":13564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13562,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13382,"src":"15121:8:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13563,"name":"amountCalculated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13380,"src":"15132:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15121:27:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13565,"nodeType":"ExpressionStatement","src":"15121:27:53"}]},"id":13567,"nodeType":"IfStatement","src":"15001:158:53","trueBody":{"id":13561,"nodeType":"Block","src":"15048:53:53","statements":[{"expression":{"id":13559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13557,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13384,"src":"15062:9:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13558,"name":"amountCalculated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13380,"src":"15074:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15062:28:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13560,"nodeType":"ExpressionStatement","src":"15062:28:53"}]}}]},"documentation":{"id":13368,"nodeType":"StructuredDocumentation","src":"10679:26:53","text":"@inheritdoc IVaultMain"},"functionSelector":"2bfb780c","id":13569,"implemented":true,"kind":"function","modifiers":[{"id":13374,"kind":"modifierInvocation","modifierName":{"id":13373,"name":"onlyWhenUnlocked","nameLocations":["10803:16:53"],"nodeType":"IdentifierPath","referencedDeclaration":16469,"src":"10803:16:53"},"nodeType":"ModifierInvocation","src":"10803:16:53"},{"arguments":[{"expression":{"id":13376,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"10848:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13377,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10864:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2343,"src":"10848:20:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":13378,"kind":"modifierInvocation","modifierName":{"id":13375,"name":"withInitializedPool","nameLocations":["10828:19:53"],"nodeType":"IdentifierPath","referencedDeclaration":16752,"src":"10828:19:53"},"nodeType":"ModifierInvocation","src":"10828:41:53"}],"name":"swap","nameLocation":"10719:4:53","nodeType":"FunctionDefinition","parameters":{"id":13372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13371,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"10756:15:53","nodeType":"VariableDeclaration","scope":13569,"src":"10733:38:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":13370,"nodeType":"UserDefinedTypeName","pathNode":{"id":13369,"name":"VaultSwapParams","nameLocations":["10733:15:53"],"nodeType":"IdentifierPath","referencedDeclaration":2356,"src":"10733:15:53"},"referencedDeclaration":2356,"src":"10733:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"}],"src":"10723:54:53"},"returnParameters":{"id":13385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13380,"mutability":"mutable","name":"amountCalculated","nameLocation":"10895:16:53","nodeType":"VariableDeclaration","scope":13569,"src":"10887:24:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13379,"name":"uint256","nodeType":"ElementaryTypeName","src":"10887:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13382,"mutability":"mutable","name":"amountIn","nameLocation":"10921:8:53","nodeType":"VariableDeclaration","scope":13569,"src":"10913:16:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13381,"name":"uint256","nodeType":"ElementaryTypeName","src":"10913:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13384,"mutability":"mutable","name":"amountOut","nameLocation":"10939:9:53","nodeType":"VariableDeclaration","scope":13569,"src":"10931:17:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13383,"name":"uint256","nodeType":"ElementaryTypeName","src":"10931:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10886:63:53"},"scope":16391,"src":"10710:4455:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":13622,"nodeType":"Block","src":"15333:383:53","statements":[{"expression":{"id":13590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13581,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13579,"src":"15343:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13583,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15353:7:53","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":2256,"src":"15343:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":13585,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13575,"src":"15379:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13586,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15388:6:53","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":2314,"src":"15379:15:53","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},{"expression":{"id":13587,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13572,"src":"15396:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13588,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15412:7:53","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":2346,"src":"15396:23:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"},{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}],"id":13584,"name":"_findTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17167,"src":"15363:15:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr_$_t_contract$_IERC20_$6980_$returns$_t_uint256_$","typeString":"function (contract IERC20[] memory,contract IERC20) pure returns (uint256)"}},"id":13589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15363:57:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15343:77:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13591,"nodeType":"ExpressionStatement","src":"15343:77:53"},{"expression":{"id":13601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13592,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13579,"src":"15430:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13594,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15440:8:53","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":2258,"src":"15430:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":13596,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13575,"src":"15467:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13597,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15476:6:53","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":2314,"src":"15467:15:53","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},{"expression":{"id":13598,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13572,"src":"15484:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13599,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15500:8:53","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":2349,"src":"15484:24:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"},{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}],"id":13595,"name":"_findTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17167,"src":"15451:15:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr_$_t_contract$_IERC20_$6980_$returns$_t_uint256_$","typeString":"function (contract IERC20[] memory,contract IERC20) pure returns (uint256)"}},"id":13600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15451:58:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15430:79:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13602,"nodeType":"ExpressionStatement","src":"15430:79:53"},{"expression":{"id":13611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13603,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13579,"src":"15520:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13605,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15530:19:53","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":2260,"src":"15520:29:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13607,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13572,"src":"15580:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":13608,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13575,"src":"15597:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},{"id":13609,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13579,"src":"15607:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}],"id":13606,"name":"_computeAmountGivenScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13709,"src":"15552:27:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_VaultSwapParams_$2356_memory_ptr_$_t_struct$_PoolData_$2331_memory_ptr_$_t_struct$_SwapState_$2263_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct VaultSwapParams memory,struct PoolData memory,struct SwapState memory) pure returns (uint256)"}},"id":13610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15552:65:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15520:97:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13612,"nodeType":"ExpressionStatement","src":"15520:97:53"},{"expression":{"id":13620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13613,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13579,"src":"15627:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13615,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15637:17:53","memberName":"swapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2262,"src":"15627:27:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":13616,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13575,"src":"15657:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13617,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15666:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"15657:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":13618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15681:26:53","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":19188,"src":"15657:50:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":13619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15657:52:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15627:82:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13621,"nodeType":"ExpressionStatement","src":"15627:82:53"}]},"id":13623,"implemented":true,"kind":"function","modifiers":[],"name":"_loadSwapState","nameLocation":"15180:14:53","nodeType":"FunctionDefinition","parameters":{"id":13576,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13572,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"15227:15:53","nodeType":"VariableDeclaration","scope":13623,"src":"15204:38:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":13571,"nodeType":"UserDefinedTypeName","pathNode":{"id":13570,"name":"VaultSwapParams","nameLocations":["15204:15:53"],"nodeType":"IdentifierPath","referencedDeclaration":2356,"src":"15204:15:53"},"referencedDeclaration":2356,"src":"15204:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":13575,"mutability":"mutable","name":"poolData","nameLocation":"15268:8:53","nodeType":"VariableDeclaration","scope":13623,"src":"15252:24:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":13574,"nodeType":"UserDefinedTypeName","pathNode":{"id":13573,"name":"PoolData","nameLocations":["15252:8:53"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"15252:8:53"},"referencedDeclaration":2331,"src":"15252:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"15194:88:53"},"returnParameters":{"id":13580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13579,"mutability":"mutable","name":"swapState","nameLocation":"15322:9:53","nodeType":"VariableDeclaration","scope":13623,"src":"15305:26:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":13578,"nodeType":"UserDefinedTypeName","pathNode":{"id":13577,"name":"SwapState","nameLocations":["15305:9:53"],"nodeType":"IdentifierPath","referencedDeclaration":2263,"src":"15305:9:53"},"referencedDeclaration":2263,"src":"15305:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"}],"src":"15304:28:53"},"scope":16391,"src":"15171:545:53","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":13655,"nodeType":"Block","src":"15922:500:53","statements":[{"expression":{"arguments":[{"expression":{"id":13639,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13626,"src":"16069:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13640,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16085:4:53","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2341,"src":"16069:20:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},{"expression":{"id":13641,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13629,"src":"16128:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13642,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16138:19:53","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":2260,"src":"16128:29:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13643,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13632,"src":"16193:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13644,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16202:20:53","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"16193:29:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":13645,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13629,"src":"16249:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13646,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16259:7:53","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":2256,"src":"16249:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13647,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13629,"src":"16294:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13648,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16304:8:53","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":2258,"src":"16294:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13649,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16338:3:53","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16342:6:53","memberName":"sender","nodeType":"MemberAccess","src":"16338:10:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13651,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13626,"src":"16376:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13652,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16392:8:53","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":2355,"src":"16376:24:53","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":13638,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2374,"src":"16030:14:53","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolSwapParams_$2374_storage_ptr_$","typeString":"type(struct PoolSwapParams storage pointer)"}},"id":13653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["16063:4:53","16107:19:53","16175:16:53","16240:7:53","16284:8:53","16330:6:53","16366:8:53"],"names":["kind","amountGivenScaled18","balancesScaled18","indexIn","indexOut","router","userData"],"nodeType":"FunctionCall","src":"16030:385:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"}},"functionReturnParameters":13637,"id":13654,"nodeType":"Return","src":"16011:404:53"}]},"id":13656,"implemented":true,"kind":"function","modifiers":[],"name":"_buildPoolSwapParams","nameLocation":"15731:20:53","nodeType":"FunctionDefinition","parameters":{"id":13633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13626,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"15784:15:53","nodeType":"VariableDeclaration","scope":13656,"src":"15761:38:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":13625,"nodeType":"UserDefinedTypeName","pathNode":{"id":13624,"name":"VaultSwapParams","nameLocations":["15761:15:53"],"nodeType":"IdentifierPath","referencedDeclaration":2356,"src":"15761:15:53"},"referencedDeclaration":2356,"src":"15761:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":13629,"mutability":"mutable","name":"swapState","nameLocation":"15826:9:53","nodeType":"VariableDeclaration","scope":13656,"src":"15809:26:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":13628,"nodeType":"UserDefinedTypeName","pathNode":{"id":13627,"name":"SwapState","nameLocations":["15809:9:53"],"nodeType":"IdentifierPath","referencedDeclaration":2263,"src":"15809:9:53"},"referencedDeclaration":2263,"src":"15809:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"},{"constant":false,"id":13632,"mutability":"mutable","name":"poolData","nameLocation":"15861:8:53","nodeType":"VariableDeclaration","scope":13656,"src":"15845:24:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":13631,"nodeType":"UserDefinedTypeName","pathNode":{"id":13630,"name":"PoolData","nameLocations":["15845:8:53"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"15845:8:53"},"referencedDeclaration":2331,"src":"15845:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"15751:124:53"},"returnParameters":{"id":13637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13636,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13656,"src":"15899:21:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":13635,"nodeType":"UserDefinedTypeName","pathNode":{"id":13634,"name":"PoolSwapParams","nameLocations":["15899:14:53"],"nodeType":"IdentifierPath","referencedDeclaration":2374,"src":"15899:14:53"},"referencedDeclaration":2374,"src":"15899:14:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"15898:23:53"},"scope":16391,"src":"15722:700:53","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13708,"nodeType":"Block","src":"16791:1125:53","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},"id":13675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13671,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13660,"src":"17000:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13672,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17016:4:53","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2341,"src":"17000:20:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":13673,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2337,"src":"17024:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$2337_$","typeString":"type(enum SwapKind)"}},"id":13674,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17033:8:53","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":2335,"src":"17024:17:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"src":"17000:41:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"baseExpression":{"expression":{"id":13693,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13663,"src":"17366:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13694,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17375:21:53","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":2330,"src":"17366:30:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13697,"indexExpression":{"expression":{"id":13695,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13666,"src":"17397:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13696,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17407:8:53","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":2258,"src":"17397:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17366:50:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":13698,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13663,"src":"17831:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13699,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17840:10:53","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":2327,"src":"17831:19:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13702,"indexExpression":{"expression":{"id":13700,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13666,"src":"17851:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13701,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17861:8:53","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":2258,"src":"17851:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17831:39:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17871:18:53","memberName":"computeRateRoundUp","nodeType":"MemberAccess","referencedDeclaration":3445,"src":"17831:58:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":13704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17831:60:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":13690,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13660,"src":"17287:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13691,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17303:14:53","memberName":"amountGivenRaw","nodeType":"MemberAccess","referencedDeclaration":2351,"src":"17287:30:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17318:26:53","memberName":"toScaled18ApplyRateRoundUp","nodeType":"MemberAccess","referencedDeclaration":3086,"src":"17287:57:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":13705,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17287:622:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"17000:909:53","trueExpression":{"arguments":[{"baseExpression":{"expression":{"id":13679,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13663,"src":"17141:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13680,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17150:21:53","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":2330,"src":"17141:30:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13683,"indexExpression":{"expression":{"id":13681,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13666,"src":"17172:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13682,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17182:7:53","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":2256,"src":"17172:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17141:49:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":13684,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13663,"src":"17212:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13685,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17221:10:53","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":2327,"src":"17212:19:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13688,"indexExpression":{"expression":{"id":13686,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13666,"src":"17232:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13687,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17242:7:53","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":2256,"src":"17232:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17212:38:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":13676,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13660,"src":"17060:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13677,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17076:14:53","memberName":"amountGivenRaw","nodeType":"MemberAccess","referencedDeclaration":2351,"src":"17060:30:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17091:28:53","memberName":"toScaled18ApplyRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":3065,"src":"17060:59:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":13689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17060:208:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13670,"id":13707,"nodeType":"Return","src":"16981:928:53"}]},"documentation":{"id":13657,"nodeType":"StructuredDocumentation","src":"16428:166:53","text":" @dev Preconditions: decimalScalingFactors and tokenRates in `poolData` must be current.\n Uses amountGivenRaw and kind from `vaultSwapParams`."},"id":13709,"implemented":true,"kind":"function","modifiers":[],"name":"_computeAmountGivenScaled18","nameLocation":"16608:27:53","nodeType":"FunctionDefinition","parameters":{"id":13667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13660,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"16668:15:53","nodeType":"VariableDeclaration","scope":13709,"src":"16645:38:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":13659,"nodeType":"UserDefinedTypeName","pathNode":{"id":13658,"name":"VaultSwapParams","nameLocations":["16645:15:53"],"nodeType":"IdentifierPath","referencedDeclaration":2356,"src":"16645:15:53"},"referencedDeclaration":2356,"src":"16645:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":13663,"mutability":"mutable","name":"poolData","nameLocation":"16709:8:53","nodeType":"VariableDeclaration","scope":13709,"src":"16693:24:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":13662,"nodeType":"UserDefinedTypeName","pathNode":{"id":13661,"name":"PoolData","nameLocations":["16693:8:53"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"16693:8:53"},"referencedDeclaration":2331,"src":"16693:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":13666,"mutability":"mutable","name":"swapState","nameLocation":"16744:9:53","nodeType":"VariableDeclaration","scope":13709,"src":"16727:26:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":13665,"nodeType":"UserDefinedTypeName","pathNode":{"id":13664,"name":"SwapState","nameLocations":["16727:9:53"],"nodeType":"IdentifierPath","referencedDeclaration":2263,"src":"16727:9:53"},"referencedDeclaration":2263,"src":"16727:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"}],"src":"16635:124:53"},"returnParameters":{"id":13670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13669,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13709,"src":"16782:7:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13668,"name":"uint256","nodeType":"ElementaryTypeName","src":"16782:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16781:9:53"},"scope":16391,"src":"16599:1317:53","stateMutability":"pure","virtual":false,"visibility":"private"},{"canonicalName":"Vault.SwapInternalLocals","documentation":{"id":13710,"nodeType":"StructuredDocumentation","src":"17922:190:53","text":" @dev Auxiliary struct to prevent stack-too-deep issues inside `_swap` function.\n Total swap fees include LP (pool) fees and aggregate (protocol + pool creator) fees."},"id":13717,"members":[{"constant":false,"id":13712,"mutability":"mutable","name":"totalSwapFeeAmountScaled18","nameLocation":"18161:26:53","nodeType":"VariableDeclaration","scope":13717,"src":"18153:34:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13711,"name":"uint256","nodeType":"ElementaryTypeName","src":"18153:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13714,"mutability":"mutable","name":"totalSwapFeeAmountRaw","nameLocation":"18205:21:53","nodeType":"VariableDeclaration","scope":13717,"src":"18197:29:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13713,"name":"uint256","nodeType":"ElementaryTypeName","src":"18197:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13716,"mutability":"mutable","name":"aggregateFeeAmountRaw","nameLocation":"18244:21:53","nodeType":"VariableDeclaration","scope":13717,"src":"18236:29:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13715,"name":"uint256","nodeType":"ElementaryTypeName","src":"18236:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapInternalLocals","nameLocation":"18124:18:53","nodeType":"StructDefinition","scope":16391,"src":"18117:155:53","visibility":"public"},{"body":{"id":14029,"nodeType":"Block","src":"19132:5853:53","statements":[{"assignments":[13745],"declarations":[{"constant":false,"id":13745,"mutability":"mutable","name":"locals","nameLocation":"19168:6:53","nodeType":"VariableDeclaration","scope":14029,"src":"19142:32:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$13717_memory_ptr","typeString":"struct Vault.SwapInternalLocals"},"typeName":{"id":13744,"nodeType":"UserDefinedTypeName","pathNode":{"id":13743,"name":"SwapInternalLocals","nameLocations":["19142:18:53"],"nodeType":"IdentifierPath","referencedDeclaration":13717,"src":"19142:18:53"},"referencedDeclaration":13717,"src":"19142:18:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$13717_storage_ptr","typeString":"struct Vault.SwapInternalLocals"}},"visibility":"internal"}],"id":13746,"nodeType":"VariableDeclarationStatement","src":"19142:32:53"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},"id":13751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13747,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13721,"src":"19189:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13748,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19205:4:53","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2341,"src":"19189:20:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":13749,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2337,"src":"19213:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$2337_$","typeString":"type(enum SwapKind)"}},"id":13750,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"19222:8:53","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":2335,"src":"19213:17:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"src":"19189:41:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13771,"nodeType":"IfStatement","src":"19185:325:53","trueBody":{"id":13770,"nodeType":"Block","src":"19232:278:53","statements":[{"expression":{"id":13761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13752,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13745,"src":"19309:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$13717_memory_ptr","typeString":"struct Vault.SwapInternalLocals memory"}},"id":13754,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"19316:26:53","memberName":"totalSwapFeeAmountScaled18","nodeType":"MemberAccess","referencedDeclaration":13712,"src":"19309:33:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":13758,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"19386:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13759,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19396:17:53","memberName":"swapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2262,"src":"19386:27:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":13755,"name":"poolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13730,"src":"19345:14:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":13756,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19360:19:53","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":2362,"src":"19345:34:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19380:5:53","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":4528,"src":"19345:40:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":13760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19345:69:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19309:105:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13762,"nodeType":"ExpressionStatement","src":"19309:105:53"},{"expression":{"id":13768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13763,"name":"poolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13730,"src":"19428:14:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":13765,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"19443:19:53","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":2362,"src":"19428:34:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"expression":{"id":13766,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13745,"src":"19466:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$13717_memory_ptr","typeString":"struct Vault.SwapInternalLocals memory"}},"id":13767,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19473:26:53","memberName":"totalSwapFeeAmountScaled18","nodeType":"MemberAccess","referencedDeclaration":13712,"src":"19466:33:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19428:71:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13769,"nodeType":"ExpressionStatement","src":"19428:71:53"}]}},{"expression":{"arguments":[{"expression":{"id":13773,"name":"poolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13730,"src":"19543:14:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":13774,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19558:19:53","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":2362,"src":"19543:34:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13772,"name":"_ensureValidSwapAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16342,"src":"19520:22:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":13775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19520:58:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13776,"nodeType":"ExpressionStatement","src":"19520:58:53"},{"expression":{"id":13785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13777,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13737,"src":"19706:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13783,"name":"poolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13730,"src":"19772:14:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"}],"expression":{"arguments":[{"expression":{"id":13779,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13721,"src":"19743:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13780,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19759:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2343,"src":"19743:20:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13778,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90,"src":"19733:9:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePool_$90_$","typeString":"type(contract IBasePool)"}},"id":13781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19733:31:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}},"id":13782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19765:6:53","memberName":"onSwap","nodeType":"MemberAccess","referencedDeclaration":89,"src":"19733:38:53","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_PoolSwapParams_$2374_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct PoolSwapParams memory) external returns (uint256)"}},"id":13784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19733:54:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19706:81:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13786,"nodeType":"ExpressionStatement","src":"19706:81:53"},{"expression":{"arguments":[{"id":13788,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13737,"src":"19821:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13787,"name":"_ensureValidSwapAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16342,"src":"19798:22:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":13789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19798:48:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13790,"nodeType":"ExpressionStatement","src":"19798:48:53"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},"id":13795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13791,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13721,"src":"20225:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13792,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20241:4:53","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2341,"src":"20225:20:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":13793,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2337,"src":"20249:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$2337_$","typeString":"type(enum SwapKind)"}},"id":13794,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20258:8:53","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":2335,"src":"20249:17:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"src":"20225:41:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":13899,"nodeType":"Block","src":"21542:1367:53","statements":[{"expression":{"id":13855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13843,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13745,"src":"22082:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$13717_memory_ptr","typeString":"struct Vault.SwapInternalLocals memory"}},"id":13845,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"22089:26:53","memberName":"totalSwapFeeAmountScaled18","nodeType":"MemberAccess","referencedDeclaration":13712,"src":"22082:33:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":13848,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"22169:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13849,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22179:17:53","memberName":"swapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2262,"src":"22169:27:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":13850,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"22214:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13851,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22224:17:53","memberName":"swapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2262,"src":"22214:27:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22242:10:53","memberName":"complement","nodeType":"MemberAccess","referencedDeclaration":4765,"src":"22214:38:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":13853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22214:40:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13846,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13737,"src":"22118:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22143:8:53","memberName":"mulDivUp","nodeType":"MemberAccess","referencedDeclaration":4592,"src":"22118:33:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":13854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22118:150:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22082:186:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13856,"nodeType":"ExpressionStatement","src":"22082:186:53"},{"expression":{"id":13860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13857,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13737,"src":"22283:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"expression":{"id":13858,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13745,"src":"22311:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$13717_memory_ptr","typeString":"struct Vault.SwapInternalLocals memory"}},"id":13859,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22318:26:53","memberName":"totalSwapFeeAmountScaled18","nodeType":"MemberAccess","referencedDeclaration":13712,"src":"22311:33:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22283:61:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13861,"nodeType":"ExpressionStatement","src":"22283:61:53"},{"expression":{"id":13876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13862,"name":"amountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13735,"src":"22450:19:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":13865,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13727,"src":"22535:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13866,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22544:21:53","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":2330,"src":"22535:30:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13869,"indexExpression":{"expression":{"id":13867,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"22566:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13868,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22576:7:53","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":2256,"src":"22566:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22535:49:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":13870,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13727,"src":"22602:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13871,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22611:10:53","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":2327,"src":"22602:19:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13874,"indexExpression":{"expression":{"id":13872,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"22622:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13873,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22632:7:53","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":2256,"src":"22622:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22602:38:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13863,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13737,"src":"22472:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22497:20:53","memberName":"toRawUndoRateRoundUp","nodeType":"MemberAccess","referencedDeclaration":3128,"src":"22472:45:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":13875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22472:182:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22450:204:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13877,"nodeType":"ExpressionStatement","src":"22450:204:53"},{"expression":{"id":13885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":13878,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13739,"src":"22670:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13879,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13741,"src":"22683:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13880,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"22669:27:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"id":13881,"name":"amountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13735,"src":"22700:19:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13882,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13721,"src":"22721:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13883,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22737:14:53","memberName":"amountGivenRaw","nodeType":"MemberAccess","referencedDeclaration":2351,"src":"22721:30:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13884,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22699:53:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"22669:83:53","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13886,"nodeType":"ExpressionStatement","src":"22669:83:53"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13887,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13739,"src":"22771:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":13888,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13721,"src":"22785:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13889,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22801:8:53","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":2353,"src":"22785:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22771:38:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13898,"nodeType":"IfStatement","src":"22767:132:53","trueBody":{"id":13897,"nodeType":"Block","src":"22811:88:53","statements":[{"errorCall":{"arguments":[{"id":13892,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13739,"src":"22846:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13893,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13721,"src":"22859:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13894,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22875:8:53","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":2353,"src":"22859:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13891,"name":"SwapLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1127,"src":"22836:9:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":13895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22836:48:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13896,"nodeType":"RevertStatement","src":"22829:55:53"}]}}]},"id":13900,"nodeType":"IfStatement","src":"20221:2688:53","trueBody":{"id":13842,"nodeType":"Block","src":"20268:1268:53","statements":[{"expression":{"id":13801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13796,"name":"poolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13730,"src":"20465:14:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":13798,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"20480:19:53","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":2362,"src":"20465:34:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":13799,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"20502:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13800,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20512:19:53","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":2260,"src":"20502:29:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20465:66:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13802,"nodeType":"ExpressionStatement","src":"20465:66:53"},{"expression":{"id":13819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13803,"name":"amountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13735,"src":"20637:19:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":13806,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13727,"src":"20724:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13807,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20733:21:53","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":2330,"src":"20724:30:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13810,"indexExpression":{"expression":{"id":13808,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"20755:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13809,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20765:8:53","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":2258,"src":"20755:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20724:50:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":13811,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13727,"src":"21205:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13812,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21214:10:53","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":2327,"src":"21205:19:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13815,"indexExpression":{"expression":{"id":13813,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"21225:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13814,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21235:8:53","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":2258,"src":"21225:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21205:39:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21245:18:53","memberName":"computeRateRoundUp","nodeType":"MemberAccess","referencedDeclaration":3445,"src":"21205:58:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":13817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21205:60:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13804,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13737,"src":"20659:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20684:22:53","memberName":"toRawUndoRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":3107,"src":"20659:47:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":13818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20659:620:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20637:642:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13820,"nodeType":"ExpressionStatement","src":"20637:642:53"},{"expression":{"id":13828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":13821,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13739,"src":"21295:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13822,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13741,"src":"21308:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13823,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"21294:27:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"expression":{"id":13824,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13721,"src":"21325:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13825,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21341:14:53","memberName":"amountGivenRaw","nodeType":"MemberAccess","referencedDeclaration":2351,"src":"21325:30:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13826,"name":"amountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13735,"src":"21357:19:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13827,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21324:53:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"21294:83:53","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13829,"nodeType":"ExpressionStatement","src":"21294:83:53"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13830,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13741,"src":"21396:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":13831,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13721,"src":"21411:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13832,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21427:8:53","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":2353,"src":"21411:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21396:39:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13841,"nodeType":"IfStatement","src":"21392:134:53","trueBody":{"id":13840,"nodeType":"Block","src":"21437:89:53","statements":[{"errorCall":{"arguments":[{"id":13835,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13741,"src":"21472:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13836,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13721,"src":"21486:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13837,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21502:8:53","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":2353,"src":"21486:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13834,"name":"SwapLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1127,"src":"21462:9:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":13838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21462:49:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13839,"nodeType":"RevertStatement","src":"21455:56:53"}]}}]}},{"expression":{"arguments":[{"expression":{"id":13902,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13721,"src":"22993:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13903,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23009:7:53","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":2346,"src":"22993:23:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":13904,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13739,"src":"23018:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13901,"name":"_takeDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16529,"src":"22983:9:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":13905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22983:47:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13906,"nodeType":"ExpressionStatement","src":"22983:47:53"},{"expression":{"arguments":[{"expression":{"id":13908,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13721,"src":"23054:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13909,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23070:8:53","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":2349,"src":"23054:24:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":13910,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13741,"src":"23080:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13907,"name":"_supplyCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16512,"src":"23040:13:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":13911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23040:53:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13912,"nodeType":"ExpressionStatement","src":"23040:53:53"},{"expression":{"id":13930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":13913,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13745,"src":"23315:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$13717_memory_ptr","typeString":"struct Vault.SwapInternalLocals memory"}},"id":13915,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"23322:21:53","memberName":"totalSwapFeeAmountRaw","nodeType":"MemberAccess","referencedDeclaration":13714,"src":"23315:28:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13916,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13745,"src":"23345:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$13717_memory_ptr","typeString":"struct Vault.SwapInternalLocals memory"}},"id":13917,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"23352:21:53","memberName":"aggregateFeeAmountRaw","nodeType":"MemberAccess","referencedDeclaration":13716,"src":"23345:28:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13918,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"23314:60:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13920,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13727,"src":"23425:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},{"expression":{"id":13921,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13745,"src":"23447:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$13717_memory_ptr","typeString":"struct Vault.SwapInternalLocals memory"}},"id":13922,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23454:26:53","memberName":"totalSwapFeeAmountScaled18","nodeType":"MemberAccess","referencedDeclaration":13712,"src":"23447:33:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13923,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13721,"src":"23494:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13924,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23510:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2343,"src":"23494:20:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13925,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13721,"src":"23528:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13926,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23544:7:53","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":2346,"src":"23528:23:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"expression":{"id":13927,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"23565:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13928,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23575:7:53","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":2256,"src":"23565:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13919,"name":"_computeAndChargeAggregateSwapFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15389,"src":"23377:34:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PoolData_$2331_memory_ptr_$_t_uint256_$_t_address_$_t_contract$_IERC20_$6980_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct PoolData memory,uint256,address,contract IERC20,uint256) returns (uint256,uint256)"}},"id":13929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23377:215:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"23314:278:53","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13931,"nodeType":"ExpressionStatement","src":"23314:278:53"},{"expression":{"arguments":[{"expression":{"id":13935,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"23693:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13936,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23703:7:53","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":2256,"src":"23693:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":13937,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13727,"src":"23724:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13938,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23733:11:53","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":2321,"src":"23724:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13941,"indexExpression":{"expression":{"id":13939,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"23745:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13940,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23755:7:53","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":2256,"src":"23745:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23724:39:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":13942,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13739,"src":"23766:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23724:53:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":13944,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13745,"src":"23780:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$13717_memory_ptr","typeString":"struct Vault.SwapInternalLocals memory"}},"id":13945,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23787:21:53","memberName":"aggregateFeeAmountRaw","nodeType":"MemberAccess","referencedDeclaration":13716,"src":"23780:28:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23724:84:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13947,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"23822:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2334_$","typeString":"type(enum Rounding)"}},"id":13948,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"23831:10:53","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":2333,"src":"23822:19:53","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"expression":{"id":13932,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13727,"src":"23647:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13934,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23656:23:53","memberName":"updateRawAndLiveBalance","nodeType":"MemberAccess","referencedDeclaration":20105,"src":"23647:32:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_PoolData_$2331_memory_ptr_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$2334_$returns$__$attached_to$_t_struct$_PoolData_$2331_memory_ptr_$","typeString":"function (struct PoolData memory,uint256,uint256,enum Rounding) pure"}},"id":13949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23647:204:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13950,"nodeType":"ExpressionStatement","src":"23647:204:53"},{"expression":{"arguments":[{"expression":{"id":13954,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"23907:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13955,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23917:8:53","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":2258,"src":"23907:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":13956,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13727,"src":"23939:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13957,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23948:11:53","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":2321,"src":"23939:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13960,"indexExpression":{"expression":{"id":13958,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"23960:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13959,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23970:8:53","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":2258,"src":"23960:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23939:40:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":13961,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13741,"src":"23982:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23939:55:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13963,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"24008:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2334_$","typeString":"type(enum Rounding)"}},"id":13964,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"24017:10:53","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":2333,"src":"24008:19:53","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"expression":{"id":13951,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13727,"src":"23861:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13953,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23870:23:53","memberName":"updateRawAndLiveBalance","nodeType":"MemberAccess","referencedDeclaration":20105,"src":"23861:32:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_PoolData_$2331_memory_ptr_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$2334_$returns$__$attached_to$_t_struct$_PoolData_$2331_memory_ptr_$","typeString":"function (struct PoolData memory,uint256,uint256,enum Rounding) pure"}},"id":13965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23861:176:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13966,"nodeType":"ExpressionStatement","src":"23861:176:53"},{"assignments":[13970],"declarations":[{"constant":false,"id":13970,"mutability":"mutable","name":"poolBalances","nameLocation":"24187:12:53","nodeType":"VariableDeclaration","scope":14029,"src":"24121:78:53","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":13969,"keyName":"tokenIndex","keyNameLocation":"24137:10:53","keyType":{"id":13967,"name":"uint256","nodeType":"ElementaryTypeName","src":"24129:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"24121:57:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"24159:18:53","valueType":{"id":13968,"name":"bytes32","nodeType":"ElementaryTypeName","src":"24151:7:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"}],"id":13975,"initialValue":{"baseExpression":{"id":13971,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17383,"src":"24202:18:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":13974,"indexExpression":{"expression":{"id":13972,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13721,"src":"24234:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":13973,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24250:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2343,"src":"24234:20:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24202:62:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"24121:143:53"},{"expression":{"id":13993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":13976,"name":"poolBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13970,"src":"24274:12:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":13979,"indexExpression":{"expression":{"id":13977,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"24287:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13978,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24297:7:53","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":2256,"src":"24287:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24274:31:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":13982,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13727,"src":"24356:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13983,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24365:11:53","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":2321,"src":"24356:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13986,"indexExpression":{"expression":{"id":13984,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"24377:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13985,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24387:7:53","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":2256,"src":"24377:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24356:39:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":13987,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13727,"src":"24409:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":13988,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24418:20:53","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"24409:29:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13991,"indexExpression":{"expression":{"id":13989,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"24439:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13990,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24449:7:53","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":2256,"src":"24439:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24409:48:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13980,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3032,"src":"24308:18:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$3032_$","typeString":"type(library PackedTokenBalance)"}},"id":13981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24327:15:53","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":2991,"src":"24308:34:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":13992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24308:159:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"24274:193:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":13994,"nodeType":"ExpressionStatement","src":"24274:193:53"},{"expression":{"id":14012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":13995,"name":"poolBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13970,"src":"24477:12:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":13998,"indexExpression":{"expression":{"id":13996,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"24490:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":13997,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24500:8:53","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":2258,"src":"24490:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24477:32:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":14001,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13727,"src":"24560:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14002,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24569:11:53","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":2321,"src":"24560:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14005,"indexExpression":{"expression":{"id":14003,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"24581:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":14004,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24591:8:53","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":2258,"src":"24581:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24560:40:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":14006,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13727,"src":"24614:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14007,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24623:20:53","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"24614:29:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14010,"indexExpression":{"expression":{"id":14008,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"24644:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":14009,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24654:8:53","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":2258,"src":"24644:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24614:49:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13999,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3032,"src":"24512:18:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$3032_$","typeString":"type(library PackedTokenBalance)"}},"id":14000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24531:15:53","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":2991,"src":"24512:34:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":14011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24512:161:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"24477:196:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":14013,"nodeType":"ExpressionStatement","src":"24477:196:53"},{"eventCall":{"arguments":[{"expression":{"id":14015,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13721,"src":"24739:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":14016,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24755:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2343,"src":"24739:20:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14017,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13721,"src":"24773:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":14018,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24789:7:53","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":2346,"src":"24773:23:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"expression":{"id":14019,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13721,"src":"24810:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":14020,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24826:8:53","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":2349,"src":"24810:24:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":14021,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13739,"src":"24848:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14022,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13741,"src":"24873:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14023,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"24899:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":14024,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24909:17:53","memberName":"swapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2262,"src":"24899:27:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14025,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13745,"src":"24940:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$13717_memory_ptr","typeString":"struct Vault.SwapInternalLocals memory"}},"id":14026,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24947:21:53","memberName":"totalSwapFeeAmountRaw","nodeType":"MemberAccess","referencedDeclaration":13714,"src":"24940:28:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14014,"name":"Swap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"24721:4:53","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$6980_$_t_contract$_IERC20_$6980_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,contract IERC20,uint256,uint256,uint256,uint256)"}},"id":14027,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24721:257:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14028,"nodeType":"EmitStatement","src":"24716:262:53"}]},"documentation":{"id":13718,"nodeType":"StructuredDocumentation","src":"18278:441:53","text":" @dev Main non-reentrant portion of the swap, which calls the pool hook and updates accounting. `vaultSwapParams`\n are passed to the pool's `onSwap` hook.\n Preconditions: complete `SwapParams`, `SwapState`, and `PoolData`.\n Side effects: mutates balancesRaw and balancesLiveScaled18 in `poolData`.\n Updates `_aggregateFeeAmounts`, and `_poolTokenBalances` in storage.\n Emits Swap event."},"id":14030,"implemented":true,"kind":"function","modifiers":[{"id":13733,"kind":"modifierInvocation","modifierName":{"id":13732,"name":"nonReentrant","nameLocations":["18934:12:53"],"nodeType":"IdentifierPath","referencedDeclaration":6146,"src":"18934:12:53"},"nodeType":"ModifierInvocation","src":"18934:12:53"}],"name":"_swap","nameLocation":"18733:5:53","nodeType":"FunctionDefinition","parameters":{"id":13731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13721,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"18771:15:53","nodeType":"VariableDeclaration","scope":14030,"src":"18748:38:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":13720,"nodeType":"UserDefinedTypeName","pathNode":{"id":13719,"name":"VaultSwapParams","nameLocations":["18748:15:53"],"nodeType":"IdentifierPath","referencedDeclaration":2356,"src":"18748:15:53"},"referencedDeclaration":2356,"src":"18748:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":13724,"mutability":"mutable","name":"swapState","nameLocation":"18813:9:53","nodeType":"VariableDeclaration","scope":14030,"src":"18796:26:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":13723,"nodeType":"UserDefinedTypeName","pathNode":{"id":13722,"name":"SwapState","nameLocations":["18796:9:53"],"nodeType":"IdentifierPath","referencedDeclaration":2263,"src":"18796:9:53"},"referencedDeclaration":2263,"src":"18796:9:53","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"},{"constant":false,"id":13727,"mutability":"mutable","name":"poolData","nameLocation":"18848:8:53","nodeType":"VariableDeclaration","scope":14030,"src":"18832:24:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":13726,"nodeType":"UserDefinedTypeName","pathNode":{"id":13725,"name":"PoolData","nameLocations":["18832:8:53"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"18832:8:53"},"referencedDeclaration":2331,"src":"18832:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":13730,"mutability":"mutable","name":"poolSwapParams","nameLocation":"18888:14:53","nodeType":"VariableDeclaration","scope":14030,"src":"18866:36:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":13729,"nodeType":"UserDefinedTypeName","pathNode":{"id":13728,"name":"PoolSwapParams","nameLocations":["18866:14:53"],"nodeType":"IdentifierPath","referencedDeclaration":2374,"src":"18866:14:53"},"referencedDeclaration":2374,"src":"18866:14:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"18738:170:53"},"returnParameters":{"id":13742,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13735,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"18985:19:53","nodeType":"VariableDeclaration","scope":14030,"src":"18977:27:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13734,"name":"uint256","nodeType":"ElementaryTypeName","src":"18977:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13737,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"19026:24:53","nodeType":"VariableDeclaration","scope":14030,"src":"19018:32:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13736,"name":"uint256","nodeType":"ElementaryTypeName","src":"19018:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13739,"mutability":"mutable","name":"amountInRaw","nameLocation":"19072:11:53","nodeType":"VariableDeclaration","scope":14030,"src":"19064:19:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13738,"name":"uint256","nodeType":"ElementaryTypeName","src":"19064:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13741,"mutability":"mutable","name":"amountOutRaw","nameLocation":"19105:12:53","nodeType":"VariableDeclaration","scope":14030,"src":"19097:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13740,"name":"uint256","nodeType":"ElementaryTypeName","src":"19097:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18963:164:53"},"scope":16391,"src":"18724:6261:53","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[2091],"body":{"id":14191,"nodeType":"Block","src":"25483:3988:53","statements":[{"expression":{"arguments":[{"expression":{"id":14051,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"25826:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14052,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25833:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"25826:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14050,"name":"_ensureUnpaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16619,"src":"25810:15:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":14053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25810:28:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14054,"nodeType":"ExpressionStatement","src":"25810:28:53"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14058,"name":"_sessionIdSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17493,"src":"25875:14:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function () view returns (StorageSlotExtension.Uint256SlotType)"}},"id":14059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25875:16:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":14060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25892:5:53","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":6500,"src":"25875:22:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$6391_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":14061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25875:24:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14062,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"25901:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14063,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25908:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"25901:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"74727565","id":14064,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25914:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14055,"name":"_addLiquidityCalled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17482,"src":"25848:19:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460_$","typeString":"function () view returns (UintToAddressToBooleanMappingSlot)"}},"id":14056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25848:21:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460","typeString":"UintToAddressToBooleanMappingSlot"}},"id":14057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25870:4:53","memberName":"tSet","nodeType":"MemberAccess","referencedDeclaration":3671,"src":"25848:26:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460_$_t_uint256_$_t_address_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460_$","typeString":"function (UintToAddressToBooleanMappingSlot,uint256,address,bool)"}},"id":14065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25848:71:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14066,"nodeType":"ExpressionStatement","src":"25848:71:53"},{"assignments":[14069],"declarations":[{"constant":false,"id":14069,"mutability":"mutable","name":"poolData","nameLocation":"26402:8:53","nodeType":"VariableDeclaration","scope":14191,"src":"26386:24:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":14068,"nodeType":"UserDefinedTypeName","pathNode":{"id":14067,"name":"PoolData","nameLocations":["26386:8:53"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"26386:8:53"},"referencedDeclaration":2331,"src":"26386:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"id":14076,"initialValue":{"arguments":[{"expression":{"id":14071,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"26455:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14072,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26462:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"26455:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14073,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"26468:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2334_$","typeString":"type(enum Rounding)"}},"id":14074,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"26477:8:53","memberName":"ROUND_UP","nodeType":"MemberAccess","referencedDeclaration":2332,"src":"26468:17:53","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"id":14070,"name":"_loadPoolDataUpdatingBalancesAndYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17002,"src":"26413:41:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_Rounding_$2334_$returns$_t_struct$_PoolData_$2331_memory_ptr_$","typeString":"function (address,enum Rounding) returns (struct PoolData memory)"}},"id":14075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26413:73:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"nodeType":"VariableDeclarationStatement","src":"26386:100:53"},{"expression":{"arguments":[{"expression":{"expression":{"id":14080,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14069,"src":"26532:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14081,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26541:6:53","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":2314,"src":"26532:15:53","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":14082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26548:6:53","memberName":"length","nodeType":"MemberAccess","src":"26532:22:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":14083,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"26556:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14084,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26563:12:53","memberName":"maxAmountsIn","nodeType":"MemberAccess","referencedDeclaration":2417,"src":"26556:19:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26576:6:53","memberName":"length","nodeType":"MemberAccess","src":"26556:26:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14077,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2881,"src":"26496:12:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$2881_$","typeString":"type(library InputHelpers)"}},"id":14079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26509:22:53","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":2673,"src":"26496:35:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":14086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26496:87:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14087,"nodeType":"ExpressionStatement","src":"26496:87:53"},{"assignments":[14092],"declarations":[{"constant":false,"id":14092,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"26958:20:53","nodeType":"VariableDeclaration","scope":14191,"src":"26941:37:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14090,"name":"uint256","nodeType":"ElementaryTypeName","src":"26941:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14091,"nodeType":"ArrayTypeName","src":"26941:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":14101,"initialValue":{"arguments":[{"expression":{"id":14096,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14069,"src":"27052:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14097,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27061:21:53","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":2330,"src":"27052:30:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":14098,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14069,"src":"27096:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14099,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27105:10:53","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":2327,"src":"27096:19:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"expression":{"id":14093,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"26981:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14094,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26988:12:53","memberName":"maxAmountsIn","nodeType":"MemberAccess","referencedDeclaration":2417,"src":"26981:19:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27001:37:53","memberName":"copyToScaled18ApplyRateRoundDownArray","nodeType":"MemberAccess","referencedDeclaration":3282,"src":"26981:57:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":14100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26981:144:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"26941:184:53"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":14102,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14069,"src":"27140:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14103,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27149:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"27140:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":14104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27164:28:53","memberName":"shouldCallBeforeAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":17806,"src":"27140:52:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":14105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27140:54:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14143,"nodeType":"IfStatement","src":"27136:890:53","trueBody":{"id":14142,"nodeType":"Block","src":"27196:830:53","statements":[{"expression":{"arguments":[{"expression":{"id":14109,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"27269:3:53","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27273:6:53","memberName":"sender","nodeType":"MemberAccess","src":"27269:10:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14111,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14092,"src":"27297:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":14112,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"27335:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},{"id":14113,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14069,"src":"27359:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},{"baseExpression":{"id":14114,"name":"_hooksContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17363,"src":"27385:15:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$300_$","typeString":"mapping(address => contract IHooks)"}},"id":14117,"indexExpression":{"expression":{"id":14115,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"27401:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14116,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27408:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"27401:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27385:28:53","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"},{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}],"expression":{"id":14106,"name":"HooksConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18601,"src":"27210:14:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_HooksConfigLib_$18601_$","typeString":"type(library HooksConfigLib)"}},"id":14108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27225:26:53","memberName":"callBeforeAddLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":18266,"src":"27210:41:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_struct$_AddLiquidityParams_$2425_memory_ptr_$_t_struct$_PoolData_$2331_memory_ptr_$_t_contract$_IHooks_$300_$returns$__$","typeString":"function (address,uint256[] memory,struct AddLiquidityParams memory,struct PoolData memory,contract IHooks)"}},"id":14118,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27210:217:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14119,"nodeType":"ExpressionStatement","src":"27210:217:53"},{"expression":{"arguments":[{"baseExpression":{"id":14123,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17383,"src":"27688:18:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":14126,"indexExpression":{"expression":{"id":14124,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"27707:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14125,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27714:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"27707:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27688:31:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},{"expression":{"id":14127,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"27721:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2334_$","typeString":"type(enum Rounding)"}},"id":14128,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27730:8:53","memberName":"ROUND_UP","nodeType":"MemberAccess","referencedDeclaration":2332,"src":"27721:17:53","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"expression":{"id":14120,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14069,"src":"27656:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14122,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27665:22:53","memberName":"reloadBalancesAndRates","nodeType":"MemberAccess","referencedDeclaration":19998,"src":"27656:31:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PoolData_$2331_memory_ptr_$_t_mapping$_t_uint256_$_t_bytes32_$_$_t_enum$_Rounding_$2334_$returns$__$attached_to$_t_struct$_PoolData_$2331_memory_ptr_$","typeString":"function (struct PoolData memory,mapping(uint256 => bytes32),enum Rounding) view"}},"id":14129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27656:83:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14130,"nodeType":"ExpressionStatement","src":"27656:83:53"},{"expression":{"id":14140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14131,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14092,"src":"27836:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14135,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14069,"src":"27934:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14136,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27943:21:53","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":2330,"src":"27934:30:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":14137,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14069,"src":"27982:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14138,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27991:10:53","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":2327,"src":"27982:19:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"expression":{"id":14132,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"27859:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14133,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27866:12:53","memberName":"maxAmountsIn","nodeType":"MemberAccess","referencedDeclaration":2417,"src":"27859:19:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27879:37:53","memberName":"copyToScaled18ApplyRateRoundDownArray","nodeType":"MemberAccess","referencedDeclaration":3282,"src":"27859:57:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":14139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27859:156:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"27836:179:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14141,"nodeType":"ExpressionStatement","src":"27836:179:53"}]}},{"assignments":[14148],"declarations":[{"constant":false,"id":14148,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"28599:17:53","nodeType":"VariableDeclaration","scope":14191,"src":"28582:34:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14146,"name":"uint256","nodeType":"ElementaryTypeName","src":"28582:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14147,"nodeType":"ArrayTypeName","src":"28582:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":14149,"nodeType":"VariableDeclarationStatement","src":"28582:34:53"},{"expression":{"id":14160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":14150,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14044,"src":"28627:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":14151,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14148,"src":"28638:17:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":14152,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14046,"src":"28657:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14153,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14048,"src":"28671:10:53","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":14154,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"28626:56:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory,uint256,bytes memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":14156,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14069,"src":"28712:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},{"id":14157,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"28734:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},{"id":14158,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14092,"src":"28754:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":14155,"name":"_addLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14640,"src":"28685:13:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PoolData_$2331_memory_ptr_$_t_struct$_AddLiquidityParams_$2425_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function (struct PoolData memory,struct AddLiquidityParams memory,uint256[] memory) returns (uint256[] memory,uint256[] memory,uint256,bytes memory)"}},"id":14159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28685:99:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory,uint256,bytes memory)"}},"src":"28626:158:53","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14161,"nodeType":"ExpressionStatement","src":"28626:158:53"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":14162,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14069,"src":"28982:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14163,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28991:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"28982:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":14164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29006:27:53","memberName":"shouldCallAfterAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":17849,"src":"28982:51:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":14165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28982:53:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14190,"nodeType":"IfStatement","src":"28978:487:53","trueBody":{"id":14189,"nodeType":"Block","src":"29037:428:53","statements":[{"assignments":[14168],"declarations":[{"constant":false,"id":14168,"mutability":"mutable","name":"hooksContract","nameLocation":"29119:13:53","nodeType":"VariableDeclaration","scope":14189,"src":"29112:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"},"typeName":{"id":14167,"nodeType":"UserDefinedTypeName","pathNode":{"id":14166,"name":"IHooks","nameLocations":["29112:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":300,"src":"29112:6:53"},"referencedDeclaration":300,"src":"29112:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"visibility":"internal"}],"id":14173,"initialValue":{"baseExpression":{"id":14169,"name":"_hooksContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17363,"src":"29135:15:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$300_$","typeString":"mapping(address => contract IHooks)"}},"id":14172,"indexExpression":{"expression":{"id":14170,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"29151:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14171,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29158:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"29151:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29135:28:53","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"nodeType":"VariableDeclarationStatement","src":"29112:51:53"},{"expression":{"id":14187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14174,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14044,"src":"29178:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14178,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"29257:3:53","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29261:6:53","memberName":"sender","nodeType":"MemberAccess","src":"29257:10:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14180,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14148,"src":"29285:17:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":14181,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14044,"src":"29320:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":14182,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14046,"src":"29347:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14183,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"29377:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},{"id":14184,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14069,"src":"29401:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},{"id":14185,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14168,"src":"29427:13:53","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"},{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}],"expression":{"expression":{"id":14175,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14069,"src":"29190:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14176,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29199:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"29190:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":14177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29214:25:53","memberName":"callAfterAddLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":18383,"src":"29190:49:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_PoolConfigBits_$2184_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_struct$_AddLiquidityParams_$2425_memory_ptr_$_t_struct$_PoolData_$2331_memory_ptr_$_t_contract$_IHooks_$300_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits,address,uint256[] memory,uint256[] memory,uint256,struct AddLiquidityParams memory,struct PoolData memory,contract IHooks) returns (uint256[] memory)"}},"id":14186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29190:264:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"29178:276:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14188,"nodeType":"ExpressionStatement","src":"29178:276:53"}]}}]},"documentation":{"id":14031,"nodeType":"StructuredDocumentation","src":"25203:26:53","text":"@inheritdoc IVaultMain"},"functionSelector":"4af29ec4","id":14192,"implemented":true,"kind":"function","modifiers":[{"id":14037,"kind":"modifierInvocation","modifierName":{"id":14036,"name":"onlyWhenUnlocked","nameLocations":["25329:16:53"],"nodeType":"IdentifierPath","referencedDeclaration":16469,"src":"25329:16:53"},"nodeType":"ModifierInvocation","src":"25329:16:53"},{"arguments":[{"expression":{"id":14039,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"25374:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14040,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25381:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"25374:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":14041,"kind":"modifierInvocation","modifierName":{"id":14038,"name":"withInitializedPool","nameLocations":["25354:19:53"],"nodeType":"IdentifierPath","referencedDeclaration":16752,"src":"25354:19:53"},"nodeType":"ModifierInvocation","src":"25354:32:53"}],"name":"addLiquidity","nameLocation":"25243:12:53","nodeType":"FunctionDefinition","parameters":{"id":14035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14034,"mutability":"mutable","name":"params","nameLocation":"25291:6:53","nodeType":"VariableDeclaration","scope":14192,"src":"25265:32:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":14033,"nodeType":"UserDefinedTypeName","pathNode":{"id":14032,"name":"AddLiquidityParams","nameLocations":["25265:18:53"],"nodeType":"IdentifierPath","referencedDeclaration":2425,"src":"25265:18:53"},"referencedDeclaration":2425,"src":"25265:18:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"}],"src":"25255:48:53"},"returnParameters":{"id":14049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14044,"mutability":"mutable","name":"amountsIn","nameLocation":"25421:9:53","nodeType":"VariableDeclaration","scope":14192,"src":"25404:26:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14042,"name":"uint256","nodeType":"ElementaryTypeName","src":"25404:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14043,"nodeType":"ArrayTypeName","src":"25404:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":14046,"mutability":"mutable","name":"bptAmountOut","nameLocation":"25440:12:53","nodeType":"VariableDeclaration","scope":14192,"src":"25432:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14045,"name":"uint256","nodeType":"ElementaryTypeName","src":"25432:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14048,"mutability":"mutable","name":"returnData","nameLocation":"25467:10:53","nodeType":"VariableDeclaration","scope":14192,"src":"25454:23:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":14047,"name":"bytes","nodeType":"ElementaryTypeName","src":"25454:5:53","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"25403:75:53"},"scope":16391,"src":"25234:4237:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"canonicalName":"Vault.LiquidityLocals","id":14199,"members":[{"constant":false,"id":14194,"mutability":"mutable","name":"numTokens","nameLocation":"29610:9:53","nodeType":"VariableDeclaration","scope":14199,"src":"29602:17:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14193,"name":"uint256","nodeType":"ElementaryTypeName","src":"29602:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14196,"mutability":"mutable","name":"aggregateSwapFeeAmountRaw","nameLocation":"29637:25:53","nodeType":"VariableDeclaration","scope":14199,"src":"29629:33:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14195,"name":"uint256","nodeType":"ElementaryTypeName","src":"29629:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14198,"mutability":"mutable","name":"tokenIndex","nameLocation":"29680:10:53","nodeType":"VariableDeclaration","scope":14199,"src":"29672:18:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14197,"name":"uint256","nodeType":"ElementaryTypeName","src":"29672:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"LiquidityLocals","nameLocation":"29576:15:53","nodeType":"StructDefinition","scope":16391,"src":"29569:128:53","visibility":"public"},{"body":{"id":14639,"nodeType":"Block","src":"30548:6500:53","statements":[{"assignments":[14226],"declarations":[{"constant":false,"id":14226,"mutability":"mutable","name":"locals","nameLocation":"30581:6:53","nodeType":"VariableDeclaration","scope":14639,"src":"30558:29:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals"},"typeName":{"id":14225,"nodeType":"UserDefinedTypeName","pathNode":{"id":14224,"name":"LiquidityLocals","nameLocations":["30558:15:53"],"nodeType":"IdentifierPath","referencedDeclaration":14199,"src":"30558:15:53"},"referencedDeclaration":14199,"src":"30558:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_storage_ptr","typeString":"struct Vault.LiquidityLocals"}},"visibility":"internal"}],"id":14227,"nodeType":"VariableDeclarationStatement","src":"30558:29:53"},{"expression":{"id":14234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14228,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14226,"src":"30597:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":14230,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"30604:9:53","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":14194,"src":"30597:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":14231,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14203,"src":"30616:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14232,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30625:6:53","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":2314,"src":"30616:15:53","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":14233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30632:6:53","memberName":"length","nodeType":"MemberAccess","src":"30616:22:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30597:41:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14235,"nodeType":"ExpressionStatement","src":"30597:41:53"},{"expression":{"id":14243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14236,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14215,"src":"30648:12:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14240,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14226,"src":"30677:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":14241,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30684:9:53","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":14194,"src":"30677:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14239,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"30663:13:53","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":14237,"name":"uint256","nodeType":"ElementaryTypeName","src":"30667:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14238,"nodeType":"ArrayTypeName","src":"30667:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":14242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30663:31:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"30648:46:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14244,"nodeType":"ExpressionStatement","src":"30648:46:53"},{"assignments":[14249],"declarations":[{"constant":false,"id":14249,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"30821:14:53","nodeType":"VariableDeclaration","scope":14639,"src":"30804:31:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14247,"name":"uint256","nodeType":"ElementaryTypeName","src":"30804:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14248,"nodeType":"ArrayTypeName","src":"30804:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":14250,"nodeType":"VariableDeclarationStatement","src":"30804:31:53"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"},"id":14255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14251,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"30850:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14252,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30857:4:53","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2422,"src":"30850:11:53","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":14253,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2409,"src":"30865:16:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$2409_$","typeString":"type(enum AddLiquidityKind)"}},"id":14254,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"30882:12:53","memberName":"PROPORTIONAL","nodeType":"MemberAccess","referencedDeclaration":2404,"src":"30865:29:53","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"}},"src":"30850:44:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"},"id":14288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14284,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"31344:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14285,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31351:4:53","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2422,"src":"31344:11:53","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":14286,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2409,"src":"31359:16:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$2409_$","typeString":"type(enum AddLiquidityKind)"}},"id":14287,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"31376:8:53","memberName":"DONATION","nodeType":"MemberAccess","referencedDeclaration":2407,"src":"31359:25:53","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"}},"src":"31344:40:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"},"id":14318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14314,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"31627:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14315,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31634:4:53","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2422,"src":"31627:11:53","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":14316,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2409,"src":"31642:16:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$2409_$","typeString":"type(enum AddLiquidityKind)"}},"id":14317,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"31659:10:53","memberName":"UNBALANCED","nodeType":"MemberAccess","referencedDeclaration":2405,"src":"31642:27:53","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"}},"src":"31627:42:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"},"id":14366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14362,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"32398:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14363,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32405:4:53","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2422,"src":"32398:11:53","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":14364,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2409,"src":"32413:16:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$2409_$","typeString":"type(enum AddLiquidityKind)"}},"id":14365,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32430:22:53","memberName":"SINGLE_TOKEN_EXACT_OUT","nodeType":"MemberAccess","referencedDeclaration":2406,"src":"32413:39:53","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"}},"src":"32398:54:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"},"id":14425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14421,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"33189:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14422,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33196:4:53","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2422,"src":"33189:11:53","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":14423,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2409,"src":"33204:16:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$2409_$","typeString":"type(enum AddLiquidityKind)"}},"id":14424,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"33221:6:53","memberName":"CUSTOM","nodeType":"MemberAccess","referencedDeclaration":2408,"src":"33204:23:53","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"}},"src":"33189:38:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":14459,"nodeType":"Block","src":"33769:57:53","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14456,"name":"InvalidAddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1140,"src":"33790:23:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":14457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33790:25:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14458,"nodeType":"RevertStatement","src":"33783:32:53"}]},"id":14460,"nodeType":"IfStatement","src":"33185:641:53","trueBody":{"id":14455,"nodeType":"Block","src":"33229:534:53","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":14426,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14203,"src":"33243:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14429,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33252:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"33243:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":14430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33267:32:53","memberName":"requireAddLiquidityCustomEnabled","nodeType":"MemberAccess","referencedDeclaration":19018,"src":"33243:56:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$__$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure"}},"id":14431,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33243:58:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14432,"nodeType":"ExpressionStatement","src":"33243:58:53"},{"expression":{"id":14453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":14433,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14218,"src":"33400:17:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":14434,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14220,"src":"33419:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14435,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14249,"src":"33433:14:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":14436,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14222,"src":"33449:10:53","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":14437,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"33399:61:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,uint256[] memory,bytes memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14443,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"33550:3:53","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33554:6:53","memberName":"sender","nodeType":"MemberAccess","src":"33550:10:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14445,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14209,"src":"33582:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":14446,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"33624:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14447,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33631:15:53","memberName":"minBptAmountOut","nodeType":"MemberAccess","referencedDeclaration":2419,"src":"33624:22:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14448,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14203,"src":"33668:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14449,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33677:20:53","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"33668:29:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":14450,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"33719:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14451,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33726:8:53","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":2424,"src":"33719:15:53","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"expression":{"id":14439,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"33478:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14440,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33485:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"33478:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14438,"name":"IPoolLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":356,"src":"33463:14:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPoolLiquidity_$356_$","typeString":"type(contract IPoolLiquidity)"}},"id":14441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33463:27:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPoolLiquidity_$356","typeString":"contract IPoolLiquidity"}},"id":14442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33508:20:53","memberName":"onAddLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":329,"src":"33463:65:53","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function (address,uint256[] memory,uint256,uint256[] memory,bytes memory) external returns (uint256[] memory,uint256,uint256[] memory,bytes memory)"}},"id":14452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33463:289:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,uint256[] memory,bytes memory)"}},"src":"33399:353:53","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14454,"nodeType":"ExpressionStatement","src":"33399:353:53"}]}},"id":14461,"nodeType":"IfStatement","src":"32394:1432:53","trueBody":{"id":14420,"nodeType":"Block","src":"32454:725:53","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":14367,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14203,"src":"32468:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14370,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32477:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"32468:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":14371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32492:33:53","memberName":"requireUnbalancedLiquidityEnabled","nodeType":"MemberAccess","referencedDeclaration":18956,"src":"32468:57:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$__$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure"}},"id":14372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32468:59:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14373,"nodeType":"ExpressionStatement","src":"32468:59:53"},{"expression":{"id":14377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14374,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14220,"src":"32542:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":14375,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"32557:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14376,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32564:15:53","memberName":"minBptAmountOut","nodeType":"MemberAccess","referencedDeclaration":2419,"src":"32557:22:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32542:37:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14378,"nodeType":"ExpressionStatement","src":"32542:37:53"},{"expression":{"id":14386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14379,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14226,"src":"32593:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":14381,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"32600:10:53","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":14198,"src":"32593:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":14384,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14209,"src":"32646:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"id":14382,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2881,"src":"32613:12:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$2881_$","typeString":"type(library InputHelpers)"}},"id":14383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32626:19:53","memberName":"getSingleInputIndex","nodeType":"MemberAccess","referencedDeclaration":2754,"src":"32613:32:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory) pure returns (uint256)"}},"id":14385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32613:54:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32593:74:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14387,"nodeType":"ExpressionStatement","src":"32593:74:53"},{"expression":{"id":14390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14388,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14218,"src":"32682:17:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14389,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14209,"src":"32702:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"32682:40:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14391,"nodeType":"ExpressionStatement","src":"32682:40:53"},{"expression":{"id":14418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":14392,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14218,"src":"32737:17:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14395,"indexExpression":{"expression":{"id":14393,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14226,"src":"32755:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":14394,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32762:10:53","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":14198,"src":"32755:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"32737:36:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14396,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14249,"src":"32775:14:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":14397,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"32736:54:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14400,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14203,"src":"32883:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14401,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32892:20:53","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"32883:29:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":14402,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14226,"src":"32934:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":14403,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32941:10:53","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":14198,"src":"32934:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14404,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14220,"src":"32973:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":14406,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"33020:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14407,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33027:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"33020:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14405,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20375,"src":"33007:12:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":14408,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33007:25:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":14409,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14203,"src":"33054:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14410,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33063:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"33054:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":14411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33078:26:53","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":19188,"src":"33054:50:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":14412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33054:52:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":14414,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"33138:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14415,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33145:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"33138:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14413,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90,"src":"33128:9:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePool_$90_$","typeString":"type(contract IBasePool)"}},"id":14416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33128:22:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}],"expression":{"id":14398,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12981,"src":"32793:12:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BasePoolMath_$12981_$","typeString":"type(library BasePoolMath)"}},"id":14399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32823:38:53","memberName":"computeAddLiquiditySingleTokenExactOut","nodeType":"MemberAccess","referencedDeclaration":12660,"src":"32793:68:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_contract$_IBasePool_$90_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256,uint256,uint256,uint256,contract IBasePool) view returns (uint256,uint256[] memory)"}},"id":14417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32793:375:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory)"}},"src":"32736:432:53","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14419,"nodeType":"ExpressionStatement","src":"32736:432:53"}]}},"id":14462,"nodeType":"IfStatement","src":"31623:2203:53","trueBody":{"id":14361,"nodeType":"Block","src":"31671:717:53","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":14319,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14203,"src":"31685:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14322,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31694:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"31685:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":14323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31709:33:53","memberName":"requireUnbalancedLiquidityEnabled","nodeType":"MemberAccess","referencedDeclaration":18956,"src":"31685:57:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$__$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure"}},"id":14324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31685:59:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14325,"nodeType":"ExpressionStatement","src":"31685:59:53"},{"expression":{"id":14328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14326,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14218,"src":"31759:17:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14327,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14209,"src":"31779:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"31759:40:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14329,"nodeType":"ExpressionStatement","src":"31759:40:53"},{"expression":{"arguments":[{"expression":{"id":14333,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"32001:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14334,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32008:12:53","memberName":"maxAmountsIn","nodeType":"MemberAccess","referencedDeclaration":2417,"src":"32001:19:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":14335,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14215,"src":"32022:12:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"id":14330,"name":"ScalingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"31974:14:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ScalingHelpers_$3446_$","typeString":"type(library ScalingHelpers)"}},"id":14332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31989:11:53","memberName":"copyToArray","nodeType":"MemberAccess","referencedDeclaration":3152,"src":"31974:26:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (uint256[] memory,uint256[] memory) pure"}},"id":14336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31974:61:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14337,"nodeType":"ExpressionStatement","src":"31974:61:53"},{"expression":{"id":14359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":14338,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14220,"src":"32051:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14339,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14249,"src":"32065:14:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":14340,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"32050:30:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14343,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14203,"src":"32143:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14344,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32152:20:53","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"32143:29:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":14345,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14209,"src":"32190:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"arguments":[{"expression":{"id":14347,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"32241:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14348,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32248:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"32241:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14346,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20375,"src":"32228:12:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":14349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32228:25:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":14350,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14203,"src":"32271:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14351,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32280:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"32271:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":14352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32295:26:53","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":19188,"src":"32271:50:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":14353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32271:52:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":14355,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"32351:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14356,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32358:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"32351:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14354,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90,"src":"32341:9:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePool_$90_$","typeString":"type(contract IBasePool)"}},"id":14357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32341:22:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}],"expression":{"id":14341,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12981,"src":"32083:12:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BasePoolMath_$12981_$","typeString":"type(library BasePoolMath)"}},"id":14342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32096:29:53","memberName":"computeAddLiquidityUnbalanced","nodeType":"MemberAccess","referencedDeclaration":12552,"src":"32083:42:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_contract$_IBasePool_$90_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory,uint256,uint256,contract IBasePool) view returns (uint256,uint256[] memory)"}},"id":14358,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32083:294:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory)"}},"src":"32050:327:53","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14360,"nodeType":"ExpressionStatement","src":"32050:327:53"}]}},"id":14463,"nodeType":"IfStatement","src":"31340:2486:53","trueBody":{"id":14313,"nodeType":"Block","src":"31386:231:53","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":14289,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14203,"src":"31400:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14292,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31409:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"31400:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":14293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31424:22:53","memberName":"requireDonationEnabled","nodeType":"MemberAccess","referencedDeclaration":19167,"src":"31400:46:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$__$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure"}},"id":14294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31400:48:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14295,"nodeType":"ExpressionStatement","src":"31400:48:53"},{"expression":{"id":14303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14296,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14249,"src":"31463:14:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14300,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14209,"src":"31494:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31515:6:53","memberName":"length","nodeType":"MemberAccess","src":"31494:27:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14299,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"31480:13:53","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":14297,"name":"uint256","nodeType":"ElementaryTypeName","src":"31484:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14298,"nodeType":"ArrayTypeName","src":"31484:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":14302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31480:42:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"31463:59:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14304,"nodeType":"ExpressionStatement","src":"31463:59:53"},{"expression":{"id":14307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14305,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14220,"src":"31536:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":14306,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31551:1:53","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"31536:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14308,"nodeType":"ExpressionStatement","src":"31536:16:53"},{"expression":{"id":14311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14309,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14218,"src":"31566:17:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14310,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14209,"src":"31586:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"31566:40:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14312,"nodeType":"ExpressionStatement","src":"31566:40:53"}]}},"id":14464,"nodeType":"IfStatement","src":"30846:2980:53","trueBody":{"id":14283,"nodeType":"Block","src":"30896:438:53","statements":[{"expression":{"id":14259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14256,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14220,"src":"30910:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":14257,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"30925:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14258,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30932:15:53","memberName":"minBptAmountOut","nodeType":"MemberAccess","referencedDeclaration":2419,"src":"30925:22:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30910:37:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14260,"nodeType":"ExpressionStatement","src":"30910:37:53"},{"expression":{"id":14268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14261,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14249,"src":"31065:14:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14265,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14226,"src":"31096:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":14266,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31103:9:53","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":14194,"src":"31096:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14264,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"31082:13:53","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":14262,"name":"uint256","nodeType":"ElementaryTypeName","src":"31086:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14263,"nodeType":"ArrayTypeName","src":"31086:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":14267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31082:31:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"31065:48:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14269,"nodeType":"ExpressionStatement","src":"31065:48:53"},{"expression":{"id":14281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14270,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14218,"src":"31128:17:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14273,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14203,"src":"31207:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14274,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31216:20:53","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"31207:29:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"arguments":[{"expression":{"id":14276,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"31267:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14277,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31274:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"31267:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14275,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20375,"src":"31254:12:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":14278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31254:25:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14279,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14220,"src":"31297:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14271,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12981,"src":"31148:12:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BasePoolMath_$12981_$","typeString":"type(library BasePoolMath)"}},"id":14272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31161:28:53","memberName":"computeProportionalAmountsIn","nodeType":"MemberAccess","referencedDeclaration":12321,"src":"31148:41:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256,uint256) pure returns (uint256[] memory)"}},"id":14280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31148:175:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"31128:195:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14282,"nodeType":"ExpressionStatement","src":"31128:195:53"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14465,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14220,"src":"33900:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":14466,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"33915:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14467,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33922:15:53","memberName":"minBptAmountOut","nodeType":"MemberAccess","referencedDeclaration":2419,"src":"33915:22:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33900:37:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14476,"nodeType":"IfStatement","src":"33896:133:53","trueBody":{"id":14475,"nodeType":"Block","src":"33939:90:53","statements":[{"errorCall":{"arguments":[{"id":14470,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14220,"src":"33981:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14471,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"33995:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14472,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34002:15:53","memberName":"minBptAmountOut","nodeType":"MemberAccess","referencedDeclaration":2419,"src":"33995:22:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14469,"name":"BptAmountOutBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1167,"src":"33960:20:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":14473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33960:58:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14474,"nodeType":"RevertStatement","src":"33953:65:53"}]}},{"expression":{"arguments":[{"id":14478,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14220,"src":"34063:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14477,"name":"_ensureValidTradeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16328,"src":"34039:23:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":14479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34039:37:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14480,"nodeType":"ExpressionStatement","src":"34039:37:53"},{"body":{"id":14605,"nodeType":"Block","src":"34134:2311:53","statements":[{"assignments":[14493],"declarations":[{"constant":false,"id":14493,"mutability":"mutable","name":"amountInRaw","nameLocation":"34156:11:53","nodeType":"VariableDeclaration","scope":14605,"src":"34148:19:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14492,"name":"uint256","nodeType":"ElementaryTypeName","src":"34148:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14494,"nodeType":"VariableDeclarationStatement","src":"34148:19:53"},{"id":14539,"nodeType":"Block","src":"34225:976:53","statements":[{"assignments":[14496],"declarations":[{"constant":false,"id":14496,"mutability":"mutable","name":"amountInScaled18","nameLocation":"34251:16:53","nodeType":"VariableDeclaration","scope":14539,"src":"34243:24:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14495,"name":"uint256","nodeType":"ElementaryTypeName","src":"34243:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14500,"initialValue":{"baseExpression":{"id":14497,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14218,"src":"34270:17:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14499,"indexExpression":{"id":14498,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14482,"src":"34288:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34270:20:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"34243:47:53"},{"expression":{"arguments":[{"id":14502,"name":"amountInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14496,"src":"34332:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14501,"name":"_ensureValidTradeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16328,"src":"34308:23:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":14503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34308:41:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14504,"nodeType":"ExpressionStatement","src":"34308:41:53"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":14505,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14215,"src":"34456:12:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14507,"indexExpression":{"id":14506,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14482,"src":"34469:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34456:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":14508,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34475:1:53","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"34456:20:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":14537,"nodeType":"Block","src":"34959:228:53","statements":[{"expression":{"id":14535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14531,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14493,"src":"35139:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":14532,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14215,"src":"35153:12:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14534,"indexExpression":{"id":14533,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14482,"src":"35166:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35153:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35139:29:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14536,"nodeType":"ExpressionStatement","src":"35139:29:53"}]},"id":14538,"nodeType":"IfStatement","src":"34452:735:53","trueBody":{"id":14530,"nodeType":"Block","src":"34478:475:53","statements":[{"expression":{"id":14522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14510,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14493,"src":"34702:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":14513,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14203,"src":"34779:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14514,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34788:21:53","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":2330,"src":"34779:30:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14516,"indexExpression":{"id":14515,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14482,"src":"34810:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34779:33:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":14517,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14203,"src":"34838:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14518,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34847:10:53","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":2327,"src":"34838:19:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14520,"indexExpression":{"id":14519,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14482,"src":"34858:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34838:22:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14511,"name":"amountInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14496,"src":"34716:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34733:20:53","memberName":"toRawUndoRateRoundUp","nodeType":"MemberAccess","referencedDeclaration":3128,"src":"34716:37:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":14521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34716:166:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34702:180:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14523,"nodeType":"ExpressionStatement","src":"34702:180:53"},{"expression":{"id":14528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":14524,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14215,"src":"34905:12:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14526,"indexExpression":{"id":14525,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14482,"src":"34918:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"34905:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14527,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14493,"src":"34923:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34905:29:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14529,"nodeType":"ExpressionStatement","src":"34905:29:53"}]}}]},{"assignments":[14542],"declarations":[{"constant":false,"id":14542,"mutability":"mutable","name":"token","nameLocation":"35222:5:53","nodeType":"VariableDeclaration","scope":14605,"src":"35215:12:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":14541,"nodeType":"UserDefinedTypeName","pathNode":{"id":14540,"name":"IERC20","nameLocations":["35215:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"35215:6:53"},"referencedDeclaration":6980,"src":"35215:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"}],"id":14547,"initialValue":{"baseExpression":{"expression":{"id":14543,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14203,"src":"35230:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14544,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35239:6:53","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":2314,"src":"35230:15:53","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":14546,"indexExpression":{"id":14545,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14482,"src":"35246:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35230:18:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"35215:33:53"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14548,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14493,"src":"35315:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"expression":{"id":14549,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"35329:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14550,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35336:12:53","memberName":"maxAmountsIn","nodeType":"MemberAccess","referencedDeclaration":2417,"src":"35329:19:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14552,"indexExpression":{"id":14551,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14482,"src":"35349:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35329:22:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35315:36:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14564,"nodeType":"IfStatement","src":"35311:142:53","trueBody":{"id":14563,"nodeType":"Block","src":"35353:100:53","statements":[{"errorCall":{"arguments":[{"id":14555,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14542,"src":"35395:5:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":14556,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14493,"src":"35402:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":14557,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"35415:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14558,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35422:12:53","memberName":"maxAmountsIn","nodeType":"MemberAccess","referencedDeclaration":2417,"src":"35415:19:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14560,"indexExpression":{"id":14559,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14482,"src":"35435:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35415:22:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14554,"name":"AmountInAboveMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1150,"src":"35378:16:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$6980_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":14561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35378:60:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14562,"nodeType":"RevertStatement","src":"35371:67:53"}]}},{"expression":{"arguments":[{"id":14566,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14542,"src":"35538:5:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":14567,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14493,"src":"35545:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14565,"name":"_takeDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16529,"src":"35528:9:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":14568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35528:29:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14569,"nodeType":"ExpressionStatement","src":"35528:29:53"},{"expression":{"id":14586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":14570,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14249,"src":"35700:14:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14572,"indexExpression":{"id":14571,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14482,"src":"35715:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"35700:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14573,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14226,"src":"35719:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":14574,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"35726:25:53","memberName":"aggregateSwapFeeAmountRaw","nodeType":"MemberAccess","referencedDeclaration":14196,"src":"35719:32:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14575,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"35699:53:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":14577,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14203,"src":"35807:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},{"baseExpression":{"id":14578,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14249,"src":"35833:14:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14580,"indexExpression":{"id":14579,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14482,"src":"35848:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35833:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14581,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"35868:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14582,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35875:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"35868:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14583,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14542,"src":"35897:5:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":14584,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14482,"src":"35920:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14576,"name":"_computeAndChargeAggregateSwapFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15389,"src":"35755:34:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PoolData_$2331_memory_ptr_$_t_uint256_$_t_address_$_t_contract$_IERC20_$6980_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct PoolData memory,uint256,address,contract IERC20,uint256) returns (uint256,uint256)"}},"id":14585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35755:180:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"35699:236:53","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14587,"nodeType":"ExpressionStatement","src":"35699:236:53"},{"expression":{"arguments":[{"id":14591,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14482,"src":"36292:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":14592,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14203,"src":"36311:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14593,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36320:11:53","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":2321,"src":"36311:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14595,"indexExpression":{"id":14594,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14482,"src":"36332:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"36311:23:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":14596,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14493,"src":"36337:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36311:37:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":14598,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14226,"src":"36351:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":14599,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36358:25:53","memberName":"aggregateSwapFeeAmountRaw","nodeType":"MemberAccess","referencedDeclaration":14196,"src":"36351:32:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36311:72:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14601,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"36401:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2334_$","typeString":"type(enum Rounding)"}},"id":14602,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"36410:10:53","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":2333,"src":"36401:19:53","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"expression":{"id":14588,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14203,"src":"36242:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14590,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36251:23:53","memberName":"updateRawAndLiveBalance","nodeType":"MemberAccess","referencedDeclaration":20105,"src":"36242:32:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_PoolData_$2331_memory_ptr_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$2334_$returns$__$attached_to$_t_struct$_PoolData_$2331_memory_ptr_$","typeString":"function (struct PoolData memory,uint256,uint256,enum Rounding) pure"}},"id":14603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36242:192:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14604,"nodeType":"ExpressionStatement","src":"36242:192:53"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14485,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14482,"src":"34107:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":14486,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14226,"src":"34111:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":14487,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34118:9:53","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":14194,"src":"34111:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34107:20:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14606,"initializationExpression":{"assignments":[14482],"declarations":[{"constant":false,"id":14482,"mutability":"mutable","name":"i","nameLocation":"34100:1:53","nodeType":"VariableDeclaration","scope":14606,"src":"34092:9:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14481,"name":"uint256","nodeType":"ElementaryTypeName","src":"34092:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14484,"initialValue":{"hexValue":"30","id":14483,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34104:1:53","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"34092:13:53"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":14490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"34129:3:53","subExpression":{"id":14489,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14482,"src":"34131:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14491,"nodeType":"ExpressionStatement","src":"34129:3:53"},"nodeType":"ForStatement","src":"34087:2358:53"},{"expression":{"arguments":[{"expression":{"id":14608,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"36532:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14609,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36539:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"36532:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14610,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14203,"src":"36545:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}],"id":14607,"name":"_writePoolBalancesToStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16926,"src":"36504:27:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_PoolData_$2331_memory_ptr_$returns$__$","typeString":"function (address,struct PoolData memory)"}},"id":14611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36504:50:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14612,"nodeType":"ExpressionStatement","src":"36504:50:53"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":14616,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"36765:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14617,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36772:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"36765:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14615,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"36757:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14614,"name":"address","nodeType":"ElementaryTypeName","src":"36757:7:53","typeDescriptions":{}}},"id":14618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36757:20:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14619,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"36779:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14620,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36786:2:53","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":2414,"src":"36779:9:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14621,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14220,"src":"36790:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14613,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20528,"src":"36751:5:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":14622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36751:52:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14623,"nodeType":"ExpressionStatement","src":"36751:52:53"},{"eventCall":{"arguments":[{"expression":{"id":14625,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"36879:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14626,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36886:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"36879:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14627,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"36904:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14628,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36911:2:53","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":2414,"src":"36904:9:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14629,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"36927:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14630,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36934:4:53","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2422,"src":"36927:11:53","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"}},{"arguments":[{"expression":{"id":14632,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"36965:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":14633,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36972:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"36965:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14631,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20375,"src":"36952:12:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":14634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36952:25:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14635,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14215,"src":"36991:12:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":14636,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14249,"src":"37017:14:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":14624,"name":"LiquidityAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"36851:14:53","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_enum$_AddLiquidityKind_$2409_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,address,enum AddLiquidityKind,uint256,uint256[] memory,uint256[] memory)"}},"id":14637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36851:190:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14638,"nodeType":"EmitStatement","src":"36846:195:53"}]},"documentation":{"id":14200,"nodeType":"StructuredDocumentation","src":"29703:457:53","text":" @dev Calls the appropriate pool hook and calculates the required inputs and outputs for the operation\n considering the given kind, and updates the Vault's internal accounting. This includes:\n - Setting pool balances\n - Taking debt from the liquidity provider\n - Minting pool tokens\n - Emitting events\n It is non-reentrant, as it performs external calls and updates the Vault's state accordingly."},"id":14640,"implemented":true,"kind":"function","modifiers":[{"id":14212,"kind":"modifierInvocation","modifierName":{"id":14211,"name":"nonReentrant","nameLocations":["30342:12:53"],"nodeType":"IdentifierPath","referencedDeclaration":6146,"src":"30342:12:53"},"nodeType":"ModifierInvocation","src":"30342:12:53"}],"name":"_addLiquidity","nameLocation":"30174:13:53","nodeType":"FunctionDefinition","parameters":{"id":14210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14203,"mutability":"mutable","name":"poolData","nameLocation":"30213:8:53","nodeType":"VariableDeclaration","scope":14640,"src":"30197:24:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":14202,"nodeType":"UserDefinedTypeName","pathNode":{"id":14201,"name":"PoolData","nameLocations":["30197:8:53"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"30197:8:53"},"referencedDeclaration":2331,"src":"30197:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":14206,"mutability":"mutable","name":"params","nameLocation":"30257:6:53","nodeType":"VariableDeclaration","scope":14640,"src":"30231:32:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":14205,"nodeType":"UserDefinedTypeName","pathNode":{"id":14204,"name":"AddLiquidityParams","nameLocations":["30231:18:53"],"nodeType":"IdentifierPath","referencedDeclaration":2425,"src":"30231:18:53"},"referencedDeclaration":2425,"src":"30231:18:53","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"},{"constant":false,"id":14209,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"30290:20:53","nodeType":"VariableDeclaration","scope":14640,"src":"30273:37:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14207,"name":"uint256","nodeType":"ElementaryTypeName","src":"30273:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14208,"nodeType":"ArrayTypeName","src":"30273:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"30187:129:53"},"returnParameters":{"id":14223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14215,"mutability":"mutable","name":"amountsInRaw","nameLocation":"30402:12:53","nodeType":"VariableDeclaration","scope":14640,"src":"30385:29:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14213,"name":"uint256","nodeType":"ElementaryTypeName","src":"30385:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14214,"nodeType":"ArrayTypeName","src":"30385:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":14218,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"30445:17:53","nodeType":"VariableDeclaration","scope":14640,"src":"30428:34:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14216,"name":"uint256","nodeType":"ElementaryTypeName","src":"30428:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14217,"nodeType":"ArrayTypeName","src":"30428:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":14220,"mutability":"mutable","name":"bptAmountOut","nameLocation":"30484:12:53","nodeType":"VariableDeclaration","scope":14640,"src":"30476:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14219,"name":"uint256","nodeType":"ElementaryTypeName","src":"30476:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14222,"mutability":"mutable","name":"returnData","nameLocation":"30523:10:53","nodeType":"VariableDeclaration","scope":14640,"src":"30510:23:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":14221,"name":"bytes","nodeType":"ElementaryTypeName","src":"30510:5:53","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"30371:172:53"},"scope":16391,"src":"30165:6883:53","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[2105],"body":{"id":14789,"nodeType":"Block","src":"37553:3760:53","statements":[{"expression":{"arguments":[{"expression":{"id":14661,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14644,"src":"37889:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":14662,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37896:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"37889:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14660,"name":"_ensureUnpaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16619,"src":"37873:15:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":14663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37873:28:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14664,"nodeType":"ExpressionStatement","src":"37873:28:53"},{"assignments":[14667],"declarations":[{"constant":false,"id":14667,"mutability":"mutable","name":"poolData","nameLocation":"38376:8:53","nodeType":"VariableDeclaration","scope":14789,"src":"38360:24:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":14666,"nodeType":"UserDefinedTypeName","pathNode":{"id":14665,"name":"PoolData","nameLocations":["38360:8:53"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"38360:8:53"},"referencedDeclaration":2331,"src":"38360:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"id":14674,"initialValue":{"arguments":[{"expression":{"id":14669,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14644,"src":"38429:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":14670,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"38436:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"38429:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14671,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"38442:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2334_$","typeString":"type(enum Rounding)"}},"id":14672,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"38451:10:53","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":2333,"src":"38442:19:53","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"id":14668,"name":"_loadPoolDataUpdatingBalancesAndYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17002,"src":"38387:41:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_Rounding_$2334_$returns$_t_struct$_PoolData_$2331_memory_ptr_$","typeString":"function (address,enum Rounding) returns (struct PoolData memory)"}},"id":14673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38387:75:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"nodeType":"VariableDeclarationStatement","src":"38360:102:53"},{"expression":{"arguments":[{"expression":{"expression":{"id":14678,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14667,"src":"38508:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14679,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"38517:6:53","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":2314,"src":"38508:15:53","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":14680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38524:6:53","memberName":"length","nodeType":"MemberAccess","src":"38508:22:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":14681,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14644,"src":"38532:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":14682,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"38539:13:53","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":2440,"src":"38532:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38553:6:53","memberName":"length","nodeType":"MemberAccess","src":"38532:27:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14675,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2881,"src":"38472:12:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$2881_$","typeString":"type(library InputHelpers)"}},"id":14677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38485:22:53","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":2673,"src":"38472:35:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":14684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38472:88:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14685,"nodeType":"ExpressionStatement","src":"38472:88:53"},{"assignments":[14690],"declarations":[{"constant":false,"id":14690,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"38869:21:53","nodeType":"VariableDeclaration","scope":14789,"src":"38852:38:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14688,"name":"uint256","nodeType":"ElementaryTypeName","src":"38852:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14689,"nodeType":"ArrayTypeName","src":"38852:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":14699,"initialValue":{"arguments":[{"expression":{"id":14694,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14667,"src":"38963:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14695,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"38972:21:53","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":2330,"src":"38963:30:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":14696,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14667,"src":"39007:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14697,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39016:10:53","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":2327,"src":"39007:19:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"expression":{"id":14691,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14644,"src":"38893:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":14692,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"38900:13:53","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":2440,"src":"38893:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38914:35:53","memberName":"copyToScaled18ApplyRateRoundUpArray","nodeType":"MemberAccess","referencedDeclaration":3412,"src":"38893:56:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":14698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38893:143:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"38852:184:53"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":14700,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14667,"src":"39130:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14701,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39139:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"39130:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":14702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39154:31:53","memberName":"shouldCallBeforeRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":17892,"src":"39130:55:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":14703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39130:57:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14741,"nodeType":"IfStatement","src":"39126:897:53","trueBody":{"id":14740,"nodeType":"Block","src":"39189:834:53","statements":[{"expression":{"arguments":[{"id":14707,"name":"minAmountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14690,"src":"39265:21:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":14708,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"39304:3:53","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39308:6:53","memberName":"sender","nodeType":"MemberAccess","src":"39304:10:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14710,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14644,"src":"39332:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},{"id":14711,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14667,"src":"39356:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},{"baseExpression":{"id":14712,"name":"_hooksContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17363,"src":"39382:15:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$300_$","typeString":"mapping(address => contract IHooks)"}},"id":14715,"indexExpression":{"expression":{"id":14713,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14644,"src":"39398:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":14714,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39405:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"39398:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"39382:28:53","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"},{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}],"expression":{"id":14704,"name":"HooksConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18601,"src":"39203:14:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_HooksConfigLib_$18601_$","typeString":"type(library HooksConfigLib)"}},"id":14706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39218:29:53","memberName":"callBeforeRemoveLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":18426,"src":"39203:44:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_address_$_t_struct$_RemoveLiquidityParams_$2446_memory_ptr_$_t_struct$_PoolData_$2331_memory_ptr_$_t_contract$_IHooks_$300_$returns$__$","typeString":"function (uint256[] memory,address,struct RemoveLiquidityParams memory,struct PoolData memory,contract IHooks)"}},"id":14716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39203:221:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14717,"nodeType":"ExpressionStatement","src":"39203:221:53"},{"expression":{"arguments":[{"baseExpression":{"id":14721,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17383,"src":"39682:18:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":14724,"indexExpression":{"expression":{"id":14722,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14644,"src":"39701:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":14723,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39708:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"39701:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"39682:31:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},{"expression":{"id":14725,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"39715:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2334_$","typeString":"type(enum Rounding)"}},"id":14726,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"39724:10:53","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":2333,"src":"39715:19:53","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"expression":{"id":14718,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14667,"src":"39650:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14720,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39659:22:53","memberName":"reloadBalancesAndRates","nodeType":"MemberAccess","referencedDeclaration":19998,"src":"39650:31:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PoolData_$2331_memory_ptr_$_t_mapping$_t_uint256_$_t_bytes32_$_$_t_enum$_Rounding_$2334_$returns$__$attached_to$_t_struct$_PoolData_$2331_memory_ptr_$","typeString":"function (struct PoolData memory,mapping(uint256 => bytes32),enum Rounding) view"}},"id":14727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39650:85:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14728,"nodeType":"ExpressionStatement","src":"39650:85:53"},{"expression":{"id":14738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14729,"name":"minAmountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14690,"src":"39833:21:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14733,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14667,"src":"39931:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14734,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39940:21:53","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":2330,"src":"39931:30:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":14735,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14667,"src":"39979:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14736,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39988:10:53","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":2327,"src":"39979:19:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"expression":{"id":14730,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14644,"src":"39857:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":14731,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39864:13:53","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":2440,"src":"39857:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39878:35:53","memberName":"copyToScaled18ApplyRateRoundUpArray","nodeType":"MemberAccess","referencedDeclaration":3412,"src":"39857:56:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":14737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39857:155:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"39833:179:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14739,"nodeType":"ExpressionStatement","src":"39833:179:53"}]}},{"assignments":[14746],"declarations":[{"constant":false,"id":14746,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"40423:18:53","nodeType":"VariableDeclaration","scope":14789,"src":"40406:35:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14744,"name":"uint256","nodeType":"ElementaryTypeName","src":"40406:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14745,"nodeType":"ArrayTypeName","src":"40406:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":14747,"nodeType":"VariableDeclarationStatement","src":"40406:35:53"},{"expression":{"id":14758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":14748,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14653,"src":"40452:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14749,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14656,"src":"40465:10:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":14750,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14746,"src":"40477:18:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":14751,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14658,"src":"40497:10:53","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":14752,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"40451:57:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,uint256[] memory,bytes memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":14754,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14667,"src":"40541:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},{"id":14755,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14644,"src":"40563:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},{"id":14756,"name":"minAmountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14690,"src":"40583:21:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":14753,"name":"_removeLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15296,"src":"40511:16:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PoolData_$2331_memory_ptr_$_t_struct$_RemoveLiquidityParams_$2446_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function (struct PoolData memory,struct RemoveLiquidityParams memory,uint256[] memory) returns (uint256,uint256[] memory,uint256[] memory,bytes memory)"}},"id":14757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40511:103:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,uint256[] memory,bytes memory)"}},"src":"40451:163:53","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14759,"nodeType":"ExpressionStatement","src":"40451:163:53"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":14760,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14667,"src":"40816:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14761,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"40825:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"40816:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":14762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"40840:30:53","memberName":"shouldCallAfterRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":17935,"src":"40816:54:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":14763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40816:56:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14788,"nodeType":"IfStatement","src":"40812:495:53","trueBody":{"id":14787,"nodeType":"Block","src":"40874:433:53","statements":[{"assignments":[14766],"declarations":[{"constant":false,"id":14766,"mutability":"mutable","name":"hooksContract","nameLocation":"40956:13:53","nodeType":"VariableDeclaration","scope":14787,"src":"40949:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"},"typeName":{"id":14765,"nodeType":"UserDefinedTypeName","pathNode":{"id":14764,"name":"IHooks","nameLocations":["40949:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":300,"src":"40949:6:53"},"referencedDeclaration":300,"src":"40949:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"visibility":"internal"}],"id":14771,"initialValue":{"baseExpression":{"id":14767,"name":"_hooksContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17363,"src":"40972:15:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$300_$","typeString":"mapping(address => contract IHooks)"}},"id":14770,"indexExpression":{"expression":{"id":14768,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14644,"src":"40988:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":14769,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"40995:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"40988:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"40972:28:53","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"nodeType":"VariableDeclarationStatement","src":"40949:51:53"},{"expression":{"id":14785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14772,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14656,"src":"41015:10:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14776,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"41098:3:53","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"41102:6:53","memberName":"sender","nodeType":"MemberAccess","src":"41098:10:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14778,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14746,"src":"41126:18:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":14779,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14656,"src":"41162:10:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":14780,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14653,"src":"41190:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14781,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14644,"src":"41219:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},{"id":14782,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14667,"src":"41243:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},{"id":14783,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14766,"src":"41269:13:53","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"},{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}],"expression":{"expression":{"id":14773,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14667,"src":"41028:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14774,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"41037:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"41028:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":14775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"41052:28:53","memberName":"callAfterRemoveLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":18543,"src":"41028:52:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_PoolConfigBits_$2184_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_struct$_RemoveLiquidityParams_$2446_memory_ptr_$_t_struct$_PoolData_$2331_memory_ptr_$_t_contract$_IHooks_$300_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits,address,uint256[] memory,uint256[] memory,uint256,struct RemoveLiquidityParams memory,struct PoolData memory,contract IHooks) returns (uint256[] memory)"}},"id":14784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41028:268:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"41015:281:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14786,"nodeType":"ExpressionStatement","src":"41015:281:53"}]}}]},"documentation":{"id":14641,"nodeType":"StructuredDocumentation","src":"37267:26:53","text":"@inheritdoc IVaultMain"},"functionSelector":"21457897","id":14790,"implemented":true,"kind":"function","modifiers":[{"id":14647,"kind":"modifierInvocation","modifierName":{"id":14646,"name":"onlyWhenUnlocked","nameLocations":["37399:16:53"],"nodeType":"IdentifierPath","referencedDeclaration":16469,"src":"37399:16:53"},"nodeType":"ModifierInvocation","src":"37399:16:53"},{"arguments":[{"expression":{"id":14649,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14644,"src":"37444:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":14650,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37451:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"37444:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":14651,"kind":"modifierInvocation","modifierName":{"id":14648,"name":"withInitializedPool","nameLocations":["37424:19:53"],"nodeType":"IdentifierPath","referencedDeclaration":16752,"src":"37424:19:53"},"nodeType":"ModifierInvocation","src":"37424:32:53"}],"name":"removeLiquidity","nameLocation":"37307:15:53","nodeType":"FunctionDefinition","parameters":{"id":14645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14644,"mutability":"mutable","name":"params","nameLocation":"37361:6:53","nodeType":"VariableDeclaration","scope":14790,"src":"37332:35:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":14643,"nodeType":"UserDefinedTypeName","pathNode":{"id":14642,"name":"RemoveLiquidityParams","nameLocations":["37332:21:53"],"nodeType":"IdentifierPath","referencedDeclaration":2446,"src":"37332:21:53"},"referencedDeclaration":2446,"src":"37332:21:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"}],"src":"37322:51:53"},"returnParameters":{"id":14659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14653,"mutability":"mutable","name":"bptAmountIn","nameLocation":"37482:11:53","nodeType":"VariableDeclaration","scope":14790,"src":"37474:19:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14652,"name":"uint256","nodeType":"ElementaryTypeName","src":"37474:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14656,"mutability":"mutable","name":"amountsOut","nameLocation":"37512:10:53","nodeType":"VariableDeclaration","scope":14790,"src":"37495:27:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14654,"name":"uint256","nodeType":"ElementaryTypeName","src":"37495:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14655,"nodeType":"ArrayTypeName","src":"37495:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":14658,"mutability":"mutable","name":"returnData","nameLocation":"37537:10:53","nodeType":"VariableDeclaration","scope":14790,"src":"37524:23:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":14657,"name":"bytes","nodeType":"ElementaryTypeName","src":"37524:5:53","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"37473:75:53"},"scope":16391,"src":"37298:4015:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":15295,"nodeType":"Block","src":"42175:7719:53","statements":[{"assignments":[14817],"declarations":[{"constant":false,"id":14817,"mutability":"mutable","name":"locals","nameLocation":"42208:6:53","nodeType":"VariableDeclaration","scope":15295,"src":"42185:29:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals"},"typeName":{"id":14816,"nodeType":"UserDefinedTypeName","pathNode":{"id":14815,"name":"LiquidityLocals","nameLocations":["42185:15:53"],"nodeType":"IdentifierPath","referencedDeclaration":14199,"src":"42185:15:53"},"referencedDeclaration":14199,"src":"42185:15:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_storage_ptr","typeString":"struct Vault.LiquidityLocals"}},"visibility":"internal"}],"id":14818,"nodeType":"VariableDeclarationStatement","src":"42185:29:53"},{"expression":{"id":14825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14819,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14817,"src":"42224:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":14821,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"42231:9:53","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":14194,"src":"42224:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":14822,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14794,"src":"42243:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14823,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"42252:6:53","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":2314,"src":"42243:15:53","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":14824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"42259:6:53","memberName":"length","nodeType":"MemberAccess","src":"42243:22:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"42224:41:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14826,"nodeType":"ExpressionStatement","src":"42224:41:53"},{"expression":{"id":14834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14827,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14808,"src":"42275:13:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14831,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14817,"src":"42305:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":14832,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"42312:9:53","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":14194,"src":"42305:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14830,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"42291:13:53","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":14828,"name":"uint256","nodeType":"ElementaryTypeName","src":"42295:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14829,"nodeType":"ArrayTypeName","src":"42295:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":14833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42291:31:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"42275:47:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14835,"nodeType":"ExpressionStatement","src":"42275:47:53"},{"assignments":[14840],"declarations":[{"constant":false,"id":14840,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"42449:14:53","nodeType":"VariableDeclaration","scope":15295,"src":"42432:31:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14838,"name":"uint256","nodeType":"ElementaryTypeName","src":"42432:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14839,"nodeType":"ArrayTypeName","src":"42432:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":14841,"nodeType":"VariableDeclarationStatement","src":"42432:31:53"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"},"id":14846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14842,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"42478:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":14843,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"42485:4:53","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2443,"src":"42478:11:53","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":14844,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2430,"src":"42493:19:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RemoveLiquidityKind_$2430_$","typeString":"type(enum RemoveLiquidityKind)"}},"id":14845,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"42513:12:53","memberName":"PROPORTIONAL","nodeType":"MemberAccess","referencedDeclaration":2426,"src":"42493:32:53","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"}},"src":"42478:47:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"},"id":14930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14926,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"43954:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":14927,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"43961:4:53","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2443,"src":"43954:11:53","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":14928,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2430,"src":"43969:19:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RemoveLiquidityKind_$2430_$","typeString":"type(enum RemoveLiquidityKind)"}},"id":14929,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"43989:21:53","memberName":"SINGLE_TOKEN_EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":2427,"src":"43969:41:53","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"}},"src":"43954:56:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"},"id":14990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14986,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"44748:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":14987,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44755:4:53","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2443,"src":"44748:11:53","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":14988,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2430,"src":"44763:19:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RemoveLiquidityKind_$2430_$","typeString":"type(enum RemoveLiquidityKind)"}},"id":14989,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"44783:22:53","memberName":"SINGLE_TOKEN_EXACT_OUT","nodeType":"MemberAccess","referencedDeclaration":2428,"src":"44763:42:53","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"}},"src":"44748:57:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"},"id":15056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15052,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"45538:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15053,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45545:4:53","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2443,"src":"45538:11:53","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":15054,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2430,"src":"45553:19:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RemoveLiquidityKind_$2430_$","typeString":"type(enum RemoveLiquidityKind)"}},"id":15055,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"45573:6:53","memberName":"CUSTOM","nodeType":"MemberAccess","referencedDeclaration":2429,"src":"45553:26:53","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"}},"src":"45538:41:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15090,"nodeType":"Block","src":"46126:60:53","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15087,"name":"InvalidRemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1176,"src":"46147:26:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":15088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"46147:28:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15089,"nodeType":"RevertStatement","src":"46140:35:53"}]},"id":15091,"nodeType":"IfStatement","src":"45534:652:53","trueBody":{"id":15086,"nodeType":"Block","src":"45581:539:53","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":15057,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14794,"src":"45595:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":15060,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45604:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"45595:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":15061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"45619:35:53","memberName":"requireRemoveLiquidityCustomEnabled","nodeType":"MemberAccess","referencedDeclaration":19080,"src":"45595:59:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$__$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure"}},"id":15062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45595:61:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15063,"nodeType":"ExpressionStatement","src":"45595:61:53"},{"expression":{"id":15084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":15064,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14805,"src":"45754:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15065,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14811,"src":"45767:18:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":15066,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14840,"src":"45787:14:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":15067,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14813,"src":"45803:10:53","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":15068,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"45753:61:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,uint256[] memory,bytes memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":15074,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"45907:3:53","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"45911:6:53","memberName":"sender","nodeType":"MemberAccess","src":"45907:10:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15076,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"45939:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15077,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45946:14:53","memberName":"maxBptAmountIn","nodeType":"MemberAccess","referencedDeclaration":2437,"src":"45939:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15078,"name":"minAmountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14800,"src":"45982:21:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":15079,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14794,"src":"46025:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":15080,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"46034:20:53","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"46025:29:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":15081,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"46076:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15082,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"46083:8:53","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":2445,"src":"46076:15:53","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"expression":{"id":15070,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"45832:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15071,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45839:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"45832:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15069,"name":"IPoolLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":356,"src":"45817:14:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPoolLiquidity_$356_$","typeString":"type(contract IPoolLiquidity)"}},"id":15072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45817:27:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPoolLiquidity_$356","typeString":"contract IPoolLiquidity"}},"id":15073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"45862:23:53","memberName":"onRemoveLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":355,"src":"45817:68:53","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function (address,uint256,uint256[] memory,uint256[] memory,bytes memory) external returns (uint256,uint256[] memory,uint256[] memory,bytes memory)"}},"id":15083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45817:292:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,uint256[] memory,bytes memory)"}},"src":"45753:356:53","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15085,"nodeType":"ExpressionStatement","src":"45753:356:53"}]}},"id":15092,"nodeType":"IfStatement","src":"44744:1442:53","trueBody":{"id":15051,"nodeType":"Block","src":"44807:721:53","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":14991,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14794,"src":"44821:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14994,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44830:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"44821:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":14995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"44845:33:53","memberName":"requireUnbalancedLiquidityEnabled","nodeType":"MemberAccess","referencedDeclaration":18956,"src":"44821:57:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$__$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure"}},"id":14996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44821:59:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14997,"nodeType":"ExpressionStatement","src":"44821:59:53"},{"expression":{"id":15000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14998,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14811,"src":"44894:18:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14999,"name":"minAmountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14800,"src":"44915:21:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"44894:42:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15001,"nodeType":"ExpressionStatement","src":"44894:42:53"},{"expression":{"id":15010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15002,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14817,"src":"44950:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":15004,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"44957:10:53","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":14198,"src":"44950:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":15007,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"45003:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15008,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45010:13:53","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":2440,"src":"45003:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"id":15005,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2881,"src":"44970:12:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$2881_$","typeString":"type(library InputHelpers)"}},"id":15006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"44983:19:53","memberName":"getSingleInputIndex","nodeType":"MemberAccess","referencedDeclaration":2754,"src":"44970:32:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory) pure returns (uint256)"}},"id":15009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44970:54:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"44950:74:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15011,"nodeType":"ExpressionStatement","src":"44950:74:53"},{"expression":{"id":15021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15012,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14808,"src":"45038:13:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15015,"indexExpression":{"expression":{"id":15013,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14817,"src":"45052:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":15014,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45059:10:53","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":14198,"src":"45052:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"45038:32:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":15016,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"45073:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15017,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45080:13:53","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":2440,"src":"45073:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15020,"indexExpression":{"expression":{"id":15018,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14817,"src":"45094:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":15019,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45101:10:53","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":14198,"src":"45094:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"45073:39:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"45038:74:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15022,"nodeType":"ExpressionStatement","src":"45038:74:53"},{"expression":{"id":15049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":15023,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14805,"src":"45128:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15024,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14840,"src":"45141:14:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":15025,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"45127:29:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":15028,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14794,"src":"45231:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":15029,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45240:20:53","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"45231:29:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":15030,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14817,"src":"45278:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":15031,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45285:10:53","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":14198,"src":"45278:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":15032,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14811,"src":"45313:18:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15035,"indexExpression":{"expression":{"id":15033,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14817,"src":"45332:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":15034,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45339:10:53","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":14198,"src":"45332:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"45313:37:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":15037,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"45381:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15038,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45388:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"45381:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15036,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20375,"src":"45368:12:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":15039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45368:25:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":15040,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14794,"src":"45411:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":15041,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45420:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"45411:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":15042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"45435:26:53","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":19188,"src":"45411:50:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":15043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45411:52:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":15045,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"45491:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15046,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45498:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"45491:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15044,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90,"src":"45481:9:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePool_$90_$","typeString":"type(contract IBasePool)"}},"id":15047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45481:22:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}],"expression":{"id":15026,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12981,"src":"45159:12:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BasePoolMath_$12981_$","typeString":"type(library BasePoolMath)"}},"id":15027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"45172:41:53","memberName":"computeRemoveLiquiditySingleTokenExactOut","nodeType":"MemberAccess","referencedDeclaration":12825,"src":"45159:54:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_contract$_IBasePool_$90_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256,uint256,uint256,uint256,contract IBasePool) view returns (uint256,uint256[] memory)"}},"id":15048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45159:358:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory)"}},"src":"45127:390:53","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15050,"nodeType":"ExpressionStatement","src":"45127:390:53"}]}},"id":15093,"nodeType":"IfStatement","src":"43950:2236:53","trueBody":{"id":14985,"nodeType":"Block","src":"44012:726:53","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":14931,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14794,"src":"44026:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14934,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44035:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"44026:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":14935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"44050:33:53","memberName":"requireUnbalancedLiquidityEnabled","nodeType":"MemberAccess","referencedDeclaration":18956,"src":"44026:57:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$__$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure"}},"id":14936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44026:59:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14937,"nodeType":"ExpressionStatement","src":"44026:59:53"},{"expression":{"id":14941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14938,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14805,"src":"44099:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":14939,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"44113:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":14940,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44120:14:53","memberName":"maxBptAmountIn","nodeType":"MemberAccess","referencedDeclaration":2437,"src":"44113:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"44099:35:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14942,"nodeType":"ExpressionStatement","src":"44099:35:53"},{"expression":{"id":14945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14943,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14811,"src":"44148:18:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14944,"name":"minAmountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14800,"src":"44169:21:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"44148:42:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14946,"nodeType":"ExpressionStatement","src":"44148:42:53"},{"expression":{"id":14955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14947,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14817,"src":"44204:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":14949,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"44211:10:53","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":14198,"src":"44204:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14952,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"44257:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":14953,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44264:13:53","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":2440,"src":"44257:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"id":14950,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2881,"src":"44224:12:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$2881_$","typeString":"type(library InputHelpers)"}},"id":14951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"44237:19:53","memberName":"getSingleInputIndex","nodeType":"MemberAccess","referencedDeclaration":2754,"src":"44224:32:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory) pure returns (uint256)"}},"id":14954,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44224:54:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"44204:74:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14956,"nodeType":"ExpressionStatement","src":"44204:74:53"},{"expression":{"id":14983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":14957,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14811,"src":"44294:18:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14960,"indexExpression":{"expression":{"id":14958,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14817,"src":"44313:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":14959,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44320:10:53","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":14198,"src":"44313:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"44294:37:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14961,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14840,"src":"44333:14:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":14962,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"44293:55:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14965,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14794,"src":"44443:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14966,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44452:20:53","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"44443:29:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":14967,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14817,"src":"44494:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":14968,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44501:10:53","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":14198,"src":"44494:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14969,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14805,"src":"44533:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":14971,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"44579:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":14972,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44586:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"44579:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14970,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20375,"src":"44566:12:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":14973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44566:25:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":14974,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14794,"src":"44613:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14975,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44622:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"44613:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":14976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"44637:26:53","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":19188,"src":"44613:50:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":14977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44613:52:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":14979,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"44697:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":14980,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44704:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"44697:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14978,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90,"src":"44687:9:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePool_$90_$","typeString":"type(contract IBasePool)"}},"id":14981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44687:22:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IBasePool_$90","typeString":"contract IBasePool"}],"expression":{"id":14963,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12981,"src":"44351:12:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BasePoolMath_$12981_$","typeString":"type(library BasePoolMath)"}},"id":14964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"44381:40:53","memberName":"computeRemoveLiquiditySingleTokenExactIn","nodeType":"MemberAccess","referencedDeclaration":12928,"src":"44351:70:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_contract$_IBasePool_$90_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256,uint256,uint256,uint256,contract IBasePool) view returns (uint256,uint256[] memory)"}},"id":14982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44351:376:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory)"}},"src":"44293:434:53","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14984,"nodeType":"ExpressionStatement","src":"44293:434:53"}]}},"id":15094,"nodeType":"IfStatement","src":"42474:3712:53","trueBody":{"id":14925,"nodeType":"Block","src":"42527:1417:53","statements":[{"expression":{"id":14850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14847,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14805,"src":"42541:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":14848,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"42555:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":14849,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"42562:14:53","memberName":"maxBptAmountIn","nodeType":"MemberAccess","referencedDeclaration":2437,"src":"42555:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"42541:35:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14851,"nodeType":"ExpressionStatement","src":"42541:35:53"},{"expression":{"id":14859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14852,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14840,"src":"42590:14:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14856,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14817,"src":"42621:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":14857,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"42628:9:53","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":14194,"src":"42621:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14855,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"42607:13:53","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":14853,"name":"uint256","nodeType":"ElementaryTypeName","src":"42611:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14854,"nodeType":"ArrayTypeName","src":"42611:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":14858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42607:31:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"42590:48:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14860,"nodeType":"ExpressionStatement","src":"42590:48:53"},{"expression":{"id":14872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14861,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14811,"src":"42652:18:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14864,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14794,"src":"42733:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14865,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"42742:20:53","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"42733:29:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"arguments":[{"expression":{"id":14867,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"42793:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":14868,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"42800:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"42793:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14866,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20375,"src":"42780:12:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":14869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42780:25:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14870,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14805,"src":"42823:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14862,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12981,"src":"42673:12:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BasePoolMath_$12981_$","typeString":"type(library BasePoolMath)"}},"id":14863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"42686:29:53","memberName":"computeProportionalAmountsOut","nodeType":"MemberAccess","referencedDeclaration":12371,"src":"42673:42:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256,uint256) pure returns (uint256[] memory)"}},"id":14871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42673:175:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"42652:196:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14873,"nodeType":"ExpressionStatement","src":"42652:196:53"},{"condition":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14877,"name":"_sessionIdSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17493,"src":"43546:14:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function () view returns (StorageSlotExtension.Uint256SlotType)"}},"id":14878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43546:16:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":14879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"43563:5:53","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":6500,"src":"43546:22:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$6391_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":14880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43546:24:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14881,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"43572:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":14882,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"43579:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"43572:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14874,"name":"_addLiquidityCalled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17482,"src":"43519:19:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460_$","typeString":"function () view returns (UintToAddressToBooleanMappingSlot)"}},"id":14875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43519:21:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460","typeString":"UintToAddressToBooleanMappingSlot"}},"id":14876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"43541:4:53","memberName":"tGet","nodeType":"MemberAccess","referencedDeclaration":3641,"src":"43519:26:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460_$_t_uint256_$_t_address_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460_$","typeString":"function (UintToAddressToBooleanMappingSlot,uint256,address) view returns (bool)"}},"id":14883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43519:65:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14924,"nodeType":"IfStatement","src":"43515:419:53","trueBody":{"id":14923,"nodeType":"Block","src":"43586:348:53","statements":[{"assignments":[14885],"declarations":[{"constant":false,"id":14885,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"43612:17:53","nodeType":"VariableDeclaration","scope":14923,"src":"43604:25:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14884,"name":"uint256","nodeType":"ElementaryTypeName","src":"43604:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14890,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":14886,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14794,"src":"43632:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":14887,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"43641:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"43632:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":14888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"43656:26:53","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":19188,"src":"43632:50:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":14889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43632:52:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"43604:80:53"},{"body":{"id":14921,"nodeType":"Block","src":"43749:171:53","statements":[{"expression":{"id":14911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":14902,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14840,"src":"43771:14:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14904,"indexExpression":{"id":14903,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14892,"src":"43786:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"43771:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":14909,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14885,"src":"43819:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":14905,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14811,"src":"43791:18:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14907,"indexExpression":{"id":14906,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14892,"src":"43810:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"43791:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"43813:5:53","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":4528,"src":"43791:27:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":14910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43791:46:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"43771:66:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14912,"nodeType":"ExpressionStatement","src":"43771:66:53"},{"expression":{"id":14919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":14913,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14811,"src":"43859:18:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14915,"indexExpression":{"id":14914,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14892,"src":"43878:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"43859:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"baseExpression":{"id":14916,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14840,"src":"43884:14:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14918,"indexExpression":{"id":14917,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14892,"src":"43899:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"43884:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"43859:42:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14920,"nodeType":"ExpressionStatement","src":"43859:42:53"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14895,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14892,"src":"43722:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":14896,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14817,"src":"43726:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":14897,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"43733:9:53","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":14194,"src":"43726:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"43722:20:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14922,"initializationExpression":{"assignments":[14892],"declarations":[{"constant":false,"id":14892,"mutability":"mutable","name":"i","nameLocation":"43715:1:53","nodeType":"VariableDeclaration","scope":14922,"src":"43707:9:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14891,"name":"uint256","nodeType":"ElementaryTypeName","src":"43707:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14894,"initialValue":{"hexValue":"30","id":14893,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"43719:1:53","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"43707:13:53"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":14900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"43744:3:53","subExpression":{"id":14899,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14892,"src":"43746:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14901,"nodeType":"ExpressionStatement","src":"43744:3:53"},"nodeType":"ForStatement","src":"43702:218:53"}]}}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15095,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14805,"src":"46200:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":15096,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"46214:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15097,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"46221:14:53","memberName":"maxBptAmountIn","nodeType":"MemberAccess","referencedDeclaration":2437,"src":"46214:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"46200:35:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15106,"nodeType":"IfStatement","src":"46196:128:53","trueBody":{"id":15105,"nodeType":"Block","src":"46237:87:53","statements":[{"errorCall":{"arguments":[{"id":15100,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14805,"src":"46278:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15101,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"46291:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15102,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"46298:14:53","memberName":"maxBptAmountIn","nodeType":"MemberAccess","referencedDeclaration":2437,"src":"46291:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15099,"name":"BptAmountInAboveMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1203,"src":"46258:19:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":15103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"46258:55:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15104,"nodeType":"RevertStatement","src":"46251:62:53"}]}},{"expression":{"arguments":[{"id":15108,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14805,"src":"46358:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15107,"name":"_ensureValidTradeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16328,"src":"46334:23:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":15109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"46334:36:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15110,"nodeType":"ExpressionStatement","src":"46334:36:53"},{"body":{"id":15236,"nodeType":"Block","src":"46428:2382:53","statements":[{"assignments":[15123],"declarations":[{"constant":false,"id":15123,"mutability":"mutable","name":"amountOutRaw","nameLocation":"46450:12:53","nodeType":"VariableDeclaration","scope":15236,"src":"46442:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15122,"name":"uint256","nodeType":"ElementaryTypeName","src":"46442:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15124,"nodeType":"VariableDeclarationStatement","src":"46442:20:53"},{"id":15169,"nodeType":"Block","src":"46521:981:53","statements":[{"assignments":[15126],"declarations":[{"constant":false,"id":15126,"mutability":"mutable","name":"amountOutScaled18","nameLocation":"46547:17:53","nodeType":"VariableDeclaration","scope":15169,"src":"46539:25:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15125,"name":"uint256","nodeType":"ElementaryTypeName","src":"46539:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15130,"initialValue":{"baseExpression":{"id":15127,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14811,"src":"46567:18:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15129,"indexExpression":{"id":15128,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15112,"src":"46586:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"46567:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"46539:49:53"},{"expression":{"arguments":[{"id":15132,"name":"amountOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15126,"src":"46630:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15131,"name":"_ensureValidTradeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16328,"src":"46606:23:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":15133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"46606:42:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15134,"nodeType":"ExpressionStatement","src":"46606:42:53"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":15135,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14808,"src":"46755:13:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15137,"indexExpression":{"id":15136,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15112,"src":"46769:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"46755:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":15138,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"46775:1:53","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"46755:21:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15167,"nodeType":"Block","src":"47257:231:53","statements":[{"expression":{"id":15165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15161,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15123,"src":"47438:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":15162,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14808,"src":"47453:13:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15164,"indexExpression":{"id":15163,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15112,"src":"47467:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"47453:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"47438:31:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15166,"nodeType":"ExpressionStatement","src":"47438:31:53"}]},"id":15168,"nodeType":"IfStatement","src":"46751:737:53","trueBody":{"id":15160,"nodeType":"Block","src":"46778:473:53","statements":[{"expression":{"id":15152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15140,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15123,"src":"46995:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":15143,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14794,"src":"47076:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":15144,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"47085:21:53","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":2330,"src":"47076:30:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15146,"indexExpression":{"id":15145,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15112,"src":"47107:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"47076:33:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":15147,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14794,"src":"47135:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":15148,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"47144:10:53","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":2327,"src":"47135:19:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15150,"indexExpression":{"id":15149,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15112,"src":"47155:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"47135:22:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15141,"name":"amountOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15126,"src":"47010:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"47028:22:53","memberName":"toRawUndoRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":3107,"src":"47010:40:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":15151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"47010:169:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"46995:184:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15153,"nodeType":"ExpressionStatement","src":"46995:184:53"},{"expression":{"id":15158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15154,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14808,"src":"47201:13:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15156,"indexExpression":{"id":15155,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15112,"src":"47215:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"47201:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15157,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15123,"src":"47220:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"47201:31:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15159,"nodeType":"ExpressionStatement","src":"47201:31:53"}]}}]},{"assignments":[15172],"declarations":[{"constant":false,"id":15172,"mutability":"mutable","name":"token","nameLocation":"47523:5:53","nodeType":"VariableDeclaration","scope":15236,"src":"47516:12:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":15171,"nodeType":"UserDefinedTypeName","pathNode":{"id":15170,"name":"IERC20","nameLocations":["47516:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"47516:6:53"},"referencedDeclaration":6980,"src":"47516:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"}],"id":15177,"initialValue":{"baseExpression":{"expression":{"id":15173,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14794,"src":"47531:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":15174,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"47540:6:53","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":2314,"src":"47531:15:53","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":15176,"indexExpression":{"id":15175,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15112,"src":"47547:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"47531:18:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"47516:33:53"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15178,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15123,"src":"47615:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"baseExpression":{"expression":{"id":15179,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"47630:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15180,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"47637:13:53","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":2440,"src":"47630:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15182,"indexExpression":{"id":15181,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15112,"src":"47651:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"47630:23:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"47615:38:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15194,"nodeType":"IfStatement","src":"47611:147:53","trueBody":{"id":15193,"nodeType":"Block","src":"47655:103:53","statements":[{"errorCall":{"arguments":[{"id":15185,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15172,"src":"47698:5:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":15186,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15123,"src":"47705:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":15187,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"47719:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15188,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"47726:13:53","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":2440,"src":"47719:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15190,"indexExpression":{"id":15189,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15112,"src":"47740:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"47719:23:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15184,"name":"AmountOutBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1186,"src":"47680:17:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$6980_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":15191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"47680:63:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15192,"nodeType":"RevertStatement","src":"47673:70:53"}]}},{"expression":{"arguments":[{"id":15196,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15172,"src":"47846:5:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":15197,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15123,"src":"47853:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15195,"name":"_supplyCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16512,"src":"47832:13:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":15198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"47832:34:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15199,"nodeType":"ExpressionStatement","src":"47832:34:53"},{"expression":{"id":15216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":15200,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14840,"src":"48009:14:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15202,"indexExpression":{"id":15201,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15112,"src":"48024:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"48009:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15203,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14817,"src":"48028:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":15204,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"48035:25:53","memberName":"aggregateSwapFeeAmountRaw","nodeType":"MemberAccess","referencedDeclaration":14196,"src":"48028:32:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15205,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"48008:53:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15207,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14794,"src":"48116:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},{"baseExpression":{"id":15208,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14840,"src":"48142:14:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15210,"indexExpression":{"id":15209,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15112,"src":"48157:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"48142:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15211,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"48177:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15212,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"48184:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"48177:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15213,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15172,"src":"48206:5:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":15214,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15112,"src":"48229:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15206,"name":"_computeAndChargeAggregateSwapFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15389,"src":"48064:34:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PoolData_$2331_memory_ptr_$_t_uint256_$_t_address_$_t_contract$_IERC20_$6980_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct PoolData memory,uint256,address,contract IERC20,uint256) returns (uint256,uint256)"}},"id":15215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48064:180:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"48008:236:53","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15217,"nodeType":"ExpressionStatement","src":"48008:236:53"},{"expression":{"arguments":[{"id":15221,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15112,"src":"48654:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":15222,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14794,"src":"48673:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":15223,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"48682:11:53","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":2321,"src":"48673:20:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15225,"indexExpression":{"id":15224,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15112,"src":"48694:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"48673:23:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15226,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15123,"src":"48700:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":15227,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14817,"src":"48715:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":15228,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"48722:25:53","memberName":"aggregateSwapFeeAmountRaw","nodeType":"MemberAccess","referencedDeclaration":14196,"src":"48715:32:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"48700:47:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15230,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"48699:49:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"48673:75:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15232,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"48766:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2334_$","typeString":"type(enum Rounding)"}},"id":15233,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"48775:10:53","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":2333,"src":"48766:19:53","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"expression":{"id":15218,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14794,"src":"48604:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":15220,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"48613:23:53","memberName":"updateRawAndLiveBalance","nodeType":"MemberAccess","referencedDeclaration":20105,"src":"48604:32:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_PoolData_$2331_memory_ptr_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$2334_$returns$__$attached_to$_t_struct$_PoolData_$2331_memory_ptr_$","typeString":"function (struct PoolData memory,uint256,uint256,enum Rounding) pure"}},"id":15234,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48604:195:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15235,"nodeType":"ExpressionStatement","src":"48604:195:53"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15115,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15112,"src":"46401:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":15116,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14817,"src":"46405:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$14199_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":15117,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"46412:9:53","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":14194,"src":"46405:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"46401:20:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15237,"initializationExpression":{"assignments":[15112],"declarations":[{"constant":false,"id":15112,"mutability":"mutable","name":"i","nameLocation":"46394:1:53","nodeType":"VariableDeclaration","scope":15237,"src":"46386:9:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15111,"name":"uint256","nodeType":"ElementaryTypeName","src":"46386:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15114,"initialValue":{"hexValue":"30","id":15113,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"46398:1:53","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"46386:13:53"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":15120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"46423:3:53","subExpression":{"id":15119,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15112,"src":"46425:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15121,"nodeType":"ExpressionStatement","src":"46423:3:53"},"nodeType":"ForStatement","src":"46381:2429:53"},{"expression":{"arguments":[{"expression":{"id":15239,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"48897:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15240,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"48904:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"48897:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15241,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14794,"src":"48910:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}],"id":15238,"name":"_writePoolBalancesToStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16926,"src":"48869:27:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_PoolData_$2331_memory_ptr_$returns$__$","typeString":"function (address,struct PoolData memory)"}},"id":15242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48869:50:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15243,"nodeType":"ExpressionStatement","src":"48869:50:53"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":15247,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"49070:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15248,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49077:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"49070:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15246,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"49062:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15245,"name":"address","nodeType":"ElementaryTypeName","src":"49062:7:53","typeDescriptions":{}}},"id":15249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"49062:20:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15250,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"49084:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15251,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49091:4:53","memberName":"from","nodeType":"MemberAccess","referencedDeclaration":2435,"src":"49084:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15252,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"49097:3:53","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"49101:6:53","memberName":"sender","nodeType":"MemberAccess","src":"49097:10:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15254,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14805,"src":"49109:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15244,"name":"_spendAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20897,"src":"49046:15:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":15255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"49046:75:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15256,"nodeType":"ExpressionStatement","src":"49046:75:53"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":15257,"name":"_isQueryContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17226,"src":"49136:15:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":15258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"49136:17:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15268,"nodeType":"IfStatement","src":"49132:189:53","trueBody":{"id":15267,"nodeType":"Block","src":"49155:166:53","statements":[{"expression":{"arguments":[{"expression":{"id":15260,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"49272:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15261,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49279:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"49272:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15262,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"49285:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15263,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49292:4:53","memberName":"from","nodeType":"MemberAccess","referencedDeclaration":2435,"src":"49285:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15264,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14805,"src":"49298:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15259,"name":"_queryModeBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20457,"src":"49246:25:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":15265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"49246:64:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15266,"nodeType":"ExpressionStatement","src":"49246:64:53"}]}},{"expression":{"arguments":[{"arguments":[{"expression":{"id":15272,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"49605:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15273,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49612:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"49605:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15271,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"49597:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15270,"name":"address","nodeType":"ElementaryTypeName","src":"49597:7:53","typeDescriptions":{}}},"id":15274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"49597:20:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15275,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"49619:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15276,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49626:4:53","memberName":"from","nodeType":"MemberAccess","referencedDeclaration":2435,"src":"49619:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15277,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14805,"src":"49632:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15269,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20691,"src":"49591:5:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":15278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"49591:53:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15279,"nodeType":"ExpressionStatement","src":"49591:53:53"},{"eventCall":{"arguments":[{"expression":{"id":15281,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"49722:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15282,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49729:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"49722:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15283,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"49747:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15284,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49754:4:53","memberName":"from","nodeType":"MemberAccess","referencedDeclaration":2435,"src":"49747:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15285,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"49772:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15286,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49779:4:53","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2443,"src":"49772:11:53","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"}},{"arguments":[{"expression":{"id":15288,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"49810:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":15289,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49817:4:53","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"49810:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15287,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20375,"src":"49797:12:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":15290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"49797:25:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15291,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14808,"src":"49836:13:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":15292,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14840,"src":"49863:14:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":15280,"name":"LiquidityRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1492,"src":"49692:16:53","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_enum$_RemoveLiquidityKind_$2430_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,address,enum RemoveLiquidityKind,uint256,uint256[] memory,uint256[] memory)"}},"id":15293,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"49692:195:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15294,"nodeType":"EmitStatement","src":"49687:200:53"}]},"documentation":{"id":14791,"nodeType":"StructuredDocumentation","src":"41319:460:53","text":" @dev Calls the appropriate pool hook and calculates the required inputs and outputs for the operation\n considering the given kind, and updates the Vault's internal accounting. This includes:\n - Setting pool balances\n - Supplying credit to the liquidity provider\n - Burning pool tokens\n - Emitting events\n It is non-reentrant, as it performs external calls and updates the Vault's state accordingly."},"id":15296,"implemented":true,"kind":"function","modifiers":[{"id":14803,"kind":"modifierInvocation","modifierName":{"id":14802,"name":"nonReentrant","nameLocations":["41968:12:53"],"nodeType":"IdentifierPath","referencedDeclaration":6146,"src":"41968:12:53"},"nodeType":"ModifierInvocation","src":"41968:12:53"}],"name":"_removeLiquidity","nameLocation":"41793:16:53","nodeType":"FunctionDefinition","parameters":{"id":14801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14794,"mutability":"mutable","name":"poolData","nameLocation":"41835:8:53","nodeType":"VariableDeclaration","scope":15296,"src":"41819:24:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":14793,"nodeType":"UserDefinedTypeName","pathNode":{"id":14792,"name":"PoolData","nameLocations":["41819:8:53"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"41819:8:53"},"referencedDeclaration":2331,"src":"41819:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":14797,"mutability":"mutable","name":"params","nameLocation":"41882:6:53","nodeType":"VariableDeclaration","scope":15296,"src":"41853:35:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":14796,"nodeType":"UserDefinedTypeName","pathNode":{"id":14795,"name":"RemoveLiquidityParams","nameLocations":["41853:21:53"],"nodeType":"IdentifierPath","referencedDeclaration":2446,"src":"41853:21:53"},"referencedDeclaration":2446,"src":"41853:21:53","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"},{"constant":false,"id":14800,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"41915:21:53","nodeType":"VariableDeclaration","scope":15296,"src":"41898:38:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14798,"name":"uint256","nodeType":"ElementaryTypeName","src":"41898:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14799,"nodeType":"ArrayTypeName","src":"41898:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"41809:133:53"},"returnParameters":{"id":14814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14805,"mutability":"mutable","name":"bptAmountIn","nameLocation":"42019:11:53","nodeType":"VariableDeclaration","scope":15296,"src":"42011:19:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14804,"name":"uint256","nodeType":"ElementaryTypeName","src":"42011:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14808,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"42061:13:53","nodeType":"VariableDeclaration","scope":15296,"src":"42044:30:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14806,"name":"uint256","nodeType":"ElementaryTypeName","src":"42044:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14807,"nodeType":"ArrayTypeName","src":"42044:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":14811,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"42105:18:53","nodeType":"VariableDeclaration","scope":15296,"src":"42088:35:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14809,"name":"uint256","nodeType":"ElementaryTypeName","src":"42088:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14810,"nodeType":"ArrayTypeName","src":"42088:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":14813,"mutability":"mutable","name":"returnData","nameLocation":"42150:10:53","nodeType":"VariableDeclaration","scope":15296,"src":"42137:23:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":14812,"name":"bytes","nodeType":"ElementaryTypeName","src":"42137:5:53","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"41997:173:53"},"scope":16391,"src":"41784:8110:53","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15388,"nodeType":"Block","src":"50773:2073:53","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15316,"name":"totalSwapFeeAmountScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15302,"src":"50869:26:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":15317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"50898:1:53","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"50869:30:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15387,"nodeType":"IfStatement","src":"50865:1975:53","trueBody":{"id":15386,"nodeType":"Block","src":"50901:1939:53","statements":[{"expression":{"id":15331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15319,"name":"totalSwapFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15312,"src":"51199:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":15322,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15300,"src":"51290:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":15323,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"51299:21:53","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":2330,"src":"51290:30:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15325,"indexExpression":{"id":15324,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15309,"src":"51321:5:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"51290:37:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":15326,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15300,"src":"51345:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":15327,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"51354:10:53","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":2327,"src":"51345:19:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15329,"indexExpression":{"id":15328,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15309,"src":"51365:5:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"51345:26:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15320,"name":"totalSwapFeeAmountScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15302,"src":"51223:26:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"51250:22:53","memberName":"toRawUndoRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":3107,"src":"51223:49:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":15330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51223:162:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"51199:186:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15332,"nodeType":"ExpressionStatement","src":"51199:186:53"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":15333,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15300,"src":"51580:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":15334,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"51589:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"51580:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":15335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"51604:20:53","memberName":"isPoolInRecoveryMode","nodeType":"MemberAccess","referencedDeclaration":18893,"src":"51580:44:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":15336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51580:46:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":15337,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"51630:5:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"51580:55:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15385,"nodeType":"IfStatement","src":"51576:1254:53","trueBody":{"id":15384,"nodeType":"Block","src":"51637:1193:53","statements":[{"assignments":[15340],"declarations":[{"constant":false,"id":15340,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"51663:26:53","nodeType":"VariableDeclaration","scope":15384,"src":"51655:34:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15339,"name":"uint256","nodeType":"ElementaryTypeName","src":"51655:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15345,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":15341,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15300,"src":"51692:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":15342,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"51701:14:53","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"51692:23:53","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":15343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"51716:29:53","memberName":"getAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":19249,"src":"51692:53:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":15344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51692:55:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"51655:92:53"},{"expression":{"id":15351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15346,"name":"aggregateSwapFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15314,"src":"52052:25:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15349,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15340,"src":"52110:26:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15347,"name":"totalSwapFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15312,"src":"52080:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"52102:7:53","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4511,"src":"52080:29:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":15350,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"52080:57:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"52052:85:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15352,"nodeType":"ExpressionStatement","src":"52052:85:53"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15353,"name":"aggregateSwapFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15314,"src":"52236:25:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":15354,"name":"totalSwapFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15312,"src":"52264:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"52236:49:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15360,"nodeType":"IfStatement","src":"52232:137:53","trueBody":{"id":15359,"nodeType":"Block","src":"52287:82:53","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15356,"name":"ProtocolFeesExceedTotalCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1209,"src":"52316:32:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":15357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"52316:34:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15358,"nodeType":"RevertStatement","src":"52309:41:53"}]}},{"assignments":[15362],"declarations":[{"constant":false,"id":15362,"mutability":"mutable","name":"currentPackedBalance","nameLocation":"52567:20:53","nodeType":"VariableDeclaration","scope":15384,"src":"52559:28:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":15361,"name":"bytes32","nodeType":"ElementaryTypeName","src":"52559:7:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":15368,"initialValue":{"baseExpression":{"baseExpression":{"id":15363,"name":"_aggregateFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17390,"src":"52590:20:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6980_$_t_bytes32_$_$","typeString":"mapping(address => mapping(contract IERC20 => bytes32))"}},"id":15365,"indexExpression":{"id":15364,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15304,"src":"52611:4:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"52590:26:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}},"id":15367,"indexExpression":{"id":15366,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15307,"src":"52617:5:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"52590:33:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"52559:64:53"},{"expression":{"id":15382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":15369,"name":"_aggregateFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17390,"src":"52641:20:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6980_$_t_bytes32_$_$","typeString":"mapping(address => mapping(contract IERC20 => bytes32))"}},"id":15372,"indexExpression":{"id":15370,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15304,"src":"52662:4:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"52641:26:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}},"id":15373,"indexExpression":{"id":15371,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15307,"src":"52668:5:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"52641:33:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15376,"name":"currentPackedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15362,"src":"52733:20:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":15377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"52754:13:53","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":2910,"src":"52733:34:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":15378,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"52733:36:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":15379,"name":"aggregateSwapFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15314,"src":"52772:25:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"52733:64:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15374,"name":"currentPackedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15362,"src":"52677:20:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":15375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"52698:13:53","memberName":"setBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":2945,"src":"52677:34:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":15381,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"52677:138:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"52641:174:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":15383,"nodeType":"ExpressionStatement","src":"52641:174:53"}]}}]}}]},"documentation":{"id":15297,"nodeType":"StructuredDocumentation","src":"49900:589:53","text":" @dev Preconditions: poolConfigBits, decimalScalingFactors, tokenRates in `poolData`.\n Side effects: updates `_aggregateFeeAmounts` storage.\n Note that this computes the aggregate total of the protocol fees and stores it, without emitting any events.\n Splitting the fees and event emission occur during fee collection.\n Should only be called in a non-reentrant context.\n @return totalSwapFeeAmountRaw Total swap fees raw (LP + aggregate protocol fees)\n @return aggregateSwapFeeAmountRaw Sum of protocol and pool creator fees raw"},"id":15389,"implemented":true,"kind":"function","modifiers":[],"name":"_computeAndChargeAggregateSwapFees","nameLocation":"50503:34:53","nodeType":"FunctionDefinition","parameters":{"id":15310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15300,"mutability":"mutable","name":"poolData","nameLocation":"50563:8:53","nodeType":"VariableDeclaration","scope":15389,"src":"50547:24:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":15299,"nodeType":"UserDefinedTypeName","pathNode":{"id":15298,"name":"PoolData","nameLocations":["50547:8:53"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"50547:8:53"},"referencedDeclaration":2331,"src":"50547:8:53","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":15302,"mutability":"mutable","name":"totalSwapFeeAmountScaled18","nameLocation":"50589:26:53","nodeType":"VariableDeclaration","scope":15389,"src":"50581:34:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15301,"name":"uint256","nodeType":"ElementaryTypeName","src":"50581:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15304,"mutability":"mutable","name":"pool","nameLocation":"50633:4:53","nodeType":"VariableDeclaration","scope":15389,"src":"50625:12:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15303,"name":"address","nodeType":"ElementaryTypeName","src":"50625:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15307,"mutability":"mutable","name":"token","nameLocation":"50654:5:53","nodeType":"VariableDeclaration","scope":15389,"src":"50647:12:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":15306,"nodeType":"UserDefinedTypeName","pathNode":{"id":15305,"name":"IERC20","nameLocations":["50647:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"50647:6:53"},"referencedDeclaration":6980,"src":"50647:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":15309,"mutability":"mutable","name":"index","nameLocation":"50677:5:53","nodeType":"VariableDeclaration","scope":15389,"src":"50669:13:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15308,"name":"uint256","nodeType":"ElementaryTypeName","src":"50669:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"50537:151:53"},"returnParameters":{"id":15315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15312,"mutability":"mutable","name":"totalSwapFeeAmountRaw","nameLocation":"50715:21:53","nodeType":"VariableDeclaration","scope":15389,"src":"50707:29:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15311,"name":"uint256","nodeType":"ElementaryTypeName","src":"50707:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15314,"mutability":"mutable","name":"aggregateSwapFeeAmountRaw","nameLocation":"50746:25:53","nodeType":"VariableDeclaration","scope":15389,"src":"50738:33:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15313,"name":"uint256","nodeType":"ElementaryTypeName","src":"50738:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"50706:66:53"},"scope":16391,"src":"50494:2352:53","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[2118],"body":{"id":15426,"nodeType":"Block","src":"53265:168:53","statements":[{"assignments":[15409],"declarations":[{"constant":false,"id":15409,"mutability":"mutable","name":"poolTokens","nameLocation":"53291:10:53","nodeType":"VariableDeclaration","scope":15426,"src":"53275:26:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":15407,"nodeType":"UserDefinedTypeName","pathNode":{"id":15406,"name":"IERC20","nameLocations":["53275:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"53275:6:53"},"referencedDeclaration":6980,"src":"53275:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":15408,"nodeType":"ArrayTypeName","src":"53275:8:53","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":15413,"initialValue":{"baseExpression":{"id":15410,"name":"_poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17369,"src":"53304:11:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_IERC20_$6980_$dyn_storage_$","typeString":"mapping(address => contract IERC20[] storage ref)"}},"id":15412,"indexExpression":{"id":15411,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15392,"src":"53316:4:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"53304:17:53","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"53275:46:53"},{"assignments":[15415],"declarations":[{"constant":false,"id":15415,"mutability":"mutable","name":"index","nameLocation":"53340:5:53","nodeType":"VariableDeclaration","scope":15426,"src":"53332:13:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15414,"name":"uint256","nodeType":"ElementaryTypeName","src":"53332:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15420,"initialValue":{"arguments":[{"id":15417,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15409,"src":"53364:10:53","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},{"id":15418,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15395,"src":"53376:5:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"},{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}],"id":15416,"name":"_findTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17167,"src":"53348:15:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr_$_t_contract$_IERC20_$6980_$returns$_t_uint256_$","typeString":"function (contract IERC20[] memory,contract IERC20) pure returns (uint256)"}},"id":15419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"53348:34:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"53332:50:53"},{"expression":{"components":[{"expression":{"id":15421,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15409,"src":"53401:10:53","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":15422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"53412:6:53","memberName":"length","nodeType":"MemberAccess","src":"53401:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15423,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15415,"src":"53420:5:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15424,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"53400:26:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":15404,"id":15425,"nodeType":"Return","src":"53393:33:53"}]},"documentation":{"id":15390,"nodeType":"StructuredDocumentation","src":"53076:26:53","text":"@inheritdoc IVaultMain"},"functionSelector":"c9c1661b","id":15427,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":15398,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15392,"src":"53232:4:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":15399,"kind":"modifierInvocation","modifierName":{"id":15397,"name":"withRegisteredPool","nameLocations":["53213:18:53"],"nodeType":"IdentifierPath","referencedDeclaration":16741,"src":"53213:18:53"},"nodeType":"ModifierInvocation","src":"53213:24:53"}],"name":"getPoolTokenCountAndIndexOfToken","nameLocation":"53116:32:53","nodeType":"FunctionDefinition","parameters":{"id":15396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15392,"mutability":"mutable","name":"pool","nameLocation":"53166:4:53","nodeType":"VariableDeclaration","scope":15427,"src":"53158:12:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15391,"name":"address","nodeType":"ElementaryTypeName","src":"53158:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15395,"mutability":"mutable","name":"token","nameLocation":"53187:5:53","nodeType":"VariableDeclaration","scope":15427,"src":"53180:12:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":15394,"nodeType":"UserDefinedTypeName","pathNode":{"id":15393,"name":"IERC20","nameLocations":["53180:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"53180:6:53"},"referencedDeclaration":6980,"src":"53180:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"53148:50:53"},"returnParameters":{"id":15404,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15401,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15427,"src":"53247:7:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15400,"name":"uint256","nodeType":"ElementaryTypeName","src":"53247:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15403,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15427,"src":"53256:7:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15402,"name":"uint256","nodeType":"ElementaryTypeName","src":"53256:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"53246:18:53"},"scope":16391,"src":"53107:326:53","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2130],"body":{"id":15449,"nodeType":"Block","src":"53780:78:53","statements":[{"expression":{"arguments":[{"expression":{"id":15440,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"53800:3:53","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"53804:6:53","memberName":"sender","nodeType":"MemberAccess","src":"53800:10:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15442,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15430,"src":"53812:5:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15443,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15432,"src":"53819:2:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15444,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15434,"src":"53823:6:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15439,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20781,"src":"53790:9:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":15445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"53790:40:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15446,"nodeType":"ExpressionStatement","src":"53790:40:53"},{"expression":{"hexValue":"74727565","id":15447,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"53847:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":15438,"id":15448,"nodeType":"Return","src":"53840:11:53"}]},"documentation":{"id":15428,"nodeType":"StructuredDocumentation","src":"53664:26:53","text":"@inheritdoc IVaultMain"},"functionSelector":"beabacc8","id":15450,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"53704:8:53","nodeType":"FunctionDefinition","parameters":{"id":15435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15430,"mutability":"mutable","name":"owner","nameLocation":"53721:5:53","nodeType":"VariableDeclaration","scope":15450,"src":"53713:13:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15429,"name":"address","nodeType":"ElementaryTypeName","src":"53713:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15432,"mutability":"mutable","name":"to","nameLocation":"53736:2:53","nodeType":"VariableDeclaration","scope":15450,"src":"53728:10:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15431,"name":"address","nodeType":"ElementaryTypeName","src":"53728:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15434,"mutability":"mutable","name":"amount","nameLocation":"53748:6:53","nodeType":"VariableDeclaration","scope":15450,"src":"53740:14:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15433,"name":"uint256","nodeType":"ElementaryTypeName","src":"53740:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"53712:43:53"},"returnParameters":{"id":15438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15437,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15450,"src":"53774:4:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15436,"name":"bool","nodeType":"ElementaryTypeName","src":"53774:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"53773:6:53"},"scope":16391,"src":"53695:163:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2144],"body":{"id":15482,"nodeType":"Block","src":"54000:137:53","statements":[{"expression":{"arguments":[{"expression":{"id":15465,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"54026:3:53","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"54030:6:53","memberName":"sender","nodeType":"MemberAccess","src":"54026:10:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15467,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15455,"src":"54038:4:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15468,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15453,"src":"54044:7:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15469,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15459,"src":"54053:6:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15464,"name":"_spendAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20897,"src":"54010:15:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":15470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54010:50:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15471,"nodeType":"ExpressionStatement","src":"54010:50:53"},{"expression":{"arguments":[{"expression":{"id":15473,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"54080:3:53","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"54084:6:53","memberName":"sender","nodeType":"MemberAccess","src":"54080:10:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15475,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15455,"src":"54092:4:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15476,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15457,"src":"54098:2:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15477,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15459,"src":"54102:6:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15472,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20781,"src":"54070:9:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":15478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54070:39:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15479,"nodeType":"ExpressionStatement","src":"54070:39:53"},{"expression":{"hexValue":"74727565","id":15480,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"54126:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":15463,"id":15481,"nodeType":"Return","src":"54119:11:53"}]},"documentation":{"id":15451,"nodeType":"StructuredDocumentation","src":"53864:26:53","text":"@inheritdoc IVaultMain"},"functionSelector":"15dacbea","id":15483,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"53904:12:53","nodeType":"FunctionDefinition","parameters":{"id":15460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15453,"mutability":"mutable","name":"spender","nameLocation":"53925:7:53","nodeType":"VariableDeclaration","scope":15483,"src":"53917:15:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15452,"name":"address","nodeType":"ElementaryTypeName","src":"53917:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15455,"mutability":"mutable","name":"from","nameLocation":"53942:4:53","nodeType":"VariableDeclaration","scope":15483,"src":"53934:12:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15454,"name":"address","nodeType":"ElementaryTypeName","src":"53934:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15457,"mutability":"mutable","name":"to","nameLocation":"53956:2:53","nodeType":"VariableDeclaration","scope":15483,"src":"53948:10:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15456,"name":"address","nodeType":"ElementaryTypeName","src":"53948:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15459,"mutability":"mutable","name":"amount","nameLocation":"53968:6:53","nodeType":"VariableDeclaration","scope":15483,"src":"53960:14:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15458,"name":"uint256","nodeType":"ElementaryTypeName","src":"53960:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"53916:59:53"},"returnParameters":{"id":15463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15462,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15483,"src":"53994:4:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15461,"name":"bool","nodeType":"ElementaryTypeName","src":"53994:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"53993:6:53"},"scope":16391,"src":"53895:242:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2157],"body":{"id":15638,"nodeType":"Block","src":"54728:1530:53","statements":[{"assignments":[15508],"declarations":[{"constant":false,"id":15508,"mutability":"mutable","name":"underlyingToken","nameLocation":"54745:15:53","nodeType":"VariableDeclaration","scope":15638,"src":"54738:22:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":15507,"nodeType":"UserDefinedTypeName","pathNode":{"id":15506,"name":"IERC20","nameLocations":["54738:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"54738:6:53"},"referencedDeclaration":6980,"src":"54738:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"}],"id":15515,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":15510,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"54770:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":15511,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"54777:12:53","memberName":"wrappedToken","nodeType":"MemberAccess","referencedDeclaration":2459,"src":"54770:19:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"id":15512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"54790:5:53","memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":6573,"src":"54770:25:53","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":15513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54770:27:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15509,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"54763:6:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$6980_$","typeString":"type(contract IERC20)"}},"id":15514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54763:35:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"54738:60:53"},{"expression":{"arguments":[{"expression":{"id":15517,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"54834:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":15518,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"54841:12:53","memberName":"wrappedToken","nodeType":"MemberAccess","referencedDeclaration":2459,"src":"54834:19:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},{"arguments":[{"id":15521,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15508,"src":"54863:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}],"id":15520,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"54855:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15519,"name":"address","nodeType":"ElementaryTypeName","src":"54855:7:53","typeDescriptions":{}}},"id":15522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54855:24:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},{"typeIdentifier":"t_address","typeString":"address"}],"id":15516,"name":"_ensureCorrectBufferAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16878,"src":"54808:25:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC4626_$6704_$_t_address_$returns$__$","typeString":"function (contract IERC4626,address) view"}},"id":15523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54808:72:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15524,"nodeType":"ExpressionStatement","src":"54808:72:53"},{"expression":{"arguments":[{"expression":{"id":15526,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"54914:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":15527,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"54921:12:53","memberName":"wrappedToken","nodeType":"MemberAccess","referencedDeclaration":2459,"src":"54914:19:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},{"expression":{"id":15528,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"54935:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":15529,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"54942:14:53","memberName":"amountGivenRaw","nodeType":"MemberAccess","referencedDeclaration":2461,"src":"54935:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15525,"name":"_ensureValidWrapAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15657,"src":"54891:22:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC4626_$6704_$_t_uint256_$returns$__$","typeString":"function (contract IERC4626,uint256) view"}},"id":15530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54891:66:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15531,"nodeType":"ExpressionStatement","src":"54891:66:53"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_WrappingDirection_$2449","typeString":"enum WrappingDirection"},"id":15536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15532,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"54972:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":15533,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"54979:9:53","memberName":"direction","nodeType":"MemberAccess","referencedDeclaration":2456,"src":"54972:16:53","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$2449","typeString":"enum WrappingDirection"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":15534,"name":"WrappingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2449,"src":"54992:17:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_WrappingDirection_$2449_$","typeString":"type(enum WrappingDirection)"}},"id":15535,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"55010:6:53","memberName":"UNWRAP","nodeType":"MemberAccess","referencedDeclaration":2448,"src":"54992:24:53","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$2449","typeString":"enum WrappingDirection"}},"src":"54972:44:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15590,"nodeType":"Block","src":"55389:361:53","statements":[{"assignments":[15565],"declarations":[{"constant":false,"id":15565,"mutability":"mutable","name":"bufferBalances","nameLocation":"55411:14:53","nodeType":"VariableDeclaration","scope":15590,"src":"55403:22:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":15564,"name":"bytes32","nodeType":"ElementaryTypeName","src":"55403:7:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":15566,"nodeType":"VariableDeclarationStatement","src":"55403:22:53"},{"expression":{"id":15580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":15567,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15502,"src":"55440:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15568,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15504,"src":"55453:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15569,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15565,"src":"55467:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":15570,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"55439:43:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"tuple(uint256,uint256,bytes32)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":15572,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"55518:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":15573,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55525:4:53","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2453,"src":"55518:11:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},{"id":15574,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15508,"src":"55547:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"expression":{"id":15575,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"55580:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":15576,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55587:12:53","memberName":"wrappedToken","nodeType":"MemberAccess","referencedDeclaration":2459,"src":"55580:19:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},{"expression":{"id":15577,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"55617:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":15578,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55624:14:53","memberName":"amountGivenRaw","nodeType":"MemberAccess","referencedDeclaration":2461,"src":"55617:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15571,"name":"_wrapWithBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15922,"src":"55485:15:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_enum$_SwapKind_$2337_$_t_contract$_IERC20_$6980_$_t_contract$_IERC4626_$6704_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"function (enum SwapKind,contract IERC20,contract IERC4626,uint256) returns (uint256,uint256,bytes32)"}},"id":15579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55485:167:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"tuple(uint256,uint256,bytes32)"}},"src":"55439:213:53","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15581,"nodeType":"ExpressionStatement","src":"55439:213:53"},{"eventCall":{"arguments":[{"expression":{"id":15583,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"55676:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":15584,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55683:12:53","memberName":"wrappedToken","nodeType":"MemberAccess","referencedDeclaration":2459,"src":"55676:19:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},{"id":15585,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15502,"src":"55697:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15586,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15504,"src":"55710:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15587,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15565,"src":"55724:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":15582,"name":"Wrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1444,"src":"55671:4:53","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC4626_$6704_$_t_uint256_$_t_uint256_$_t_bytes32_$returns$__$","typeString":"function (contract IERC4626,uint256,uint256,bytes32)"}},"id":15588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55671:68:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15589,"nodeType":"EmitStatement","src":"55666:73:53"}]},"id":15591,"nodeType":"IfStatement","src":"54968:782:53","trueBody":{"id":15563,"nodeType":"Block","src":"55018:365:53","statements":[{"assignments":[15538],"declarations":[{"constant":false,"id":15538,"mutability":"mutable","name":"bufferBalances","nameLocation":"55040:14:53","nodeType":"VariableDeclaration","scope":15563,"src":"55032:22:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":15537,"name":"bytes32","nodeType":"ElementaryTypeName","src":"55032:7:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":15539,"nodeType":"VariableDeclarationStatement","src":"55032:22:53"},{"expression":{"id":15553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":15540,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15502,"src":"55069:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15541,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15504,"src":"55082:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15542,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15538,"src":"55096:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":15543,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"55068:43:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"tuple(uint256,uint256,bytes32)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":15545,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"55149:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":15546,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55156:4:53","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2453,"src":"55149:11:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},{"id":15547,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15508,"src":"55178:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"expression":{"id":15548,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"55211:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":15549,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55218:12:53","memberName":"wrappedToken","nodeType":"MemberAccess","referencedDeclaration":2459,"src":"55211:19:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},{"expression":{"id":15550,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"55248:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":15551,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55255:14:53","memberName":"amountGivenRaw","nodeType":"MemberAccess","referencedDeclaration":2461,"src":"55248:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15544,"name":"_unwrapWithBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16158,"src":"55114:17:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_enum$_SwapKind_$2337_$_t_contract$_IERC20_$6980_$_t_contract$_IERC4626_$6704_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"function (enum SwapKind,contract IERC20,contract IERC4626,uint256) returns (uint256,uint256,bytes32)"}},"id":15552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55114:169:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"tuple(uint256,uint256,bytes32)"}},"src":"55068:215:53","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15554,"nodeType":"ExpressionStatement","src":"55068:215:53"},{"eventCall":{"arguments":[{"expression":{"id":15556,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"55309:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":15557,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55316:12:53","memberName":"wrappedToken","nodeType":"MemberAccess","referencedDeclaration":2459,"src":"55309:19:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},{"id":15558,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15502,"src":"55330:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15559,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15504,"src":"55343:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15560,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15538,"src":"55357:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":15555,"name":"Unwrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1456,"src":"55302:6:53","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC4626_$6704_$_t_uint256_$_t_uint256_$_t_bytes32_$returns$__$","typeString":"function (contract IERC4626,uint256,uint256,bytes32)"}},"id":15561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55302:70:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15562,"nodeType":"EmitStatement","src":"55297:75:53"}]}},{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},"id":15596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15592,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"55764:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":15593,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55771:4:53","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2453,"src":"55764:11:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":15594,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2337,"src":"55779:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$2337_$","typeString":"type(enum SwapKind)"}},"id":15595,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"55788:8:53","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":2335,"src":"55779:17:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"src":"55764:32:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15630,"nodeType":"Block","src":"55992:185:53","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15614,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15502,"src":"56010:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":15615,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"56024:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":15616,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"56031:8:53","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":2463,"src":"56024:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"56010:29:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15625,"nodeType":"IfStatement","src":"56006:114:53","trueBody":{"id":15624,"nodeType":"Block","src":"56041:79:53","statements":[{"errorCall":{"arguments":[{"id":15619,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15502,"src":"56076:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15620,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"56089:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":15621,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"56096:8:53","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":2463,"src":"56089:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15618,"name":"SwapLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1127,"src":"56066:9:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":15622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"56066:39:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15623,"nodeType":"RevertStatement","src":"56059:46:53"}]}},{"expression":{"id":15628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15626,"name":"amountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15500,"src":"56133:19:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15627,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15502,"src":"56155:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"56133:33:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15629,"nodeType":"ExpressionStatement","src":"56133:33:53"}]},"id":15631,"nodeType":"IfStatement","src":"55760:417:53","trueBody":{"id":15613,"nodeType":"Block","src":"55798:188:53","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15597,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15504,"src":"55816:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":15598,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"55831:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":15599,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55838:8:53","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":2463,"src":"55831:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"55816:30:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15608,"nodeType":"IfStatement","src":"55812:116:53","trueBody":{"id":15607,"nodeType":"Block","src":"55848:80:53","statements":[{"errorCall":{"arguments":[{"id":15602,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15504,"src":"55883:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15603,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"55897:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":15604,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55904:8:53","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":2463,"src":"55897:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15601,"name":"SwapLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1127,"src":"55873:9:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":15605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55873:40:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15606,"nodeType":"RevertStatement","src":"55866:47:53"}]}},{"expression":{"id":15611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15609,"name":"amountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15500,"src":"55941:19:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15610,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15504,"src":"55963:12:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"55941:34:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15612,"nodeType":"ExpressionStatement","src":"55941:34:53"}]}},{"expression":{"arguments":[{"expression":{"id":15633,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"56210:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":15634,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"56217:12:53","memberName":"wrappedToken","nodeType":"MemberAccess","referencedDeclaration":2459,"src":"56210:19:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},{"id":15635,"name":"amountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15500,"src":"56231:19:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15632,"name":"_ensureValidWrapAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15657,"src":"56187:22:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC4626_$6704_$_t_uint256_$returns$__$","typeString":"function (contract IERC4626,uint256) view"}},"id":15636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"56187:64:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15637,"nodeType":"ExpressionStatement","src":"56187:64:53"}]},"documentation":{"id":15484,"nodeType":"StructuredDocumentation","src":"54364:26:53","text":"@inheritdoc IVaultMain"},"functionSelector":"43583be5","id":15639,"implemented":true,"kind":"function","modifiers":[{"id":15490,"kind":"modifierInvocation","modifierName":{"id":15489,"name":"onlyWhenUnlocked","nameLocations":["54509:16:53"],"nodeType":"IdentifierPath","referencedDeclaration":16469,"src":"54509:16:53"},"nodeType":"ModifierInvocation","src":"54509:16:53"},{"id":15492,"kind":"modifierInvocation","modifierName":{"id":15491,"name":"whenVaultBuffersAreNotPaused","nameLocations":["54534:28:53"],"nodeType":"IdentifierPath","referencedDeclaration":16717,"src":"54534:28:53"},"nodeType":"ModifierInvocation","src":"54534:28:53"},{"arguments":[{"expression":{"id":15494,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"54593:6:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":15495,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"54600:12:53","memberName":"wrappedToken","nodeType":"MemberAccess","referencedDeclaration":2459,"src":"54593:19:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}}],"id":15496,"kind":"modifierInvocation","modifierName":{"id":15493,"name":"withInitializedBuffer","nameLocations":["54571:21:53"],"nodeType":"IdentifierPath","referencedDeclaration":16835,"src":"54571:21:53"},"nodeType":"ModifierInvocation","src":"54571:42:53"},{"id":15498,"kind":"modifierInvocation","modifierName":{"id":15497,"name":"nonReentrant","nameLocations":["54622:12:53"],"nodeType":"IdentifierPath","referencedDeclaration":6146,"src":"54622:12:53"},"nodeType":"ModifierInvocation","src":"54622:12:53"}],"name":"erc4626BufferWrapOrUnwrap","nameLocation":"54404:25:53","nodeType":"FunctionDefinition","parameters":{"id":15488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15487,"mutability":"mutable","name":"params","nameLocation":"54471:6:53","nodeType":"VariableDeclaration","scope":15639,"src":"54439:38:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams"},"typeName":{"id":15486,"nodeType":"UserDefinedTypeName","pathNode":{"id":15485,"name":"BufferWrapOrUnwrapParams","nameLocations":["54439:24:53"],"nodeType":"IdentifierPath","referencedDeclaration":2464,"src":"54439:24:53"},"referencedDeclaration":2464,"src":"54439:24:53","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2464_storage_ptr","typeString":"struct BufferWrapOrUnwrapParams"}},"visibility":"internal"}],"src":"54429:54:53"},"returnParameters":{"id":15505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15500,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"54660:19:53","nodeType":"VariableDeclaration","scope":15639,"src":"54652:27:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15499,"name":"uint256","nodeType":"ElementaryTypeName","src":"54652:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15502,"mutability":"mutable","name":"amountInRaw","nameLocation":"54689:11:53","nodeType":"VariableDeclaration","scope":15639,"src":"54681:19:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15501,"name":"uint256","nodeType":"ElementaryTypeName","src":"54681:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15504,"mutability":"mutable","name":"amountOutRaw","nameLocation":"54710:12:53","nodeType":"VariableDeclaration","scope":15639,"src":"54702:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15503,"name":"uint256","nodeType":"ElementaryTypeName","src":"54702:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"54651:72:53"},"scope":16391,"src":"54395:1863:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":15656,"nodeType":"Block","src":"56614:115:53","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15647,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15644,"src":"56628:6:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":15648,"name":"_MINIMUM_WRAP_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17323,"src":"56637:20:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"56628:29:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15655,"nodeType":"IfStatement","src":"56624:99:53","trueBody":{"id":15654,"nodeType":"Block","src":"56659:64:53","statements":[{"errorCall":{"arguments":[{"id":15651,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15642,"src":"56699:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}],"id":15650,"name":"WrapAmountTooSmall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1307,"src":"56680:18:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC4626_$6704_$returns$_t_error_$","typeString":"function (contract IERC4626) pure returns (error)"}},"id":15652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"56680:32:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15653,"nodeType":"RevertStatement","src":"56673:39:53"}]}}]},"id":15657,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidWrapAmount","nameLocation":"56539:22:53","nodeType":"FunctionDefinition","parameters":{"id":15645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15642,"mutability":"mutable","name":"wrappedToken","nameLocation":"56571:12:53","nodeType":"VariableDeclaration","scope":15657,"src":"56562:21:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":15641,"nodeType":"UserDefinedTypeName","pathNode":{"id":15640,"name":"IERC4626","nameLocations":["56562:8:53"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"56562:8:53"},"referencedDeclaration":6704,"src":"56562:8:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":15644,"mutability":"mutable","name":"amount","nameLocation":"56593:6:53","nodeType":"VariableDeclaration","scope":15657,"src":"56585:14:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15643,"name":"uint256","nodeType":"ElementaryTypeName","src":"56585:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"56561:39:53"},"returnParameters":{"id":15646,"nodeType":"ParameterList","parameters":[],"src":"56614:0:53"},"scope":16391,"src":"56530:199:53","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":15921,"nodeType":"Block","src":"57373:7759:53","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},"id":15681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15678,"name":"kind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15661,"src":"57387:4:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":15679,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2337,"src":"57395:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$2337_$","typeString":"type(enum SwapKind)"}},"id":15680,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"57404:8:53","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":2335,"src":"57395:17:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"src":"57387:25:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15713,"nodeType":"Block","src":"58008:570:53","statements":[{"expression":{"id":15711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":15698,"name":"amountInUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15672,"src":"58467:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15699,"name":"amountOutWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15674,"src":"58487:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15700,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"58466:38:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15703,"name":"amountGiven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15669,"src":"58533:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":15704,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"58547:1:53","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"58533:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15701,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"58508:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"id":15702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"58521:11:53","memberName":"previewMint","nodeType":"MemberAccess","referencedDeclaration":6637,"src":"58508:24:53","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":15706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"58508:41:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":15707,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"58552:1:53","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"58508:45:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15709,"name":"amountGiven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15669,"src":"58555:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15710,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"58507:60:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"58466:101:53","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15712,"nodeType":"ExpressionStatement","src":"58466:101:53"}]},"id":15714,"nodeType":"IfStatement","src":"57383:1195:53","trueBody":{"id":15697,"nodeType":"Block","src":"57414:588:53","statements":[{"expression":{"id":15695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":15682,"name":"amountInUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15672,"src":"57888:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15683,"name":"amountOutWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15674,"src":"57908:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15684,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"57887:38:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"id":15685,"name":"amountGiven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15669,"src":"57929:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15688,"name":"amountGiven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15669,"src":"57970:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":15689,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"57984:1:53","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"57970:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15686,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"57942:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"id":15687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"57955:14:53","memberName":"previewDeposit","nodeType":"MemberAccess","referencedDeclaration":6611,"src":"57942:27:53","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":15691,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57942:44:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":15692,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"57989:1:53","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"57942:48:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15694,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"57928:63:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"57887:104:53","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15696,"nodeType":"ExpressionStatement","src":"57887:104:53"}]}},{"expression":{"id":15719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15715,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15676,"src":"58588:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":15716,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17419,"src":"58605:20:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$6704_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":15718,"indexExpression":{"id":15717,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"58626:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"58605:34:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"58588:51:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":15720,"nodeType":"ExpressionStatement","src":"58588:51:53"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":15721,"name":"_isQueryContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17226,"src":"58917:15:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":15722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"58917:17:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15729,"nodeType":"IfStatement","src":"58913:109:53","trueBody":{"id":15728,"nodeType":"Block","src":"58936:86:53","statements":[{"expression":{"components":[{"id":15723,"name":"amountInUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15672,"src":"58958:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15724,"name":"amountOutWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15674,"src":"58978:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15725,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15676,"src":"58996:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":15726,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"58957:54:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"tuple(uint256,uint256,bytes32)"}},"functionReturnParameters":15677,"id":15727,"nodeType":"Return","src":"58950:61:53"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15730,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15676,"src":"59036:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":15731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"59051:17:53","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":2927,"src":"59036:32:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":15732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"59036:34:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":15733,"name":"amountOutWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15674,"src":"59074:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"59036:54:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15909,"nodeType":"Block","src":"59706:5308:53","statements":[{"assignments":[15767],"declarations":[{"constant":false,"id":15767,"mutability":"mutable","name":"vaultUnderlyingDeltaHint","nameLocation":"60084:24:53","nodeType":"VariableDeclaration","scope":15909,"src":"60076:32:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15766,"name":"uint256","nodeType":"ElementaryTypeName","src":"60076:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15768,"nodeType":"VariableDeclarationStatement","src":"60076:32:53"},{"assignments":[15770],"declarations":[{"constant":false,"id":15770,"mutability":"mutable","name":"vaultWrappedDeltaHint","nameLocation":"60204:21:53","nodeType":"VariableDeclaration","scope":15909,"src":"60196:29:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15769,"name":"uint256","nodeType":"ElementaryTypeName","src":"60196:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15771,"nodeType":"VariableDeclarationStatement","src":"60196:29:53"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},"id":15775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15772,"name":"kind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15661,"src":"60244:4:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":15773,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2337,"src":"60252:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$2337_$","typeString":"type(enum SwapKind)"}},"id":15774,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"60261:8:53","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":2335,"src":"60252:17:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"src":"60244:25:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15862,"nodeType":"Block","src":"61607:1854:53","statements":[{"assignments":[15817],"declarations":[{"constant":false,"id":15817,"mutability":"mutable","name":"bufferWrappedImbalance","nameLocation":"62477:22:53","nodeType":"VariableDeclaration","scope":15862,"src":"62470:29:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15816,"name":"int256","nodeType":"ElementaryTypeName","src":"62470:6:53","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":15822,"initialValue":{"arguments":[{"id":15820,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"62543:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}],"expression":{"id":15818,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15676,"src":"62502:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":15819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"62517:25:53","memberName":"getBufferWrappedImbalance","nodeType":"MemberAccess","referencedDeclaration":2584,"src":"62502:40:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_contract$_IERC4626_$6704_$returns$_t_int256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,contract IERC4626) view returns (int256)"}},"id":15821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"62502:54:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"62470:86:53"},{"expression":{"id":15832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15823,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15770,"src":"62574:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15824,"name":"amountOutWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15674,"src":"62599:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"62616:8:53","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":11728,"src":"62599:25:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":15826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"62599:27:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":15827,"name":"bufferWrappedImbalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15817,"src":"62629:22:53","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"62599:52:53","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":15829,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"62598:54:53","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":15830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"62653:9:53","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":10892,"src":"62598:64:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":15831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"62598:66:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"62574:90:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15833,"nodeType":"ExpressionStatement","src":"62574:90:53"},{"expression":{"id":15839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15834,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15767,"src":"62890:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15837,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15770,"src":"62942:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15835,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"62917:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"id":15836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"62930:11:53","memberName":"previewMint","nodeType":"MemberAccess","referencedDeclaration":6637,"src":"62917:24:53","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":15838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"62917:47:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"62890:74:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15840,"nodeType":"ExpressionStatement","src":"62890:74:53"},{"expression":{"arguments":[{"arguments":[{"id":15846,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"63305:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}],"id":15845,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"63297:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15844,"name":"address","nodeType":"ElementaryTypeName","src":"63297:7:53","typeDescriptions":{}}},"id":15847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"63297:21:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15848,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15767,"src":"63320:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15841,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15664,"src":"63268:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":15843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"63284:12:53","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":7240,"src":"63268:28:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$6980_$","typeString":"function (contract IERC20,address,uint256)"}},"id":15849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"63268:77:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15850,"nodeType":"ExpressionStatement","src":"63268:77:53"},{"expression":{"id":15860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15851,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15767,"src":"63364:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15854,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15770,"src":"63409:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":15857,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"63440:4:53","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}],"id":15856,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"63432:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15855,"name":"address","nodeType":"ElementaryTypeName","src":"63432:7:53","typeDescriptions":{}}},"id":15858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"63432:13:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":15852,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"63391:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"id":15853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"63404:4:53","memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":6647,"src":"63391:17:53","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) external returns (uint256)"}},"id":15859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"63391:55:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"63364:82:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15861,"nodeType":"ExpressionStatement","src":"63364:82:53"}]},"id":15863,"nodeType":"IfStatement","src":"60240:3221:53","trueBody":{"id":15815,"nodeType":"Block","src":"60271:1330:53","statements":[{"assignments":[15777],"declarations":[{"constant":false,"id":15777,"mutability":"mutable","name":"bufferUnderlyingImbalance","nameLocation":"61187:25:53","nodeType":"VariableDeclaration","scope":15815,"src":"61180:32:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15776,"name":"int256","nodeType":"ElementaryTypeName","src":"61180:6:53","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":15782,"initialValue":{"arguments":[{"id":15780,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"61259:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}],"expression":{"id":15778,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15676,"src":"61215:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":15779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"61230:28:53","memberName":"getBufferUnderlyingImbalance","nodeType":"MemberAccess","referencedDeclaration":2535,"src":"61215:43:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_contract$_IERC4626_$6704_$returns$_t_int256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,contract IERC4626) view returns (int256)"}},"id":15781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"61215:57:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"61180:92:53"},{"expression":{"id":15792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15783,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15767,"src":"61290:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15784,"name":"amountInUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15672,"src":"61318:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"61337:8:53","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":11728,"src":"61318:27:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":15786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"61318:29:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":15787,"name":"bufferUnderlyingImbalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15777,"src":"61350:25:53","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"61318:57:53","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":15789,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"61317:59:53","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":15790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"61377:9:53","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":10892,"src":"61317:69:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":15791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"61317:71:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"61290:98:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15793,"nodeType":"ExpressionStatement","src":"61290:98:53"},{"expression":{"arguments":[{"arguments":[{"id":15799,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"61443:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}],"id":15798,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"61435:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15797,"name":"address","nodeType":"ElementaryTypeName","src":"61435:7:53","typeDescriptions":{}}},"id":15800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"61435:21:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15801,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15767,"src":"61458:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15794,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15664,"src":"61406:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":15796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"61422:12:53","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":7240,"src":"61406:28:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$6980_$","typeString":"function (contract IERC20,address,uint256)"}},"id":15802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"61406:77:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15803,"nodeType":"ExpressionStatement","src":"61406:77:53"},{"expression":{"id":15813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15804,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15770,"src":"61501:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15807,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15767,"src":"61546:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":15810,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"61580:4:53","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}],"id":15809,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"61572:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15808,"name":"address","nodeType":"ElementaryTypeName","src":"61572:7:53","typeDescriptions":{}}},"id":15811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"61572:13:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":15805,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"61525:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"id":15806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"61538:7:53","memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":6621,"src":"61525:20:53","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) external returns (uint256)"}},"id":15812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"61525:61:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"61501:85:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15814,"nodeType":"ExpressionStatement","src":"61501:85:53"}]}},{"expression":{"arguments":[{"arguments":[{"id":15869,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"63754:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}],"id":15868,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"63746:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15867,"name":"address","nodeType":"ElementaryTypeName","src":"63746:7:53","typeDescriptions":{}}},"id":15870,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"63746:21:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":15871,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"63769:1:53","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":15864,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15664,"src":"63717:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":15866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"63733:12:53","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":7240,"src":"63717:28:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$6980_$","typeString":"function (contract IERC20,address,uint256)"}},"id":15872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"63717:54:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15873,"nodeType":"ExpressionStatement","src":"63717:54:53"},{"expression":{"arguments":[{"id":15875,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15664,"src":"63998:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"arguments":[{"id":15877,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"64022:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}],"id":15876,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"64015:6:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$6980_$","typeString":"type(contract IERC20)"}},"id":15878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"64015:20:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":15879,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15767,"src":"64037:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15880,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15770,"src":"64063:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15874,"name":"_settleWrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16196,"src":"63986:11:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_contract$_IERC20_$6980_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,contract IERC20,uint256,uint256)"}},"id":15881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"63986:99:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15882,"nodeType":"ExpressionStatement","src":"63986:99:53"},{"expression":{"id":15901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15883,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15676,"src":"64682:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15886,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15676,"src":"64751:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":15887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"64766:13:53","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":2910,"src":"64751:28:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":15888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"64751:30:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":15889,"name":"amountInUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15672,"src":"64784:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"64751:51:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":15891,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15767,"src":"64805:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"64751:78:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15893,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15676,"src":"64847:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":15894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"64862:17:53","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":2927,"src":"64847:32:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":15895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"64847:34:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":15896,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15770,"src":"64884:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"64847:58:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":15898,"name":"amountOutWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15674,"src":"64908:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"64847:77:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15884,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3032,"src":"64699:18:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$3032_$","typeString":"type(library PackedTokenBalance)"}},"id":15885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"64718:15:53","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":2991,"src":"64699:34:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":15900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"64699:239:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"64682:256:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":15902,"nodeType":"ExpressionStatement","src":"64682:256:53"},{"expression":{"id":15907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15903,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17419,"src":"64952:20:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$6704_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":15905,"indexExpression":{"id":15904,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"64973:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"64952:34:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15906,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15676,"src":"64989:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"64952:51:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":15908,"nodeType":"ExpressionStatement","src":"64952:51:53"}]},"id":15910,"nodeType":"IfStatement","src":"59032:5982:53","trueBody":{"id":15765,"nodeType":"Block","src":"59092:608:53","statements":[{"assignments":[15736],"declarations":[{"constant":false,"id":15736,"mutability":"mutable","name":"newDerivedBalance","nameLocation":"59217:17:53","nodeType":"VariableDeclaration","scope":15765,"src":"59209:25:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15735,"name":"uint256","nodeType":"ElementaryTypeName","src":"59209:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15737,"nodeType":"VariableDeclarationStatement","src":"59209:25:53"},{"id":15746,"nodeType":"UncheckedBlock","src":"59248:193:53","statements":[{"expression":{"id":15744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15738,"name":"newDerivedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15736,"src":"59353:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15739,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15676,"src":"59373:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":15740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"59388:17:53","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":2927,"src":"59373:32:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":15741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"59373:34:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":15742,"name":"amountOutWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15674,"src":"59410:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"59373:53:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"59353:73:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15745,"nodeType":"ExpressionStatement","src":"59353:73:53"}]},{"expression":{"id":15757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15747,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15676,"src":"59455:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15750,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15676,"src":"59524:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":15751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"59539:13:53","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":2910,"src":"59524:28:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":15752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"59524:30:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":15753,"name":"amountInUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15672,"src":"59557:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"59524:51:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15755,"name":"newDerivedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15736,"src":"59593:17:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15748,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3032,"src":"59472:18:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$3032_$","typeString":"type(library PackedTokenBalance)"}},"id":15749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"59491:15:53","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":2991,"src":"59472:34:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":15756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"59472:152:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"59455:169:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":15758,"nodeType":"ExpressionStatement","src":"59455:169:53"},{"expression":{"id":15763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15759,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17419,"src":"59638:20:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$6704_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":15761,"indexExpression":{"id":15760,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"59659:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"59638:34:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15762,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15676,"src":"59675:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"59638:51:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":15764,"nodeType":"ExpressionStatement","src":"59638:51:53"}]}},{"expression":{"arguments":[{"id":15912,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15664,"src":"65034:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":15913,"name":"amountInUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15672,"src":"65051:18:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15911,"name":"_takeDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16529,"src":"65024:9:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":15914,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"65024:46:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15915,"nodeType":"ExpressionStatement","src":"65024:46:53"},{"expression":{"arguments":[{"id":15917,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"65094:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},{"id":15918,"name":"amountOutWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15674,"src":"65108:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15916,"name":"_supplyCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16512,"src":"65080:13:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":15919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"65080:45:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15920,"nodeType":"ExpressionStatement","src":"65080:45:53"}]},"documentation":{"id":15658,"nodeType":"StructuredDocumentation","src":"56735:391:53","text":" @dev If the buffer has enough liquidity, it uses the internal ERC4626 buffer to perform the wrap\n operation without any external calls. If not, it wraps the assets needed to fulfill the trade + the imbalance\n of assets in the buffer, so that the buffer is rebalanced at the end of the operation.\n Updates `_reservesOf` and token deltas in storage."},"id":15922,"implemented":true,"kind":"function","modifiers":[],"name":"_wrapWithBuffer","nameLocation":"57140:15:53","nodeType":"FunctionDefinition","parameters":{"id":15670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15661,"mutability":"mutable","name":"kind","nameLocation":"57174:4:53","nodeType":"VariableDeclaration","scope":15922,"src":"57165:13:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},"typeName":{"id":15660,"nodeType":"UserDefinedTypeName","pathNode":{"id":15659,"name":"SwapKind","nameLocations":["57165:8:53"],"nodeType":"IdentifierPath","referencedDeclaration":2337,"src":"57165:8:53"},"referencedDeclaration":2337,"src":"57165:8:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":15664,"mutability":"mutable","name":"underlyingToken","nameLocation":"57195:15:53","nodeType":"VariableDeclaration","scope":15922,"src":"57188:22:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":15663,"nodeType":"UserDefinedTypeName","pathNode":{"id":15662,"name":"IERC20","nameLocations":["57188:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"57188:6:53"},"referencedDeclaration":6980,"src":"57188:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":15667,"mutability":"mutable","name":"wrappedToken","nameLocation":"57229:12:53","nodeType":"VariableDeclaration","scope":15922,"src":"57220:21:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":15666,"nodeType":"UserDefinedTypeName","pathNode":{"id":15665,"name":"IERC4626","nameLocations":["57220:8:53"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"57220:8:53"},"referencedDeclaration":6704,"src":"57220:8:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":15669,"mutability":"mutable","name":"amountGiven","nameLocation":"57259:11:53","nodeType":"VariableDeclaration","scope":15922,"src":"57251:19:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15668,"name":"uint256","nodeType":"ElementaryTypeName","src":"57251:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"57155:121:53"},"returnParameters":{"id":15677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15672,"mutability":"mutable","name":"amountInUnderlying","nameLocation":"57303:18:53","nodeType":"VariableDeclaration","scope":15922,"src":"57295:26:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15671,"name":"uint256","nodeType":"ElementaryTypeName","src":"57295:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15674,"mutability":"mutable","name":"amountOutWrapped","nameLocation":"57331:16:53","nodeType":"VariableDeclaration","scope":15922,"src":"57323:24:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15673,"name":"uint256","nodeType":"ElementaryTypeName","src":"57323:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15676,"mutability":"mutable","name":"bufferBalances","nameLocation":"57357:14:53","nodeType":"VariableDeclaration","scope":15922,"src":"57349:22:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":15675,"name":"bytes32","nodeType":"ElementaryTypeName","src":"57349:7:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"57294:78:53"},"scope":16391,"src":"57131:8001:53","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16157,"nodeType":"Block","src":"65782:6743:53","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},"id":15946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15943,"name":"kind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15926,"src":"65796:4:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":15944,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2337,"src":"65804:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$2337_$","typeString":"type(enum SwapKind)"}},"id":15945,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"65813:8:53","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":2335,"src":"65804:17:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"src":"65796:25:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15978,"nodeType":"Block","src":"66412:585:53","statements":[{"expression":{"id":15976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":15963,"name":"amountInWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15937,"src":"66882:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15964,"name":"amountOutUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15939,"src":"66899:19:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15965,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"66881:38:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15968,"name":"amountGiven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15934,"src":"66952:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":15969,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"66966:1:53","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"66952:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15966,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15932,"src":"66923:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"id":15967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"66936:15:53","memberName":"previewWithdraw","nodeType":"MemberAccess","referencedDeclaration":6663,"src":"66923:28:53","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":15971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"66923:45:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":15972,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"66971:1:53","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"66923:49:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15974,"name":"amountGiven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15934,"src":"66974:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15975,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"66922:64:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"66881:105:53","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15977,"nodeType":"ExpressionStatement","src":"66881:105:53"}]},"id":15979,"nodeType":"IfStatement","src":"65792:1205:53","trueBody":{"id":15962,"nodeType":"Block","src":"65823:583:53","statements":[{"expression":{"id":15960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":15947,"name":"amountInWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15937,"src":"66293:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15948,"name":"amountOutUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15939,"src":"66310:19:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15949,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"66292:38:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"id":15950,"name":"amountGiven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15934,"src":"66334:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15953,"name":"amountGiven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15934,"src":"66374:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":15954,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"66388:1:53","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"66374:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15951,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15932,"src":"66347:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"id":15952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"66360:13:53","memberName":"previewRedeem","nodeType":"MemberAccess","referencedDeclaration":6691,"src":"66347:26:53","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":15956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"66347:43:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":15957,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"66393:1:53","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"66347:47:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15959,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"66333:62:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"66292:103:53","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15961,"nodeType":"ExpressionStatement","src":"66292:103:53"}]}},{"expression":{"id":15984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15980,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15941,"src":"67007:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":15981,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17419,"src":"67024:20:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$6704_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":15983,"indexExpression":{"id":15982,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15932,"src":"67045:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"67024:34:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"67007:51:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":15985,"nodeType":"ExpressionStatement","src":"67007:51:53"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":15986,"name":"_isQueryContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17226,"src":"67334:15:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":15987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"67334:17:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15994,"nodeType":"IfStatement","src":"67330:109:53","trueBody":{"id":15993,"nodeType":"Block","src":"67353:86:53","statements":[{"expression":{"components":[{"id":15988,"name":"amountInWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15937,"src":"67375:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15989,"name":"amountOutUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15939,"src":"67392:19:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15990,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15941,"src":"67413:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":15991,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"67374:54:53","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"tuple(uint256,uint256,bytes32)"}},"functionReturnParameters":15942,"id":15992,"nodeType":"Return","src":"67367:61:53"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15995,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15941,"src":"67453:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":15996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"67468:13:53","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":2910,"src":"67453:28:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":15997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"67453:30:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":15998,"name":"amountOutUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15939,"src":"67487:19:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"67453:53:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":16145,"nodeType":"Block","src":"68109:4298:53","statements":[{"assignments":[16032],"declarations":[{"constant":false,"id":16032,"mutability":"mutable","name":"vaultUnderlyingDeltaHint","nameLocation":"68488:24:53","nodeType":"VariableDeclaration","scope":16145,"src":"68480:32:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16031,"name":"uint256","nodeType":"ElementaryTypeName","src":"68480:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16033,"nodeType":"VariableDeclarationStatement","src":"68480:32:53"},{"assignments":[16035],"declarations":[{"constant":false,"id":16035,"mutability":"mutable","name":"vaultWrappedDeltaHint","nameLocation":"68608:21:53","nodeType":"VariableDeclaration","scope":16145,"src":"68600:29:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16034,"name":"uint256","nodeType":"ElementaryTypeName","src":"68600:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16036,"nodeType":"VariableDeclarationStatement","src":"68600:29:53"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},"id":16040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16037,"name":"kind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15926,"src":"68648:4:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":16038,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2337,"src":"68656:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$2337_$","typeString":"type(enum SwapKind)"}},"id":16039,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"68665:8:53","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":2335,"src":"68656:17:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"src":"68648:25:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":16108,"nodeType":"Block","src":"69885:1243:53","statements":[{"assignments":[16076],"declarations":[{"constant":false,"id":16076,"mutability":"mutable","name":"bufferUnderlyingImbalance","nameLocation":"70792:25:53","nodeType":"VariableDeclaration","scope":16108,"src":"70785:32:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":16075,"name":"int256","nodeType":"ElementaryTypeName","src":"70785:6:53","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":16081,"initialValue":{"arguments":[{"id":16079,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15932,"src":"70864:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}],"expression":{"id":16077,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15941,"src":"70820:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"70835:28:53","memberName":"getBufferUnderlyingImbalance","nodeType":"MemberAccess","referencedDeclaration":2535,"src":"70820:43:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_contract$_IERC4626_$6704_$returns$_t_int256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,contract IERC4626) view returns (int256)"}},"id":16080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"70820:57:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"70785:92:53"},{"expression":{"id":16091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16082,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16032,"src":"70895:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":16087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16083,"name":"amountOutUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15939,"src":"70923:19:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"70943:8:53","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":11728,"src":"70923:28:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":16085,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"70923:30:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":16086,"name":"bufferUnderlyingImbalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16076,"src":"70956:25:53","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"70923:58:53","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":16088,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"70922:60:53","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":16089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"70983:9:53","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":10892,"src":"70922:70:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":16090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"70922:72:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"70895:99:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16092,"nodeType":"ExpressionStatement","src":"70895:99:53"},{"expression":{"id":16106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16093,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16035,"src":"71012:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16096,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16032,"src":"71058:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":16099,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"71092:4:53","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}],"id":16098,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"71084:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16097,"name":"address","nodeType":"ElementaryTypeName","src":"71084:7:53","typeDescriptions":{}}},"id":16100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71084:13:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":16103,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"71107:4:53","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}],"id":16102,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"71099:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16101,"name":"address","nodeType":"ElementaryTypeName","src":"71099:7:53","typeDescriptions":{}}},"id":16104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71099:13:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16094,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15932,"src":"71036:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"id":16095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"71049:8:53","memberName":"withdraw","nodeType":"MemberAccess","referencedDeclaration":6675,"src":"71036:21:53","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) external returns (uint256)"}},"id":16105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71036:77:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"71012:101:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16107,"nodeType":"ExpressionStatement","src":"71012:101:53"}]},"id":16109,"nodeType":"IfStatement","src":"68644:2484:53","trueBody":{"id":16074,"nodeType":"Block","src":"68675:1204:53","statements":[{"assignments":[16042],"declarations":[{"constant":false,"id":16042,"mutability":"mutable","name":"bufferWrappedImbalance","nameLocation":"69561:22:53","nodeType":"VariableDeclaration","scope":16074,"src":"69554:29:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":16041,"name":"int256","nodeType":"ElementaryTypeName","src":"69554:6:53","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":16047,"initialValue":{"arguments":[{"id":16045,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15932,"src":"69627:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}],"expression":{"id":16043,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15941,"src":"69586:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"69601:25:53","memberName":"getBufferWrappedImbalance","nodeType":"MemberAccess","referencedDeclaration":2584,"src":"69586:40:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_contract$_IERC4626_$6704_$returns$_t_int256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,contract IERC4626) view returns (int256)"}},"id":16046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69586:54:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"69554:86:53"},{"expression":{"id":16057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16048,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16035,"src":"69658:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":16053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16049,"name":"amountInWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15937,"src":"69683:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"69699:8:53","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":11728,"src":"69683:24:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":16051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69683:26:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16052,"name":"bufferWrappedImbalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16042,"src":"69712:22:53","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"69683:51:53","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":16054,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"69682:53:53","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":16055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"69736:9:53","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":10892,"src":"69682:63:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":16056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69682:65:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"69658:89:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16058,"nodeType":"ExpressionStatement","src":"69658:89:53"},{"expression":{"id":16072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16059,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16032,"src":"69765:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16062,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16035,"src":"69812:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":16065,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"69843:4:53","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}],"id":16064,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"69835:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16063,"name":"address","nodeType":"ElementaryTypeName","src":"69835:7:53","typeDescriptions":{}}},"id":16066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69835:13:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":16069,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"69858:4:53","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}],"id":16068,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"69850:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16067,"name":"address","nodeType":"ElementaryTypeName","src":"69850:7:53","typeDescriptions":{}}},"id":16070,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69850:13:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16060,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15932,"src":"69792:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"id":16061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"69805:6:53","memberName":"redeem","nodeType":"MemberAccess","referencedDeclaration":6703,"src":"69792:19:53","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) external returns (uint256)"}},"id":16071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69792:72:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"69765:99:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16073,"nodeType":"ExpressionStatement","src":"69765:99:53"}]}},{"expression":{"arguments":[{"id":16111,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15929,"src":"71356:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"arguments":[{"id":16113,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15932,"src":"71380:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}],"id":16112,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"71373:6:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$6980_$","typeString":"type(contract IERC20)"}},"id":16114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71373:20:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":16115,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16032,"src":"71395:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16116,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16035,"src":"71421:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16110,"name":"_settleUnwrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16234,"src":"71342:13:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_contract$_IERC20_$6980_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,contract IERC20,uint256,uint256)"}},"id":16117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71342:101:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16118,"nodeType":"ExpressionStatement","src":"71342:101:53"},{"expression":{"id":16137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16119,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15941,"src":"72075:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16122,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15941,"src":"72144:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"72159:13:53","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":2910,"src":"72144:28:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":16124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72144:30:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16125,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16032,"src":"72177:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"72144:57:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":16127,"name":"amountOutUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15939,"src":"72204:19:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"72144:79:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16129,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15941,"src":"72241:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"72256:17:53","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":2927,"src":"72241:32:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":16131,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72241:34:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16132,"name":"amountInWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15937,"src":"72278:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"72241:52:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":16134,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16035,"src":"72296:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"72241:76:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16120,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3032,"src":"72092:18:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$3032_$","typeString":"type(library PackedTokenBalance)"}},"id":16121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"72111:15:53","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":2991,"src":"72092:34:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":16136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72092:239:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"72075:256:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16138,"nodeType":"ExpressionStatement","src":"72075:256:53"},{"expression":{"id":16143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":16139,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17419,"src":"72345:20:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$6704_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":16141,"indexExpression":{"id":16140,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15932,"src":"72366:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"72345:34:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16142,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15941,"src":"72382:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"72345:51:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16144,"nodeType":"ExpressionStatement","src":"72345:51:53"}]},"id":16146,"nodeType":"IfStatement","src":"67449:4958:53","trueBody":{"id":16030,"nodeType":"Block","src":"67508:595:53","statements":[{"assignments":[16001],"declarations":[{"constant":false,"id":16001,"mutability":"mutable","name":"newRawBalance","nameLocation":"67633:13:53","nodeType":"VariableDeclaration","scope":16030,"src":"67625:21:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16000,"name":"uint256","nodeType":"ElementaryTypeName","src":"67625:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16002,"nodeType":"VariableDeclarationStatement","src":"67625:21:53"},{"id":16011,"nodeType":"UncheckedBlock","src":"67660:188:53","statements":[{"expression":{"id":16009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16003,"name":"newRawBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16001,"src":"67765:13:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16004,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15941,"src":"67781:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"67796:13:53","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":2910,"src":"67781:28:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":16006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"67781:30:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":16007,"name":"amountOutUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15939,"src":"67814:19:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"67781:52:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"67765:68:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16010,"nodeType":"ExpressionStatement","src":"67765:68:53"}]},{"expression":{"id":16022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16012,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15941,"src":"67861:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16015,"name":"newRawBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16001,"src":"67930:13:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16016,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15941,"src":"67961:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"67976:17:53","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":2927,"src":"67961:32:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":16018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"67961:34:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16019,"name":"amountInWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15937,"src":"67998:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"67961:52:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16013,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3032,"src":"67878:18:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$3032_$","typeString":"type(library PackedTokenBalance)"}},"id":16014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"67897:15:53","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":2991,"src":"67878:34:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":16021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"67878:149:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"67861:166:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16023,"nodeType":"ExpressionStatement","src":"67861:166:53"},{"expression":{"id":16028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":16024,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17419,"src":"68041:20:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$6704_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":16026,"indexExpression":{"id":16025,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15932,"src":"68062:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"68041:34:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16027,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15941,"src":"68078:14:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"68041:51:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16029,"nodeType":"ExpressionStatement","src":"68041:51:53"}]}},{"expression":{"arguments":[{"id":16148,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15932,"src":"72427:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},{"id":16149,"name":"amountInWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15937,"src":"72441:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16147,"name":"_takeDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16529,"src":"72417:9:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":16150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72417:40:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16151,"nodeType":"ExpressionStatement","src":"72417:40:53"},{"expression":{"arguments":[{"id":16153,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15929,"src":"72481:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":16154,"name":"amountOutUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15939,"src":"72498:19:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16152,"name":"_supplyCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16512,"src":"72467:13:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":16155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72467:51:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16156,"nodeType":"ExpressionStatement","src":"72467:51:53"}]},"documentation":{"id":15923,"nodeType":"StructuredDocumentation","src":"65138:395:53","text":" @dev If the buffer has enough liquidity, it uses the internal ERC4626 buffer to perform the unwrap\n operation without any external calls. If not, it unwraps the assets needed to fulfill the trade + the imbalance\n of assets in the buffer, so that the buffer is rebalanced at the end of the operation.\n Updates `_reservesOf` and token deltas in storage."},"id":16158,"implemented":true,"kind":"function","modifiers":[],"name":"_unwrapWithBuffer","nameLocation":"65547:17:53","nodeType":"FunctionDefinition","parameters":{"id":15935,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15926,"mutability":"mutable","name":"kind","nameLocation":"65583:4:53","nodeType":"VariableDeclaration","scope":16158,"src":"65574:13:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},"typeName":{"id":15925,"nodeType":"UserDefinedTypeName","pathNode":{"id":15924,"name":"SwapKind","nameLocations":["65574:8:53"],"nodeType":"IdentifierPath","referencedDeclaration":2337,"src":"65574:8:53"},"referencedDeclaration":2337,"src":"65574:8:53","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":15929,"mutability":"mutable","name":"underlyingToken","nameLocation":"65604:15:53","nodeType":"VariableDeclaration","scope":16158,"src":"65597:22:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":15928,"nodeType":"UserDefinedTypeName","pathNode":{"id":15927,"name":"IERC20","nameLocations":["65597:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"65597:6:53"},"referencedDeclaration":6980,"src":"65597:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":15932,"mutability":"mutable","name":"wrappedToken","nameLocation":"65638:12:53","nodeType":"VariableDeclaration","scope":16158,"src":"65629:21:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":15931,"nodeType":"UserDefinedTypeName","pathNode":{"id":15930,"name":"IERC4626","nameLocations":["65629:8:53"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"65629:8:53"},"referencedDeclaration":6704,"src":"65629:8:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":15934,"mutability":"mutable","name":"amountGiven","nameLocation":"65668:11:53","nodeType":"VariableDeclaration","scope":16158,"src":"65660:19:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15933,"name":"uint256","nodeType":"ElementaryTypeName","src":"65660:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"65564:121:53"},"returnParameters":{"id":15942,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15937,"mutability":"mutable","name":"amountInWrapped","nameLocation":"65712:15:53","nodeType":"VariableDeclaration","scope":16158,"src":"65704:23:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15936,"name":"uint256","nodeType":"ElementaryTypeName","src":"65704:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15939,"mutability":"mutable","name":"amountOutUnderlying","nameLocation":"65737:19:53","nodeType":"VariableDeclaration","scope":16158,"src":"65729:27:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15938,"name":"uint256","nodeType":"ElementaryTypeName","src":"65729:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15941,"mutability":"mutable","name":"bufferBalances","nameLocation":"65766:14:53","nodeType":"VariableDeclaration","scope":16158,"src":"65758:22:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":15940,"name":"bytes32","nodeType":"ElementaryTypeName","src":"65758:7:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"65703:78:53"},"scope":16391,"src":"65538:6987:53","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16195,"nodeType":"Block","src":"73450:702:53","statements":[{"assignments":[16173],"declarations":[{"constant":false,"id":16173,"mutability":"mutable","name":"expectedUnderlyingReservesAfter","nameLocation":"73665:31:53","nodeType":"VariableDeclaration","scope":16195,"src":"73657:39:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16172,"name":"uint256","nodeType":"ElementaryTypeName","src":"73657:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16179,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":16174,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17405,"src":"73699:11:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":16176,"indexExpression":{"id":16175,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16162,"src":"73711:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"73699:28:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":16177,"name":"underlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16167,"src":"73730:19:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"73699:50:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"73657:92:53"},{"assignments":[16181],"declarations":[{"constant":false,"id":16181,"mutability":"mutable","name":"expectedWrappedReservesAfter","nameLocation":"73948:28:53","nodeType":"VariableDeclaration","scope":16195,"src":"73940:36:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16180,"name":"uint256","nodeType":"ElementaryTypeName","src":"73940:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16187,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":16182,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17405,"src":"73979:11:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":16184,"indexExpression":{"id":16183,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16165,"src":"73991:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"73979:25:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16185,"name":"wrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16169,"src":"74007:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"73979:44:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"73940:83:53"},{"expression":{"arguments":[{"id":16189,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16162,"src":"74052:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":16190,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16165,"src":"74069:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":16191,"name":"expectedUnderlyingReservesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16173,"src":"74083:31:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16192,"name":"expectedWrappedReservesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16181,"src":"74116:28:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16188,"name":"_settleWrapUnwrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16313,"src":"74034:17:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_contract$_IERC20_$6980_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,contract IERC20,uint256,uint256)"}},"id":16193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"74034:111:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16194,"nodeType":"ExpressionStatement","src":"74034:111:53"}]},"documentation":{"id":16159,"nodeType":"StructuredDocumentation","src":"72531:746:53","text":" @notice Updates the reserves of the Vault after an ERC4626 wrap (deposit/mint) operation.\n @dev If there are extra tokens in the Vault balances, these will be added to the reserves (which, in practice,\n is equal to discarding such tokens). This approach avoids DoS attacks, when a frontrunner leaves vault balances\n and reserves out of sync before a transaction starts.\n @param underlyingToken Underlying token of the ERC4626 wrapped token\n @param wrappedToken ERC4626 wrapped token\n @param underlyingDeltaHint Amount of underlying tokens the wrapper should have removed from the Vault\n @param wrappedDeltaHint Amount of wrapped tokens the wrapper should have added to the Vault"},"id":16196,"implemented":true,"kind":"function","modifiers":[],"name":"_settleWrap","nameLocation":"73291:11:53","nodeType":"FunctionDefinition","parameters":{"id":16170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16162,"mutability":"mutable","name":"underlyingToken","nameLocation":"73319:15:53","nodeType":"VariableDeclaration","scope":16196,"src":"73312:22:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":16161,"nodeType":"UserDefinedTypeName","pathNode":{"id":16160,"name":"IERC20","nameLocations":["73312:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"73312:6:53"},"referencedDeclaration":6980,"src":"73312:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":16165,"mutability":"mutable","name":"wrappedToken","nameLocation":"73351:12:53","nodeType":"VariableDeclaration","scope":16196,"src":"73344:19:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":16164,"nodeType":"UserDefinedTypeName","pathNode":{"id":16163,"name":"IERC20","nameLocations":["73344:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"73344:6:53"},"referencedDeclaration":6980,"src":"73344:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":16167,"mutability":"mutable","name":"underlyingDeltaHint","nameLocation":"73381:19:53","nodeType":"VariableDeclaration","scope":16196,"src":"73373:27:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16166,"name":"uint256","nodeType":"ElementaryTypeName","src":"73373:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16169,"mutability":"mutable","name":"wrappedDeltaHint","nameLocation":"73418:16:53","nodeType":"VariableDeclaration","scope":16196,"src":"73410:24:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16168,"name":"uint256","nodeType":"ElementaryTypeName","src":"73410:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"73302:138:53"},"returnParameters":{"id":16171,"nodeType":"ParameterList","parameters":[],"src":"73450:0:53"},"scope":16391,"src":"73282:870:53","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16233,"nodeType":"Block","src":"75057:708:53","statements":[{"assignments":[16211],"declarations":[{"constant":false,"id":16211,"mutability":"mutable","name":"expectedUnderlyingReservesAfter","nameLocation":"75270:31:53","nodeType":"VariableDeclaration","scope":16233,"src":"75262:39:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16210,"name":"uint256","nodeType":"ElementaryTypeName","src":"75262:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16217,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":16212,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17405,"src":"75304:11:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":16214,"indexExpression":{"id":16213,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16200,"src":"75316:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"75304:28:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16215,"name":"underlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16205,"src":"75335:19:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"75304:50:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"75262:92:53"},{"assignments":[16219],"declarations":[{"constant":false,"id":16219,"mutability":"mutable","name":"expectedWrappedReservesAfter","nameLocation":"75561:28:53","nodeType":"VariableDeclaration","scope":16233,"src":"75553:36:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16218,"name":"uint256","nodeType":"ElementaryTypeName","src":"75553:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16225,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":16220,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17405,"src":"75592:11:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":16222,"indexExpression":{"id":16221,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16203,"src":"75604:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"75592:25:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":16223,"name":"wrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16207,"src":"75620:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"75592:44:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"75553:83:53"},{"expression":{"arguments":[{"id":16227,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16200,"src":"75665:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":16228,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16203,"src":"75682:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":16229,"name":"expectedUnderlyingReservesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16211,"src":"75696:31:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16230,"name":"expectedWrappedReservesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16219,"src":"75729:28:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16226,"name":"_settleWrapUnwrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16313,"src":"75647:17:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_contract$_IERC20_$6980_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,contract IERC20,uint256,uint256)"}},"id":16231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"75647:111:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16232,"nodeType":"ExpressionStatement","src":"75647:111:53"}]},"documentation":{"id":16197,"nodeType":"StructuredDocumentation","src":"74158:724:53","text":" @notice Updates the reserves of the Vault after an ERC4626 unwrap (withdraw/redeem) operation.\n @dev If there are extra tokens in the Vault balances, these will be added to the reserves (which, in practice,\n is equal to discarding such tokens). This approach avoids DoS attacks, when a frontrunner leaves vault balances\n and state of reserves out of sync before a transaction starts.\n @param underlyingToken Underlying of ERC4626 wrapped token\n @param wrappedToken ERC4626 wrapped token\n @param underlyingDeltaHint Amount of underlying tokens supposedly added to the Vault\n @param wrappedDeltaHint Amount of wrapped tokens supposedly removed from the Vault"},"id":16234,"implemented":true,"kind":"function","modifiers":[],"name":"_settleUnwrap","nameLocation":"74896:13:53","nodeType":"FunctionDefinition","parameters":{"id":16208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16200,"mutability":"mutable","name":"underlyingToken","nameLocation":"74926:15:53","nodeType":"VariableDeclaration","scope":16234,"src":"74919:22:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":16199,"nodeType":"UserDefinedTypeName","pathNode":{"id":16198,"name":"IERC20","nameLocations":["74919:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"74919:6:53"},"referencedDeclaration":6980,"src":"74919:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":16203,"mutability":"mutable","name":"wrappedToken","nameLocation":"74958:12:53","nodeType":"VariableDeclaration","scope":16234,"src":"74951:19:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":16202,"nodeType":"UserDefinedTypeName","pathNode":{"id":16201,"name":"IERC20","nameLocations":["74951:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"74951:6:53"},"referencedDeclaration":6980,"src":"74951:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":16205,"mutability":"mutable","name":"underlyingDeltaHint","nameLocation":"74988:19:53","nodeType":"VariableDeclaration","scope":16234,"src":"74980:27:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16204,"name":"uint256","nodeType":"ElementaryTypeName","src":"74980:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16207,"mutability":"mutable","name":"wrappedDeltaHint","nameLocation":"75025:16:53","nodeType":"VariableDeclaration","scope":16234,"src":"75017:24:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16206,"name":"uint256","nodeType":"ElementaryTypeName","src":"75017:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"74909:138:53"},"returnParameters":{"id":16209,"nodeType":"ParameterList","parameters":[],"src":"75057:0:53"},"scope":16391,"src":"74887:878:53","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16312,"nodeType":"Block","src":"76871:2497:53","statements":[{"assignments":[16249],"declarations":[{"constant":false,"id":16249,"mutability":"mutable","name":"underlyingBalancesAfter","nameLocation":"76940:23:53","nodeType":"VariableDeclaration","scope":16312,"src":"76932:31:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16248,"name":"uint256","nodeType":"ElementaryTypeName","src":"76932:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16257,"initialValue":{"arguments":[{"arguments":[{"id":16254,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"77000:4:53","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}],"id":16253,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"76992:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16252,"name":"address","nodeType":"ElementaryTypeName","src":"76992:7:53","typeDescriptions":{}}},"id":16255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"76992:13:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16250,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16238,"src":"76966:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":16251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"76982:9:53","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":6937,"src":"76966:25:53","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":16256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"76966:40:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"76932:74:53"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16258,"name":"underlyingBalancesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16249,"src":"77020:23:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":16259,"name":"expectedUnderlyingReservesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16243,"src":"77046:31:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"77020:57:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16273,"nodeType":"IfStatement","src":"77016:892:53","trueBody":{"id":16272,"nodeType":"Block","src":"77079:829:53","statements":[{"errorCall":{"arguments":[{"arguments":[{"arguments":[{"id":16265,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16241,"src":"77779:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}],"id":16264,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"77771:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16263,"name":"address","nodeType":"ElementaryTypeName","src":"77771:7:53","typeDescriptions":{}}},"id":16266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"77771:21:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16262,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6704,"src":"77762:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$6704_$","typeString":"type(contract IERC4626)"}},"id":16267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"77762:31:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},{"id":16268,"name":"expectedUnderlyingReservesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16243,"src":"77811:31:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16269,"name":"underlyingBalancesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16249,"src":"77860:23:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16261,"name":"NotEnoughUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1331,"src":"77725:19:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC4626_$6704_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC4626,uint256,uint256) pure returns (error)"}},"id":16270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"77725:172:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16271,"nodeType":"RevertStatement","src":"77718:179:53"}]}},{"expression":{"id":16278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":16274,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17405,"src":"78081:11:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":16276,"indexExpression":{"id":16275,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16238,"src":"78093:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"78081:28:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16277,"name":"underlyingBalancesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16249,"src":"78112:23:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"78081:54:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16279,"nodeType":"ExpressionStatement","src":"78081:54:53"},{"assignments":[16281],"declarations":[{"constant":false,"id":16281,"mutability":"mutable","name":"wrappedBalancesAfter","nameLocation":"78202:20:53","nodeType":"VariableDeclaration","scope":16312,"src":"78194:28:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16280,"name":"uint256","nodeType":"ElementaryTypeName","src":"78194:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16289,"initialValue":{"arguments":[{"arguments":[{"id":16286,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"78256:4:53","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$16391","typeString":"contract Vault"}],"id":16285,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"78248:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16284,"name":"address","nodeType":"ElementaryTypeName","src":"78248:7:53","typeDescriptions":{}}},"id":16287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"78248:13:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16282,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16241,"src":"78225:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":16283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"78238:9:53","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":6937,"src":"78225:22:53","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":16288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"78225:37:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"78194:68:53"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16290,"name":"wrappedBalancesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16281,"src":"78276:20:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":16291,"name":"expectedWrappedReservesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16245,"src":"78299:28:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"78276:51:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16305,"nodeType":"IfStatement","src":"78272:866:53","trueBody":{"id":16304,"nodeType":"Block","src":"78329:809:53","statements":[{"errorCall":{"arguments":[{"arguments":[{"arguments":[{"id":16297,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16241,"src":"79015:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}],"id":16296,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"79007:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16295,"name":"address","nodeType":"ElementaryTypeName","src":"79007:7:53","typeDescriptions":{}}},"id":16298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"79007:21:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16294,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6704,"src":"78998:8:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$6704_$","typeString":"type(contract IERC4626)"}},"id":16299,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"78998:31:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},{"id":16300,"name":"expectedWrappedReservesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16245,"src":"79047:28:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16301,"name":"wrappedBalancesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16281,"src":"79093:20:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16293,"name":"NotEnoughWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"78964:16:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC4626_$6704_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC4626,uint256,uint256) pure returns (error)"}},"id":16302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"78964:163:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16303,"nodeType":"RevertStatement","src":"78957:170:53"}]}},{"expression":{"id":16310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":16306,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17405,"src":"79313:11:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":16308,"indexExpression":{"id":16307,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16241,"src":"79325:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"79313:25:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16309,"name":"wrappedBalancesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16281,"src":"79341:20:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"79313:48:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16311,"nodeType":"ExpressionStatement","src":"79313:48:53"}]},"documentation":{"id":16235,"nodeType":"StructuredDocumentation","src":"75771:897:53","text":" @notice Updates the reserves of the Vault after an ERC4626 wrap/unwrap operation.\n @dev If reserves of underlying or wrapped tokens are bigger than expected, the extra tokens will be discarded,\n which avoids a possible DoS. However, if reserves are smaller than expected, it means that the wrapper didn't\n respect the amount given and/or the amount calculated (informed by the wrapper operation and stored as a hint\n variable), so the token is not ERC4626 compliant and the function should be reverted.\n @param underlyingToken Underlying of ERC4626 wrapped token\n @param wrappedToken ERC4626 wrapped token\n @param expectedUnderlyingReservesAfter Vault's expected reserves of underlying after the wrap/unwrap operation\n @param expectedWrappedReservesAfter Vault's expected reserves of wrapped after the wrap/unwrap operation"},"id":16313,"implemented":true,"kind":"function","modifiers":[],"name":"_settleWrapUnwrap","nameLocation":"76682:17:53","nodeType":"FunctionDefinition","parameters":{"id":16246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16238,"mutability":"mutable","name":"underlyingToken","nameLocation":"76716:15:53","nodeType":"VariableDeclaration","scope":16313,"src":"76709:22:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":16237,"nodeType":"UserDefinedTypeName","pathNode":{"id":16236,"name":"IERC20","nameLocations":["76709:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"76709:6:53"},"referencedDeclaration":6980,"src":"76709:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":16241,"mutability":"mutable","name":"wrappedToken","nameLocation":"76748:12:53","nodeType":"VariableDeclaration","scope":16313,"src":"76741:19:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":16240,"nodeType":"UserDefinedTypeName","pathNode":{"id":16239,"name":"IERC20","nameLocations":["76741:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"76741:6:53"},"referencedDeclaration":6980,"src":"76741:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":16243,"mutability":"mutable","name":"expectedUnderlyingReservesAfter","nameLocation":"76778:31:53","nodeType":"VariableDeclaration","scope":16313,"src":"76770:39:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16242,"name":"uint256","nodeType":"ElementaryTypeName","src":"76770:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16245,"mutability":"mutable","name":"expectedWrappedReservesAfter","nameLocation":"76827:28:53","nodeType":"VariableDeclaration","scope":16313,"src":"76819:36:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16244,"name":"uint256","nodeType":"ElementaryTypeName","src":"76819:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"76699:162:53"},"returnParameters":{"id":16247,"nodeType":"ParameterList","parameters":[],"src":"76871:0:53"},"scope":16391,"src":"76673:2695:53","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16327,"nodeType":"Block","src":"79724:98:53","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16318,"name":"tradeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16315,"src":"79738:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":16319,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"79753:1:53","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"79738:16:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16326,"nodeType":"IfStatement","src":"79734:82:53","trueBody":{"id":16325,"nodeType":"Block","src":"79756:60:53","statements":[{"expression":{"arguments":[{"id":16322,"name":"tradeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16315,"src":"79793:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16321,"name":"_ensureValidSwapAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16342,"src":"79770:22:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":16323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"79770:35:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16324,"nodeType":"ExpressionStatement","src":"79770:35:53"}]}}]},"id":16328,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidTradeAmount","nameLocation":"79665:23:53","nodeType":"FunctionDefinition","parameters":{"id":16316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16315,"mutability":"mutable","name":"tradeAmount","nameLocation":"79697:11:53","nodeType":"VariableDeclaration","scope":16328,"src":"79689:19:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16314,"name":"uint256","nodeType":"ElementaryTypeName","src":"79689:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"79688:21:53"},"returnParameters":{"id":16317,"nodeType":"ParameterList","parameters":[],"src":"79724:0:53"},"scope":16391,"src":"79656:166:53","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16341,"nodeType":"Block","src":"80644:110:53","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16333,"name":"tradeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16330,"src":"80658:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":16334,"name":"_MINIMUM_TRADE_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17321,"src":"80672:21:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"80658:35:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16340,"nodeType":"IfStatement","src":"80654:94:53","trueBody":{"id":16339,"nodeType":"Block","src":"80695:53:53","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16336,"name":"TradeAmountTooSmall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1137,"src":"80716:19:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":16337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"80716:21:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16338,"nodeType":"RevertStatement","src":"80709:28:53"}]}}]},"id":16342,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidSwapAmount","nameLocation":"80586:22:53","nodeType":"FunctionDefinition","parameters":{"id":16331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16330,"mutability":"mutable","name":"tradeAmount","nameLocation":"80617:11:53","nodeType":"VariableDeclaration","scope":16342,"src":"80609:19:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16329,"name":"uint256","nodeType":"ElementaryTypeName","src":"80609:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"80608:21:53"},"returnParameters":{"id":16332,"nodeType":"ParameterList","parameters":[],"src":"80644:0:53"},"scope":16391,"src":"80577:177:53","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[2163],"body":{"id":16351,"nodeType":"Block","src":"81074:41:53","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":16348,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[16365],"referencedDeclaration":16365,"src":"81091:15:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":16349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"81091:17:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":16347,"id":16350,"nodeType":"Return","src":"81084:24:53"}]},"documentation":{"id":16343,"nodeType":"StructuredDocumentation","src":"80982:26:53","text":"@inheritdoc IVaultMain"},"functionSelector":"b9a8effa","id":16352,"implemented":true,"kind":"function","modifiers":[],"name":"getVaultExtension","nameLocation":"81022:17:53","nodeType":"FunctionDefinition","parameters":{"id":16344,"nodeType":"ParameterList","parameters":[],"src":"81039:2:53"},"returnParameters":{"id":16347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16346,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16352,"src":"81065:7:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16345,"name":"address","nodeType":"ElementaryTypeName","src":"81065:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"81064:9:53"},"scope":16391,"src":"81013:102:53","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[6883],"body":{"id":16364,"nodeType":"Block","src":"81321:48:53","statements":[{"expression":{"arguments":[{"id":16361,"name":"_vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13095,"src":"81346:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$2028","typeString":"contract IVaultExtension"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVaultExtension_$2028","typeString":"contract IVaultExtension"}],"id":16360,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"81338:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16359,"name":"address","nodeType":"ElementaryTypeName","src":"81338:7:53","typeDescriptions":{}}},"id":16362,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"81338:24:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":16358,"id":16363,"nodeType":"Return","src":"81331:31:53"}]},"documentation":{"id":16353,"nodeType":"StructuredDocumentation","src":"81121:127:53","text":" @inheritdoc Proxy\n @dev Returns the VaultExtension contract, to which fallback requests are forwarded."},"id":16365,"implemented":true,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"81262:15:53","nodeType":"FunctionDefinition","overrides":{"id":16355,"nodeType":"OverrideSpecifier","overrides":[],"src":"81294:8:53"},"parameters":{"id":16354,"nodeType":"ParameterList","parameters":[],"src":"81277:2:53"},"returnParameters":{"id":16358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16357,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16365,"src":"81312:7:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16356,"name":"address","nodeType":"ElementaryTypeName","src":"81312:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"81311:9:53"},"scope":16391,"src":"81253:116:53","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16371,"nodeType":"Block","src":"81627:42:53","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16368,"name":"CannotReceiveEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1354,"src":"81644:16:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":16369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"81644:18:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16370,"nodeType":"RevertStatement","src":"81637:25:53"}]},"id":16372,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":16366,"nodeType":"ParameterList","parameters":[],"src":"81607:2:53"},"returnParameters":{"id":16367,"nodeType":"ParameterList","parameters":[],"src":"81627:0:53"},"scope":16391,"src":"81600:69:53","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[6901],"body":{"id":16389,"nodeType":"Block","src":"81987:107:53","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":16377,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"82001:3:53","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"82005:5:53","memberName":"value","nodeType":"MemberAccess","src":"82001:9:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":16379,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"82013:1:53","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"82001:13:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16385,"nodeType":"IfStatement","src":"81997:69:53","trueBody":{"id":16384,"nodeType":"Block","src":"82016:50:53","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16381,"name":"CannotReceiveEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1354,"src":"82037:16:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":16382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"82037:18:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16383,"nodeType":"RevertStatement","src":"82030:25:53"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":16386,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6893,"src":"82076:9:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":16387,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"82076:11:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16388,"nodeType":"ExpressionStatement","src":"82076:11:53"}]},"documentation":{"id":16373,"nodeType":"StructuredDocumentation","src":"81719:226:53","text":" @inheritdoc Proxy\n @dev Override proxy implementation of `fallback` to disallow incoming ETH transfers.\n This function actually returns whatever the VaultExtension does when handling the request."},"id":16390,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","overrides":{"id":16375,"nodeType":"OverrideSpecifier","overrides":[],"src":"81978:8:53"},"parameters":{"id":16374,"nodeType":"ParameterList","parameters":[],"src":"81958:2:53"},"returnParameters":{"id":16376,"nodeType":"ParameterList","parameters":[],"src":"81987:0:53"},"scope":16391,"src":"81950:144:53","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":16392,"src":"2550:79546:53","usedErrors":[97,1015,1020,1025,1030,1039,1045,1048,1051,1054,1057,1060,1063,1072,1075,1078,1081,1084,1087,1090,1093,1096,1099,1102,1105,1108,1111,1114,1120,1127,1134,1137,1140,1150,1160,1167,1170,1173,1176,1186,1196,1203,1206,1209,1212,1215,1218,1221,1224,1227,1232,1237,1242,1245,1248,1251,1254,1257,1262,1267,1272,1278,1284,1287,1295,1301,1307,1310,1313,1316,1321,1331,1341,1348,1351,1354,1357,1360,1363,1366,1369,2623,2648,2651,2654,2895,4475,6135,6741,6746,6751,6760,6765,6770,7059,7340,7345,7348,9989,10001,12265,12272],"usedEvents":[1408,1413,1432,1444,1456,1474,1492,1497,1500,1503,1510,1517,1524,1531,1538,1544,1550,1562,1572,1582,1594,1599,1608,20334,20345]}],"src":"46:82051:53"},"id":53},"contracts/VaultCommon.sol":{"ast":{"absolutePath":"contracts/VaultCommon.sol","exportedSymbols":{"ERC20MultiToken":[20898],"EVMCallModeHelpers":[2639],"IERC20":[6980],"IERC4626":[6704],"ISwapFeePercentageBounds":[659],"IVaultErrors":[1370],"IVaultEvents":[1609],"PackedTokenBalance":[3032],"PoolConfigBits":[2184],"PoolConfigLib":[19568],"PoolData":[2331],"PoolDataLib":[20158],"ReentrancyGuardTransient":[6191],"Rounding":[2334],"SafeCast":[11729],"ScalingHelpers":[3446],"StorageSlotExtension":[6534],"TransientStorageHelpers":[4040],"VaultCommon":[17227],"VaultStateBits":[20164],"VaultStateLib":[20305],"VaultStorage":[17511]},"id":17228,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":16393,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:54"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":16395,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17228,"sourceUnit":6705,"src":"72:75:54","symbolAliases":[{"foreign":{"id":16394,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6704,"src":"81:8:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":16397,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17228,"sourceUnit":11730,"src":"148:75:54","symbolAliases":[{"foreign":{"id":16396,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11729,"src":"157:8:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":16399,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17228,"sourceUnit":6981,"src":"224:72:54","symbolAliases":[{"foreign":{"id":16398,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"233:6:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol","id":16401,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17228,"sourceUnit":660,"src":"298:117:54","symbolAliases":[{"foreign":{"id":16400,"name":"ISwapFeePercentageBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":659,"src":"307:24:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":16404,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17228,"sourceUnit":2474,"src":"416:97:54","symbolAliases":[{"foreign":{"id":16402,"name":"PoolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2331,"src":"425:8:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":16403,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"435:8:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":16406,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17228,"sourceUnit":1371,"src":"514:93:54","symbolAliases":[{"foreign":{"id":16405,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"523:12:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","id":16408,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17228,"sourceUnit":1610,"src":"608:93:54","symbolAliases":[{"foreign":{"id":16407,"name":"IVaultEvents","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1609,"src":"617:12:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","id":16410,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17228,"sourceUnit":6535,"src":"703:120:54","symbolAliases":[{"foreign":{"id":16409,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6534,"src":"712:20:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol","id":16412,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17228,"sourceUnit":2640,"src":"824:111:54","symbolAliases":[{"foreign":{"id":16411,"name":"EVMCallModeHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2639,"src":"833:18:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","id":16414,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17228,"sourceUnit":3033,"src":"936:111:54","symbolAliases":[{"foreign":{"id":16413,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3032,"src":"945:18:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","id":16416,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17228,"sourceUnit":3447,"src":"1048:103:54","symbolAliases":[{"foreign":{"id":16415,"name":"ScalingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"1057:14:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":16418,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17228,"sourceUnit":6192,"src":"1152:132:54","symbolAliases":[{"foreign":{"id":16417,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6191,"src":"1165:24:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","id":16420,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17228,"sourceUnit":4041,"src":"1285:125:54","symbolAliases":[{"foreign":{"id":16419,"name":"TransientStorageHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4040,"src":"1298:23:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/lib/VaultStateLib.sol","file":"./lib/VaultStateLib.sol","id":16423,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17228,"sourceUnit":20306,"src":"1412:72:54","symbolAliases":[{"foreign":{"id":16421,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20164,"src":"1421:14:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":16422,"name":"VaultStateLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20305,"src":"1437:13:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/lib/PoolConfigLib.sol","file":"./lib/PoolConfigLib.sol","id":16426,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17228,"sourceUnit":19569,"src":"1485:72:54","symbolAliases":[{"foreign":{"id":16424,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"1494:14:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":16425,"name":"PoolConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19568,"src":"1510:13:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/token/ERC20MultiToken.sol","file":"./token/ERC20MultiToken.sol","id":16428,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17228,"sourceUnit":20899,"src":"1558:62:54","symbolAliases":[{"foreign":{"id":16427,"name":"ERC20MultiToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20898,"src":"1567:15:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/lib/PoolDataLib.sol","file":"./lib/PoolDataLib.sol","id":16430,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17228,"sourceUnit":20159,"src":"1621:52:54","symbolAliases":[{"foreign":{"id":16429,"name":"PoolDataLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20158,"src":"1630:11:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/VaultStorage.sol","file":"./VaultStorage.sol","id":16432,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17228,"sourceUnit":17512,"src":"1674:50:54","symbolAliases":[{"foreign":{"id":16431,"name":"VaultStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17511,"src":"1683:12:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":16434,"name":"IVaultEvents","nameLocations":["2031:12:54"],"nodeType":"IdentifierPath","referencedDeclaration":1609,"src":"2031:12:54"},"id":16435,"nodeType":"InheritanceSpecifier","src":"2031:12:54"},{"baseName":{"id":16436,"name":"IVaultErrors","nameLocations":["2045:12:54"],"nodeType":"IdentifierPath","referencedDeclaration":1370,"src":"2045:12:54"},"id":16437,"nodeType":"InheritanceSpecifier","src":"2045:12:54"},{"baseName":{"id":16438,"name":"VaultStorage","nameLocations":["2059:12:54"],"nodeType":"IdentifierPath","referencedDeclaration":17511,"src":"2059:12:54"},"id":16439,"nodeType":"InheritanceSpecifier","src":"2059:12:54"},{"baseName":{"id":16440,"name":"ReentrancyGuardTransient","nameLocations":["2073:24:54"],"nodeType":"IdentifierPath","referencedDeclaration":6191,"src":"2073:24:54"},"id":16441,"nodeType":"InheritanceSpecifier","src":"2073:24:54"},{"baseName":{"id":16442,"name":"ERC20MultiToken","nameLocations":["2099:15:54"],"nodeType":"IdentifierPath","referencedDeclaration":20898,"src":"2099:15:54"},"id":16443,"nodeType":"InheritanceSpecifier","src":"2099:15:54"}],"canonicalName":"VaultCommon","contractDependencies":[],"contractKind":"contract","documentation":{"id":16433,"nodeType":"StructuredDocumentation","src":"1726:271:54","text":" @notice Functions and modifiers shared between the main Vault and its extension contracts.\n @dev This contract contains common utilities in the inheritance chain that require storage to work,\n and will be required in both the main Vault and its extensions."},"fullyImplemented":true,"id":17227,"linearizedBaseContracts":[17227,20898,98,6771,6191,17511,1370,1609],"name":"VaultCommon","nameLocation":"2016:11:54","nodeType":"ContractDefinition","nodes":[{"global":false,"id":16447,"libraryName":{"id":16444,"name":"PoolConfigLib","nameLocations":["2127:13:54"],"nodeType":"IdentifierPath","referencedDeclaration":19568,"src":"2127:13:54"},"nodeType":"UsingForDirective","src":"2121:39:54","typeName":{"id":16446,"nodeType":"UserDefinedTypeName","pathNode":{"id":16445,"name":"PoolConfigBits","nameLocations":["2145:14:54"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"2145:14:54"},"referencedDeclaration":2184,"src":"2145:14:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}},{"global":false,"id":16451,"libraryName":{"id":16448,"name":"VaultStateLib","nameLocations":["2171:13:54"],"nodeType":"IdentifierPath","referencedDeclaration":20305,"src":"2171:13:54"},"nodeType":"UsingForDirective","src":"2165:39:54","typeName":{"id":16450,"nodeType":"UserDefinedTypeName","pathNode":{"id":16449,"name":"VaultStateBits","nameLocations":["2189:14:54"],"nodeType":"IdentifierPath","referencedDeclaration":20164,"src":"2189:14:54"},"referencedDeclaration":20164,"src":"2189:14:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}}},{"global":false,"id":16453,"libraryName":{"id":16452,"name":"SafeCast","nameLocations":["2215:8:54"],"nodeType":"IdentifierPath","referencedDeclaration":11729,"src":"2215:8:54"},"nodeType":"UsingForDirective","src":"2209:21:54"},{"global":false,"id":16455,"libraryName":{"id":16454,"name":"TransientStorageHelpers","nameLocations":["2241:23:54"],"nodeType":"IdentifierPath","referencedDeclaration":4040,"src":"2241:23:54"},"nodeType":"UsingForDirective","src":"2235:36:54"},{"global":false,"id":16457,"libraryName":{"id":16456,"name":"StorageSlotExtension","nameLocations":["2282:20:54"],"nodeType":"IdentifierPath","referencedDeclaration":6534,"src":"2282:20:54"},"nodeType":"UsingForDirective","src":"2276:33:54"},{"global":false,"id":16461,"libraryName":{"id":16458,"name":"PoolDataLib","nameLocations":["2320:11:54"],"nodeType":"IdentifierPath","referencedDeclaration":20158,"src":"2320:11:54"},"nodeType":"UsingForDirective","src":"2314:31:54","typeName":{"id":16460,"nodeType":"UserDefinedTypeName","pathNode":{"id":16459,"name":"PoolData","nameLocations":["2336:8:54"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"2336:8:54"},"referencedDeclaration":2331,"src":"2336:8:54","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}}},{"body":{"id":16468,"nodeType":"Block","src":"2735:45:54","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":16464,"name":"_ensureUnlocked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16484,"src":"2745:15:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":16465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2745:17:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16466,"nodeType":"ExpressionStatement","src":"2745:17:54"},{"id":16467,"nodeType":"PlaceholderStatement","src":"2772:1:54"}]},"documentation":{"id":16462,"nodeType":"StructuredDocumentation","src":"2573:129:54","text":" @dev This modifier ensures that the function it modifies can only be called\n when a tab has been opened."},"id":16469,"name":"onlyWhenUnlocked","nameLocation":"2716:16:54","nodeType":"ModifierDefinition","parameters":{"id":16463,"nodeType":"ParameterList","parameters":[],"src":"2732:2:54"},"src":"2707:73:54","virtual":false,"visibility":"internal"},{"body":{"id":16483,"nodeType":"Block","src":"2827:104:54","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":16477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":16472,"name":"_isUnlocked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17447,"src":"2841:11:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_BooleanSlotType_$6357_$","typeString":"function () view returns (StorageSlotExtension.BooleanSlotType)"}},"id":16473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2841:13:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6357","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":16474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2855:5:54","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":6456,"src":"2841:19:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_BooleanSlotType_$6357_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_BooleanSlotType_$6357_$","typeString":"function (StorageSlotExtension.BooleanSlotType) view returns (bool)"}},"id":16475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2841:21:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":16476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2866:5:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"2841:30:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16482,"nodeType":"IfStatement","src":"2837:88:54","trueBody":{"id":16481,"nodeType":"Block","src":"2873:52:54","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16478,"name":"VaultIsNotUnlocked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1078,"src":"2894:18:54","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":16479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2894:20:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16480,"nodeType":"RevertStatement","src":"2887:27:54"}]}}]},"id":16484,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureUnlocked","nameLocation":"2795:15:54","nodeType":"FunctionDefinition","parameters":{"id":16470,"nodeType":"ParameterList","parameters":[],"src":"2810:2:54"},"returnParameters":{"id":16471,"nodeType":"ParameterList","parameters":[],"src":"2827:0:54"},"scope":17227,"src":"2786:145:54","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16493,"nodeType":"Block","src":"3159:49:54","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":16490,"name":"_reentrancyGuardEntered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6190,"src":"3176:23:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":16491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3176:25:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16489,"id":16492,"nodeType":"Return","src":"3169:32:54"}]},"documentation":{"id":16485,"nodeType":"StructuredDocumentation","src":"2937:156:54","text":" @notice Expose the state of the Vault's reentrancy guard.\n @return True if the Vault is currently executing a nonReentrant function"},"functionSelector":"d2c725e0","id":16494,"implemented":true,"kind":"function","modifiers":[],"name":"reentrancyGuardEntered","nameLocation":"3107:22:54","nodeType":"FunctionDefinition","parameters":{"id":16486,"nodeType":"ParameterList","parameters":[],"src":"3129:2:54"},"returnParameters":{"id":16489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16488,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16494,"src":"3153:4:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16487,"name":"bool","nodeType":"ElementaryTypeName","src":"3153:4:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3152:6:54"},"scope":17227,"src":"3098:110:54","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":16511,"nodeType":"Block","src":"3512:57:54","statements":[{"expression":{"arguments":[{"id":16504,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16498,"src":"3536:5:54","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":16508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"3543:18:54","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16505,"name":"credit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16500,"src":"3544:6:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3551:8:54","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":11728,"src":"3544:15:54","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":16507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3544:17:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":16503,"name":"_accountDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16585,"src":"3522:13:54","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_int256_$returns$__$","typeString":"function (contract IERC20,int256)"}},"id":16509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3522:40:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16510,"nodeType":"ExpressionStatement","src":"3522:40:54"}]},"documentation":{"id":16495,"nodeType":"StructuredDocumentation","src":"3214:231:54","text":" @notice Records the `credit` for a given token.\n @param token The ERC20 token for which the 'credit' will be accounted\n @param credit The amount of `token` supplied to the Vault in favor of the caller"},"id":16512,"implemented":true,"kind":"function","modifiers":[],"name":"_supplyCredit","nameLocation":"3459:13:54","nodeType":"FunctionDefinition","parameters":{"id":16501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16498,"mutability":"mutable","name":"token","nameLocation":"3480:5:54","nodeType":"VariableDeclaration","scope":16512,"src":"3473:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":16497,"nodeType":"UserDefinedTypeName","pathNode":{"id":16496,"name":"IERC20","nameLocations":["3473:6:54"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"3473:6:54"},"referencedDeclaration":6980,"src":"3473:6:54","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":16500,"mutability":"mutable","name":"credit","nameLocation":"3495:6:54","nodeType":"VariableDeclaration","scope":16512,"src":"3487:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16499,"name":"uint256","nodeType":"ElementaryTypeName","src":"3487:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3472:30:54"},"returnParameters":{"id":16502,"nodeType":"ParameterList","parameters":[],"src":"3512:0:54"},"scope":17227,"src":"3450:119:54","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16528,"nodeType":"Block","src":"3860:54:54","statements":[{"expression":{"arguments":[{"id":16522,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16516,"src":"3884:5:54","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16523,"name":"debt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16518,"src":"3891:4:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3896:8:54","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":11728,"src":"3891:13:54","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":16525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3891:15:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":16521,"name":"_accountDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16585,"src":"3870:13:54","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6980_$_t_int256_$returns$__$","typeString":"function (contract IERC20,int256)"}},"id":16526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3870:37:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16527,"nodeType":"ExpressionStatement","src":"3870:37:54"}]},"documentation":{"id":16513,"nodeType":"StructuredDocumentation","src":"3575:224:54","text":" @notice Records the `debt` for a given token.\n @param token The ERC20 token for which the `debt` will be accounted\n @param debt The amount of `token` taken from the Vault in favor of the caller"},"id":16529,"implemented":true,"kind":"function","modifiers":[],"name":"_takeDebt","nameLocation":"3813:9:54","nodeType":"FunctionDefinition","parameters":{"id":16519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16516,"mutability":"mutable","name":"token","nameLocation":"3830:5:54","nodeType":"VariableDeclaration","scope":16529,"src":"3823:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":16515,"nodeType":"UserDefinedTypeName","pathNode":{"id":16514,"name":"IERC20","nameLocations":["3823:6:54"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"3823:6:54"},"referencedDeclaration":6980,"src":"3823:6:54","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":16518,"mutability":"mutable","name":"debt","nameLocation":"3845:4:54","nodeType":"VariableDeclaration","scope":16529,"src":"3837:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16517,"name":"uint256","nodeType":"ElementaryTypeName","src":"3837:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3822:28:54"},"returnParameters":{"id":16520,"nodeType":"ParameterList","parameters":[],"src":"3860:0:54"},"scope":17227,"src":"3804:110:54","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16584,"nodeType":"Block","src":"4406:844:54","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":16540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16538,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16535,"src":"4485:5:54","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":16539,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4494:1:54","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4485:10:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16542,"nodeType":"IfStatement","src":"4481:23:54","trueBody":{"functionReturnParameters":16537,"id":16541,"nodeType":"Return","src":"4497:7:54"}},{"assignments":[16544],"declarations":[{"constant":false,"id":16544,"mutability":"mutable","name":"current","nameLocation":"4579:7:54","nodeType":"VariableDeclaration","scope":16584,"src":"4572:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":16543,"name":"int256","nodeType":"ElementaryTypeName","src":"4572:6:54","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":16550,"initialValue":{"arguments":[{"id":16548,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16533,"src":"4609:5:54","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":16545,"name":"_tokenDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17470,"src":"4589:12:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456_$","typeString":"function () view returns (TokenDeltaMappingSlotType)"}},"id":16546,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4589:14:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456","typeString":"TokenDeltaMappingSlotType"}},"id":16547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4604:4:54","memberName":"tGet","nodeType":"MemberAccess","referencedDeclaration":3536,"src":"4589:19:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456_$_t_contract$_IERC20_$6980_$returns$_t_int256_$attached_to$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456_$","typeString":"function (TokenDeltaMappingSlotType,contract IERC20) view returns (int256)"}},"id":16549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4589:26:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"4572:43:54"},{"assignments":[16552],"declarations":[{"constant":false,"id":16552,"mutability":"mutable","name":"next","nameLocation":"4701:4:54","nodeType":"VariableDeclaration","scope":16584,"src":"4694:11:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":16551,"name":"int256","nodeType":"ElementaryTypeName","src":"4694:6:54","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":16556,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":16555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16553,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16544,"src":"4708:7:54","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16554,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16535,"src":"4718:5:54","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"4708:15:54","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"4694:29:54"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":16559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16557,"name":"next","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16552,"src":"4738:4:54","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":16558,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4746:1:54","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4738:9:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":16568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16566,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16544,"src":"4944:7:54","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":16567,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4955:1:54","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4944:12:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16575,"nodeType":"IfStatement","src":"4940:217:54","trueBody":{"id":16574,"nodeType":"Block","src":"4958:199:54","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":16569,"name":"_nonZeroDeltaCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17458,"src":"5113:18:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function () view returns (StorageSlotExtension.Uint256SlotType)"}},"id":16570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5113:20:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":16571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5134:10:54","memberName":"tIncrement","nodeType":"MemberAccess","referencedDeclaration":4022,"src":"5113:31:54","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$6391_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (StorageSlotExtension.Uint256SlotType)"}},"id":16572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5113:33:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16573,"nodeType":"ExpressionStatement","src":"5113:33:54"}]}},"id":16576,"nodeType":"IfStatement","src":"4734:423:54","trueBody":{"id":16565,"nodeType":"Block","src":"4749:185:54","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":16560,"name":"_nonZeroDeltaCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17458,"src":"4890:18:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function () view returns (StorageSlotExtension.Uint256SlotType)"}},"id":16561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4890:20:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":16562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4911:10:54","memberName":"tDecrement","nodeType":"MemberAccess","referencedDeclaration":4039,"src":"4890:31:54","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$6391_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$6391_$","typeString":"function (StorageSlotExtension.Uint256SlotType)"}},"id":16563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4890:33:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16564,"nodeType":"ExpressionStatement","src":"4890:33:54"}]}},{"expression":{"arguments":[{"id":16580,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16533,"src":"5231:5:54","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":16581,"name":"next","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16552,"src":"5238:4:54","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_int256","typeString":"int256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":16577,"name":"_tokenDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17470,"src":"5211:12:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456_$","typeString":"function () view returns (TokenDeltaMappingSlotType)"}},"id":16578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5211:14:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456","typeString":"TokenDeltaMappingSlotType"}},"id":16579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5226:4:54","memberName":"tSet","nodeType":"MemberAccess","referencedDeclaration":3565,"src":"5211:19:54","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456_$_t_contract$_IERC20_$6980_$_t_int256_$returns$__$attached_to$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456_$","typeString":"function (TokenDeltaMappingSlotType,contract IERC20,int256)"}},"id":16582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5211:32:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16583,"nodeType":"ExpressionStatement","src":"5211:32:54"}]},"documentation":{"id":16530,"nodeType":"StructuredDocumentation","src":"3920:421:54","text":" @dev Accounts the delta for the given token. A positive delta represents debt,\n while a negative delta represents surplus.\n @param token The ERC20 token for which the delta is being accounted\n @param delta The difference in the token balance\n Positive indicates a debit or a decrease in Vault's tokens,\n negative indicates a credit or an increase in Vault's tokens."},"id":16585,"implemented":true,"kind":"function","modifiers":[],"name":"_accountDelta","nameLocation":"4355:13:54","nodeType":"FunctionDefinition","parameters":{"id":16536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16533,"mutability":"mutable","name":"token","nameLocation":"4376:5:54","nodeType":"VariableDeclaration","scope":16585,"src":"4369:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":16532,"nodeType":"UserDefinedTypeName","pathNode":{"id":16531,"name":"IERC20","nameLocations":["4369:6:54"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"4369:6:54"},"referencedDeclaration":6980,"src":"4369:6:54","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":16535,"mutability":"mutable","name":"delta","nameLocation":"4390:5:54","nodeType":"VariableDeclaration","scope":16585,"src":"4383:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":16534,"name":"int256","nodeType":"ElementaryTypeName","src":"4383:6:54","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4368:28:54"},"returnParameters":{"id":16537,"nodeType":"ParameterList","parameters":[],"src":"4406:0:54"},"scope":17227,"src":"4346:904:54","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16592,"nodeType":"Block","src":"5592:51:54","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":16588,"name":"_ensureVaultNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16605,"src":"5602:21:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":16589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5602:23:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16590,"nodeType":"ExpressionStatement","src":"5602:23:54"},{"id":16591,"nodeType":"PlaceholderStatement","src":"5635:1:54"}]},"documentation":{"id":16586,"nodeType":"StructuredDocumentation","src":"5477:80:54","text":"@dev Modifier to make a function callable only when the Vault is not paused."},"id":16593,"name":"whenVaultNotPaused","nameLocation":"5571:18:54","nodeType":"ModifierDefinition","parameters":{"id":16587,"nodeType":"ParameterList","parameters":[],"src":"5589:2:54"},"src":"5562:81:54","virtual":false,"visibility":"internal"},{"body":{"id":16604,"nodeType":"Block","src":"5741:83:54","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":16597,"name":"_isVaultPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16635,"src":"5755:14:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":16598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5755:16:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16603,"nodeType":"IfStatement","src":"5751:67:54","trueBody":{"id":16602,"nodeType":"Block","src":"5773:45:54","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16599,"name":"VaultPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1251,"src":"5794:11:54","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":16600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5794:13:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16601,"nodeType":"RevertStatement","src":"5787:20:54"}]}}]},"documentation":{"id":16594,"nodeType":"StructuredDocumentation","src":"5649:40:54","text":"@dev Reverts if the Vault is paused."},"id":16605,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureVaultNotPaused","nameLocation":"5703:21:54","nodeType":"FunctionDefinition","parameters":{"id":16595,"nodeType":"ParameterList","parameters":[],"src":"5724:2:54"},"returnParameters":{"id":16596,"nodeType":"ParameterList","parameters":[],"src":"5741:0:54"},"scope":17227,"src":"5694:130:54","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16618,"nodeType":"Block","src":"5947:76:54","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":16611,"name":"_ensureVaultNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16605,"src":"5957:21:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":16612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5957:23:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16613,"nodeType":"ExpressionStatement","src":"5957:23:54"},{"expression":{"arguments":[{"id":16615,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16608,"src":"6011:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16614,"name":"_ensurePoolNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16651,"src":"5990:20:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":16616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5990:26:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16617,"nodeType":"ExpressionStatement","src":"5990:26:54"}]},"documentation":{"id":16606,"nodeType":"StructuredDocumentation","src":"5830:59:54","text":"@dev Reverts if the Vault or the given pool are paused."},"id":16619,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureUnpaused","nameLocation":"5903:15:54","nodeType":"FunctionDefinition","parameters":{"id":16609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16608,"mutability":"mutable","name":"pool","nameLocation":"5927:4:54","nodeType":"VariableDeclaration","scope":16619,"src":"5919:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16607,"name":"address","nodeType":"ElementaryTypeName","src":"5919:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5918:14:54"},"returnParameters":{"id":16610,"nodeType":"ParameterList","parameters":[],"src":"5947:0:54"},"scope":17227,"src":"5894:129:54","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16634,"nodeType":"Block","src":"6304:157:54","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":16632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":16625,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"6375:5:54","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":16626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6381:9:54","memberName":"timestamp","nodeType":"MemberAccess","src":"6375:15:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":16627,"name":"_vaultBufferPeriodEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17394,"src":"6394:25:54","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"6375:44:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16629,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17399,"src":"6423:15:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}},"id":16630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6439:13:54","memberName":"isVaultPaused","nodeType":"MemberAccess","referencedDeclaration":20239,"src":"6423:29:54","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VaultStateBits_$20164_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_VaultStateBits_$20164_$","typeString":"function (VaultStateBits) pure returns (bool)"}},"id":16631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6423:31:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6375:79:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16624,"id":16633,"nodeType":"Return","src":"6368:86:54"}]},"documentation":{"id":16620,"nodeType":"StructuredDocumentation","src":"6029:215:54","text":" @dev For gas efficiency, storage is only read before `_vaultBufferPeriodEndTime`. Once we're past that\n timestamp, the expression short-circuits false, and the Vault is permanently unpaused."},"id":16635,"implemented":true,"kind":"function","modifiers":[],"name":"_isVaultPaused","nameLocation":"6258:14:54","nodeType":"FunctionDefinition","parameters":{"id":16621,"nodeType":"ParameterList","parameters":[],"src":"6272:2:54"},"returnParameters":{"id":16624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16623,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16635,"src":"6298:4:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16622,"name":"bool","nodeType":"ElementaryTypeName","src":"6298:4:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6297:6:54"},"scope":17227,"src":"6249:212:54","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16650,"nodeType":"Block","src":"6790:89:54","statements":[{"condition":{"arguments":[{"id":16642,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"6818:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16641,"name":"_isPoolPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16668,"src":"6804:13:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":16643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6804:19:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16649,"nodeType":"IfStatement","src":"6800:73:54","trueBody":{"id":16648,"nodeType":"Block","src":"6825:48:54","statements":[{"errorCall":{"arguments":[{"id":16645,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"6857:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16644,"name":"PoolPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1262,"src":"6846:10:54","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":16646,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6846:16:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16647,"nodeType":"RevertStatement","src":"6839:23:54"}]}}]},"documentation":{"id":16636,"nodeType":"StructuredDocumentation","src":"6688:39:54","text":"@dev Reverts if the pool is paused."},"id":16651,"implemented":true,"kind":"function","modifiers":[],"name":"_ensurePoolNotPaused","nameLocation":"6741:20:54","nodeType":"FunctionDefinition","parameters":{"id":16639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16638,"mutability":"mutable","name":"pool","nameLocation":"6770:4:54","nodeType":"VariableDeclaration","scope":16651,"src":"6762:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16637,"name":"address","nodeType":"ElementaryTypeName","src":"6762:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6761:14:54"},"returnParameters":{"id":16640,"nodeType":"ParameterList","parameters":[],"src":"6790:0:54"},"scope":17227,"src":"6732:147:54","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16667,"nodeType":"Block","src":"7039:84:54","statements":[{"assignments":[16660,null],"declarations":[{"constant":false,"id":16660,"mutability":"mutable","name":"paused","nameLocation":"7055:6:54","nodeType":"VariableDeclaration","scope":16667,"src":"7050:11:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16659,"name":"bool","nodeType":"ElementaryTypeName","src":"7050:4:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":16664,"initialValue":{"arguments":[{"id":16662,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16654,"src":"7087:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16661,"name":"_getPoolPausedState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16709,"src":"7067:19:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$_t_uint32_$","typeString":"function (address) view returns (bool,uint32)"}},"id":16663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7067:25:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint32_$","typeString":"tuple(bool,uint32)"}},"nodeType":"VariableDeclarationStatement","src":"7049:43:54"},{"expression":{"id":16665,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16660,"src":"7110:6:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16658,"id":16666,"nodeType":"Return","src":"7103:13:54"}]},"documentation":{"id":16652,"nodeType":"StructuredDocumentation","src":"6885:83:54","text":"@dev Check both the flag and timestamp to determine whether the pool is paused."},"id":16668,"implemented":true,"kind":"function","modifiers":[],"name":"_isPoolPaused","nameLocation":"6982:13:54","nodeType":"FunctionDefinition","parameters":{"id":16655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16654,"mutability":"mutable","name":"pool","nameLocation":"7004:4:54","nodeType":"VariableDeclaration","scope":16668,"src":"6996:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16653,"name":"address","nodeType":"ElementaryTypeName","src":"6996:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6995:14:54"},"returnParameters":{"id":16658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16657,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16668,"src":"7033:4:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16656,"name":"bool","nodeType":"ElementaryTypeName","src":"7033:4:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7032:6:54"},"scope":17227,"src":"6973:150:54","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16708,"nodeType":"Block","src":"7302:400:54","statements":[{"assignments":[16680],"declarations":[{"constant":false,"id":16680,"mutability":"mutable","name":"config","nameLocation":"7327:6:54","nodeType":"VariableDeclaration","scope":16708,"src":"7312:21:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":16679,"nodeType":"UserDefinedTypeName","pathNode":{"id":16678,"name":"PoolConfigBits","nameLocations":["7312:14:54"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"7312:14:54"},"referencedDeclaration":2184,"src":"7312:14:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"id":16684,"initialValue":{"baseExpression":{"id":16681,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17353,"src":"7336:15:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"mapping(address => PoolConfigBits)"}},"id":16683,"indexExpression":{"id":16682,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16671,"src":"7352:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7336:21:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"nodeType":"VariableDeclarationStatement","src":"7312:45:54"},{"assignments":[16686],"declarations":[{"constant":false,"id":16686,"mutability":"mutable","name":"isPoolPaused","nameLocation":"7373:12:54","nodeType":"VariableDeclaration","scope":16708,"src":"7368:17:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16685,"name":"bool","nodeType":"ElementaryTypeName","src":"7368:4:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":16690,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16687,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16680,"src":"7388:6:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":16688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7395:12:54","memberName":"isPoolPaused","nodeType":"MemberAccess","referencedDeclaration":18850,"src":"7388:19:54","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":16689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7388:21:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"7368:41:54"},{"assignments":[16692],"declarations":[{"constant":false,"id":16692,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"7426:18:54","nodeType":"VariableDeclaration","scope":16708,"src":"7419:25:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16691,"name":"uint32","nodeType":"ElementaryTypeName","src":"7419:6:54","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"id":16696,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16693,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16680,"src":"7447:6:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":16694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7454:21:54","memberName":"getPauseWindowEndTime","nodeType":"MemberAccess","referencedDeclaration":19492,"src":"7447:28:54","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_uint32_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (uint32)"}},"id":16695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7447:30:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"7419:58:54"},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":16704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16697,"name":"isPoolPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16686,"src":"7592:12:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":16698,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"7608:5:54","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":16699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7614:9:54","memberName":"timestamp","nodeType":"MemberAccess","src":"7608:15:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":16702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16700,"name":"pauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16692,"src":"7627:18:54","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16701,"name":"_vaultBufferPeriodDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17396,"src":"7648:26:54","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"7627:47:54","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"7608:66:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7592:82:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":16705,"name":"pauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16692,"src":"7676:18:54","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"id":16706,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7591:104:54","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint32_$","typeString":"tuple(bool,uint32)"}},"functionReturnParameters":16677,"id":16707,"nodeType":"Return","src":"7584:111:54"}]},"documentation":{"id":16669,"nodeType":"StructuredDocumentation","src":"7129:88:54","text":"@dev Lowest level routine that plucks only the minimum necessary parts from storage."},"id":16709,"implemented":true,"kind":"function","modifiers":[],"name":"_getPoolPausedState","nameLocation":"7231:19:54","nodeType":"FunctionDefinition","parameters":{"id":16672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16671,"mutability":"mutable","name":"pool","nameLocation":"7259:4:54","nodeType":"VariableDeclaration","scope":16709,"src":"7251:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16670,"name":"address","nodeType":"ElementaryTypeName","src":"7251:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7250:14:54"},"returnParameters":{"id":16677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16674,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16709,"src":"7288:4:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16673,"name":"bool","nodeType":"ElementaryTypeName","src":"7288:4:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":16676,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16709,"src":"7294:6:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16675,"name":"uint32","nodeType":"ElementaryTypeName","src":"7294:6:54","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"7287:14:54"},"scope":17227,"src":"7222:480:54","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16716,"nodeType":"Block","src":"8060:61:54","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":16712,"name":"_ensureVaultBuffersAreNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16730,"src":"8070:31:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":16713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8070:33:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16714,"nodeType":"ExpressionStatement","src":"8070:33:54"},{"id":16715,"nodeType":"PlaceholderStatement","src":"8113:1:54"}]},"documentation":{"id":16710,"nodeType":"StructuredDocumentation","src":"7930:85:54","text":"@dev Modifier to make a function callable only when vault buffers are not paused."},"id":16717,"name":"whenVaultBuffersAreNotPaused","nameLocation":"8029:28:54","nodeType":"ModifierDefinition","parameters":{"id":16711,"nodeType":"ParameterList","parameters":[],"src":"8057:2:54"},"src":"8020:101:54","virtual":false,"visibility":"internal"},{"body":{"id":16729,"nodeType":"Block","src":"8234:111:54","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16721,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17399,"src":"8248:15:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}},"id":16722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8264:16:54","memberName":"areBuffersPaused","nodeType":"MemberAccess","referencedDeclaration":20280,"src":"8248:32:54","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VaultStateBits_$20164_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_VaultStateBits_$20164_$","typeString":"function (VaultStateBits) pure returns (bool)"}},"id":16723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8248:34:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16728,"nodeType":"IfStatement","src":"8244:95:54","trueBody":{"id":16727,"nodeType":"Block","src":"8284:55:54","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16724,"name":"VaultBuffersArePaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1310,"src":"8305:21:54","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":16725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8305:23:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16726,"nodeType":"RevertStatement","src":"8298:30:54"}]}}]},"documentation":{"id":16718,"nodeType":"StructuredDocumentation","src":"8127:45:54","text":"@dev Reverts if vault buffers are paused."},"id":16730,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureVaultBuffersAreNotPaused","nameLocation":"8186:31:54","nodeType":"FunctionDefinition","parameters":{"id":16719,"nodeType":"ParameterList","parameters":[],"src":"8217:2:54"},"returnParameters":{"id":16720,"nodeType":"ParameterList","parameters":[],"src":"8234:0:54"},"scope":17227,"src":"8177:168:54","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16740,"nodeType":"Block","src":"8686:55:54","statements":[{"expression":{"arguments":[{"id":16736,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16733,"src":"8718:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16735,"name":"_ensureRegisteredPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16768,"src":"8696:21:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":16737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8696:27:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16738,"nodeType":"ExpressionStatement","src":"8696:27:54"},{"id":16739,"nodeType":"PlaceholderStatement","src":"8733:1:54"}]},"documentation":{"id":16731,"nodeType":"StructuredDocumentation","src":"8587:52:54","text":"@dev Reverts unless `pool` is a registered Pool."},"id":16741,"name":"withRegisteredPool","nameLocation":"8653:18:54","nodeType":"ModifierDefinition","parameters":{"id":16734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16733,"mutability":"mutable","name":"pool","nameLocation":"8680:4:54","nodeType":"VariableDeclaration","scope":16741,"src":"8672:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16732,"name":"address","nodeType":"ElementaryTypeName","src":"8672:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8671:14:54"},"src":"8644:97:54","virtual":false,"visibility":"internal"},{"body":{"id":16751,"nodeType":"Block","src":"8849:56:54","statements":[{"expression":{"arguments":[{"id":16747,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16744,"src":"8882:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16746,"name":"_ensureInitializedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16804,"src":"8859:22:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":16748,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8859:28:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16749,"nodeType":"ExpressionStatement","src":"8859:28:54"},{"id":16750,"nodeType":"PlaceholderStatement","src":"8897:1:54"}]},"documentation":{"id":16742,"nodeType":"StructuredDocumentation","src":"8747:54:54","text":"@dev Reverts unless `pool` is an initialized Pool."},"id":16752,"name":"withInitializedPool","nameLocation":"8815:19:54","nodeType":"ModifierDefinition","parameters":{"id":16745,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16744,"mutability":"mutable","name":"pool","nameLocation":"8843:4:54","nodeType":"VariableDeclaration","scope":16752,"src":"8835:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16743,"name":"address","nodeType":"ElementaryTypeName","src":"8835:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8834:14:54"},"src":"8806:99:54","virtual":false,"visibility":"internal"},{"body":{"id":16767,"nodeType":"Block","src":"8970:101:54","statements":[{"condition":{"id":16760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"8984:24:54","subExpression":{"arguments":[{"id":16758,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16754,"src":"9003:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16757,"name":"_isPoolRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16788,"src":"8985:17:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":16759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8985:23:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16766,"nodeType":"IfStatement","src":"8980:85:54","trueBody":{"id":16765,"nodeType":"Block","src":"9010:55:54","statements":[{"errorCall":{"arguments":[{"id":16762,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16754,"src":"9049:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16761,"name":"PoolNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1025,"src":"9031:17:54","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":16763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9031:23:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16764,"nodeType":"RevertStatement","src":"9024:30:54"}]}}]},"id":16768,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureRegisteredPool","nameLocation":"8920:21:54","nodeType":"FunctionDefinition","parameters":{"id":16755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16754,"mutability":"mutable","name":"pool","nameLocation":"8950:4:54","nodeType":"VariableDeclaration","scope":16768,"src":"8942:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16753,"name":"address","nodeType":"ElementaryTypeName","src":"8942:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8941:14:54"},"returnParameters":{"id":16756,"nodeType":"ParameterList","parameters":[],"src":"8970:0:54"},"scope":17227,"src":"8911:160:54","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16787,"nodeType":"Block","src":"9183:104:54","statements":[{"assignments":[16778],"declarations":[{"constant":false,"id":16778,"mutability":"mutable","name":"config","nameLocation":"9208:6:54","nodeType":"VariableDeclaration","scope":16787,"src":"9193:21:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":16777,"nodeType":"UserDefinedTypeName","pathNode":{"id":16776,"name":"PoolConfigBits","nameLocations":["9193:14:54"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"9193:14:54"},"referencedDeclaration":2184,"src":"9193:14:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"id":16782,"initialValue":{"baseExpression":{"id":16779,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17353,"src":"9217:15:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"mapping(address => PoolConfigBits)"}},"id":16781,"indexExpression":{"id":16780,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16771,"src":"9233:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9217:21:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"nodeType":"VariableDeclarationStatement","src":"9193:45:54"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16783,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16778,"src":"9255:6:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":16784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9262:16:54","memberName":"isPoolRegistered","nodeType":"MemberAccess","referencedDeclaration":18764,"src":"9255:23:54","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":16785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9255:25:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16775,"id":16786,"nodeType":"Return","src":"9248:32:54"}]},"documentation":{"id":16769,"nodeType":"StructuredDocumentation","src":"9077:31:54","text":"@dev See `isPoolRegistered`"},"id":16788,"implemented":true,"kind":"function","modifiers":[],"name":"_isPoolRegistered","nameLocation":"9122:17:54","nodeType":"FunctionDefinition","parameters":{"id":16772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16771,"mutability":"mutable","name":"pool","nameLocation":"9148:4:54","nodeType":"VariableDeclaration","scope":16788,"src":"9140:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16770,"name":"address","nodeType":"ElementaryTypeName","src":"9140:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9139:14:54"},"returnParameters":{"id":16775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16774,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16788,"src":"9177:4:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16773,"name":"bool","nodeType":"ElementaryTypeName","src":"9177:4:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9176:6:54"},"scope":17227,"src":"9113:174:54","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16803,"nodeType":"Block","src":"9353:103:54","statements":[{"condition":{"id":16796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"9367:25:54","subExpression":{"arguments":[{"id":16794,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16790,"src":"9387:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16793,"name":"_isPoolInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16824,"src":"9368:18:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":16795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9368:24:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16802,"nodeType":"IfStatement","src":"9363:87:54","trueBody":{"id":16801,"nodeType":"Block","src":"9394:56:54","statements":[{"errorCall":{"arguments":[{"id":16798,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16790,"src":"9434:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16797,"name":"PoolNotInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1030,"src":"9415:18:54","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":16799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9415:24:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16800,"nodeType":"RevertStatement","src":"9408:31:54"}]}}]},"id":16804,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureInitializedPool","nameLocation":"9302:22:54","nodeType":"FunctionDefinition","parameters":{"id":16791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16790,"mutability":"mutable","name":"pool","nameLocation":"9333:4:54","nodeType":"VariableDeclaration","scope":16804,"src":"9325:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16789,"name":"address","nodeType":"ElementaryTypeName","src":"9325:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9324:14:54"},"returnParameters":{"id":16792,"nodeType":"ParameterList","parameters":[],"src":"9353:0:54"},"scope":17227,"src":"9293:163:54","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16823,"nodeType":"Block","src":"9570:105:54","statements":[{"assignments":[16814],"declarations":[{"constant":false,"id":16814,"mutability":"mutable","name":"config","nameLocation":"9595:6:54","nodeType":"VariableDeclaration","scope":16823,"src":"9580:21:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":16813,"nodeType":"UserDefinedTypeName","pathNode":{"id":16812,"name":"PoolConfigBits","nameLocations":["9580:14:54"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"9580:14:54"},"referencedDeclaration":2184,"src":"9580:14:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"id":16818,"initialValue":{"baseExpression":{"id":16815,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17353,"src":"9604:15:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"mapping(address => PoolConfigBits)"}},"id":16817,"indexExpression":{"id":16816,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16807,"src":"9620:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9604:21:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"nodeType":"VariableDeclarationStatement","src":"9580:45:54"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16819,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16814,"src":"9642:6:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":16820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9649:17:54","memberName":"isPoolInitialized","nodeType":"MemberAccess","referencedDeclaration":18807,"src":"9642:24:54","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":16821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9642:26:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16811,"id":16822,"nodeType":"Return","src":"9635:33:54"}]},"documentation":{"id":16805,"nodeType":"StructuredDocumentation","src":"9462:32:54","text":"@dev See `isPoolInitialized`"},"id":16824,"implemented":true,"kind":"function","modifiers":[],"name":"_isPoolInitialized","nameLocation":"9508:18:54","nodeType":"FunctionDefinition","parameters":{"id":16808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16807,"mutability":"mutable","name":"pool","nameLocation":"9535:4:54","nodeType":"VariableDeclaration","scope":16824,"src":"9527:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16806,"name":"address","nodeType":"ElementaryTypeName","src":"9527:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9526:14:54"},"returnParameters":{"id":16811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16810,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16824,"src":"9564:4:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16809,"name":"bool","nodeType":"ElementaryTypeName","src":"9564:4:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9563:6:54"},"scope":17227,"src":"9499:176:54","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16834,"nodeType":"Block","src":"9967:66:54","statements":[{"expression":{"arguments":[{"id":16830,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16827,"src":"10002:12:54","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}],"id":16829,"name":"_ensureBufferInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16856,"src":"9977:24:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC4626_$6704_$returns$__$","typeString":"function (contract IERC4626) view"}},"id":16831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9977:38:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16832,"nodeType":"ExpressionStatement","src":"9977:38:54"},{"id":16833,"nodeType":"PlaceholderStatement","src":"10025:1:54"}]},"id":16835,"name":"withInitializedBuffer","nameLocation":"9922:21:54","nodeType":"ModifierDefinition","parameters":{"id":16828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16827,"mutability":"mutable","name":"wrappedToken","nameLocation":"9953:12:54","nodeType":"VariableDeclaration","scope":16835,"src":"9944:21:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":16826,"nodeType":"UserDefinedTypeName","pathNode":{"id":16825,"name":"IERC4626","nameLocations":["9944:8:54"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"9944:8:54"},"referencedDeclaration":6704,"src":"9944:8:54","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"9943:23:54"},"src":"9913:120:54","virtual":false,"visibility":"internal"},{"body":{"id":16855,"nodeType":"Block","src":"10110:129:54","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":16848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":16841,"name":"_bufferAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17436,"src":"10124:13:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$6704_$_t_address_$","typeString":"mapping(contract IERC4626 => address)"}},"id":16843,"indexExpression":{"id":16842,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16838,"src":"10138:12:54","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10124:27:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":16846,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10163:1:54","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":16845,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10155:7:54","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16844,"name":"address","nodeType":"ElementaryTypeName","src":"10155:7:54","typeDescriptions":{}}},"id":16847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10155:10:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10124:41:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16854,"nodeType":"IfStatement","src":"10120:113:54","trueBody":{"id":16853,"nodeType":"Block","src":"10167:66:54","statements":[{"errorCall":{"arguments":[{"id":16850,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16838,"src":"10209:12:54","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}],"id":16849,"name":"BufferNotInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1284,"src":"10188:20:54","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC4626_$6704_$returns$_t_error_$","typeString":"function (contract IERC4626) pure returns (error)"}},"id":16851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10188:34:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16852,"nodeType":"RevertStatement","src":"10181:41:54"}]}}]},"id":16856,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureBufferInitialized","nameLocation":"10048:24:54","nodeType":"FunctionDefinition","parameters":{"id":16839,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16838,"mutability":"mutable","name":"wrappedToken","nameLocation":"10082:12:54","nodeType":"VariableDeclaration","scope":16856,"src":"10073:21:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":16837,"nodeType":"UserDefinedTypeName","pathNode":{"id":16836,"name":"IERC4626","nameLocations":["10073:8:54"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"10073:8:54"},"referencedDeclaration":6704,"src":"10073:8:54","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"10072:23:54"},"returnParameters":{"id":16840,"nodeType":"ParameterList","parameters":[],"src":"10110:0:54"},"scope":17227,"src":"10039:200:54","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16877,"nodeType":"Block","src":"10561:218:54","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":16869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":16865,"name":"_bufferAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17436,"src":"10575:13:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$6704_$_t_address_$","typeString":"mapping(contract IERC4626 => address)"}},"id":16867,"indexExpression":{"id":16866,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16860,"src":"10589:12:54","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10575:27:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":16868,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16862,"src":"10606:15:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10575:46:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16876,"nodeType":"IfStatement","src":"10571:202:54","trueBody":{"id":16875,"nodeType":"Block","src":"10623:150:54","statements":[{"errorCall":{"arguments":[{"id":16871,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16860,"src":"10732:12:54","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},{"id":16872,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16862,"src":"10746:15:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},{"typeIdentifier":"t_address","typeString":"address"}],"id":16870,"name":"WrongUnderlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1295,"src":"10711:20:54","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC4626_$6704_$_t_address_$returns$_t_error_$","typeString":"function (contract IERC4626,address) pure returns (error)"}},"id":16873,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10711:51:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16874,"nodeType":"RevertStatement","src":"10704:58:54"}]}}]},"documentation":{"id":16857,"nodeType":"StructuredDocumentation","src":"10245:214:54","text":" @dev This assumes `underlyingToken` is non-zero; should be called by functions that have already ensured the\n buffer has been initialized (e.g., those protected by `withInitializedBuffer`)."},"id":16878,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureCorrectBufferAsset","nameLocation":"10473:25:54","nodeType":"FunctionDefinition","parameters":{"id":16863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16860,"mutability":"mutable","name":"wrappedToken","nameLocation":"10508:12:54","nodeType":"VariableDeclaration","scope":16878,"src":"10499:21:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"},"typeName":{"id":16859,"nodeType":"UserDefinedTypeName","pathNode":{"id":16858,"name":"IERC4626","nameLocations":["10499:8:54"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"10499:8:54"},"referencedDeclaration":6704,"src":"10499:8:54","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":16862,"mutability":"mutable","name":"underlyingToken","nameLocation":"10530:15:54","nodeType":"VariableDeclaration","scope":16878,"src":"10522:23:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16861,"name":"address","nodeType":"ElementaryTypeName","src":"10522:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10498:48:54"},"returnParameters":{"id":16864,"nodeType":"ParameterList","parameters":[],"src":"10561:0:54"},"scope":17227,"src":"10464:315:54","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16925,"nodeType":"Block","src":"11288:435:54","statements":[{"assignments":[16890],"declarations":[{"constant":false,"id":16890,"mutability":"mutable","name":"poolBalances","nameLocation":"11364:12:54","nodeType":"VariableDeclaration","scope":16925,"src":"11298:78:54","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":16889,"keyName":"tokenIndex","keyNameLocation":"11314:10:54","keyType":{"id":16887,"name":"uint256","nodeType":"ElementaryTypeName","src":"11306:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"11298:57:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"11336:18:54","valueType":{"id":16888,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11328:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"}],"id":16894,"initialValue":{"baseExpression":{"id":16891,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17383,"src":"11379:18:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":16893,"indexExpression":{"id":16892,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16881,"src":"11398:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11379:24:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"11298:105:54"},{"body":{"id":16923,"nodeType":"Block","src":"11472:245:54","statements":[{"expression":{"id":16921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":16907,"name":"poolBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"11549:12:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":16909,"indexExpression":{"id":16908,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16896,"src":"11562:1:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11549:15:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":16912,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16884,"src":"11619:8:54","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":16913,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11628:11:54","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":2321,"src":"11619:20:54","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16915,"indexExpression":{"id":16914,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16896,"src":"11640:1:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11619:23:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":16916,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16884,"src":"11660:8:54","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":16917,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11669:20:54","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"11660:29:54","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16919,"indexExpression":{"id":16918,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16896,"src":"11690:1:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11660:32:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16910,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3032,"src":"11567:18:54","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$3032_$","typeString":"type(library PackedTokenBalance)"}},"id":16911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11586:15:54","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":2991,"src":"11567:34:54","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":16920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11567:139:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11549:157:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16922,"nodeType":"ExpressionStatement","src":"11549:157:54"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16899,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16896,"src":"11434:1:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":16900,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16884,"src":"11438:8:54","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":16901,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11447:11:54","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":2321,"src":"11438:20:54","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11459:6:54","memberName":"length","nodeType":"MemberAccess","src":"11438:27:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11434:31:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16924,"initializationExpression":{"assignments":[16896],"declarations":[{"constant":false,"id":16896,"mutability":"mutable","name":"i","nameLocation":"11427:1:54","nodeType":"VariableDeclaration","scope":16924,"src":"11419:9:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16895,"name":"uint256","nodeType":"ElementaryTypeName","src":"11419:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16898,"initialValue":{"hexValue":"30","id":16897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11431:1:54","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11419:13:54"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":16905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11467:3:54","subExpression":{"id":16904,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16896,"src":"11469:1:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16906,"nodeType":"ExpressionStatement","src":"11467:3:54"},"nodeType":"ForStatement","src":"11414:303:54"}]},"documentation":{"id":16879,"nodeType":"StructuredDocumentation","src":"11009:188:54","text":" @dev Packs and sets the raw and live balances of a Pool's tokens to the current values in poolData.balancesRaw\n and poolData.liveBalances in the same storage slot."},"id":16926,"implemented":true,"kind":"function","modifiers":[],"name":"_writePoolBalancesToStorage","nameLocation":"11211:27:54","nodeType":"FunctionDefinition","parameters":{"id":16885,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16881,"mutability":"mutable","name":"pool","nameLocation":"11247:4:54","nodeType":"VariableDeclaration","scope":16926,"src":"11239:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16880,"name":"address","nodeType":"ElementaryTypeName","src":"11239:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16884,"mutability":"mutable","name":"poolData","nameLocation":"11269:8:54","nodeType":"VariableDeclaration","scope":16926,"src":"11253:24:54","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":16883,"nodeType":"UserDefinedTypeName","pathNode":{"id":16882,"name":"PoolData","nameLocations":["11253:8:54"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"11253:8:54"},"referencedDeclaration":2331,"src":"11253:8:54","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"11238:40:54"},"returnParameters":{"id":16886,"nodeType":"ParameterList","parameters":[],"src":"11288:0:54"},"scope":17227,"src":"11202:521:54","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16956,"nodeType":"Block","src":"12550:209:54","statements":[{"expression":{"arguments":[{"baseExpression":{"id":16941,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17383,"src":"12587:18:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":16943,"indexExpression":{"id":16942,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16929,"src":"12606:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12587:24:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},{"baseExpression":{"id":16944,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17353,"src":"12625:15:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"mapping(address => PoolConfigBits)"}},"id":16946,"indexExpression":{"id":16945,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16929,"src":"12641:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12625:21:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},{"baseExpression":{"id":16947,"name":"_poolTokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17377,"src":"12660:14:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6980_$_t_struct$_TokenInfo_$2306_storage_$_$","typeString":"mapping(address => mapping(contract IERC20 => struct TokenInfo storage ref))"}},"id":16949,"indexExpression":{"id":16948,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16929,"src":"12675:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12660:20:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_struct$_TokenInfo_$2306_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo storage ref)"}},{"baseExpression":{"id":16950,"name":"_poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17369,"src":"12694:11:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_IERC20_$6980_$dyn_storage_$","typeString":"mapping(address => contract IERC20[] storage ref)"}},"id":16952,"indexExpression":{"id":16951,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16929,"src":"12706:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12694:17:54","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage","typeString":"contract IERC20[] storage ref"}},{"id":16953,"name":"roundingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16932,"src":"12725:17:54","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_struct$_TokenInfo_$2306_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo storage ref)"},{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage","typeString":"contract IERC20[] storage ref"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"expression":{"id":16938,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16936,"src":"12560:8:54","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":16940,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12569:4:54","memberName":"load","nodeType":"MemberAccess","referencedDeclaration":19831,"src":"12560:13:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PoolData_$2331_memory_ptr_$_t_mapping$_t_uint256_$_t_bytes32_$_$_t_userDefinedValueType$_PoolConfigBits_$2184_$_t_mapping$_t_contract$_IERC20_$6980_$_t_struct$_TokenInfo_$2306_storage_$_$_t_array$_t_contract$_IERC20_$6980_$dyn_storage_ptr_$_t_enum$_Rounding_$2334_$returns$__$attached_to$_t_struct$_PoolData_$2331_memory_ptr_$","typeString":"function (struct PoolData memory,mapping(uint256 => bytes32),PoolConfigBits,mapping(contract IERC20 => struct TokenInfo storage ref),contract IERC20[] storage pointer,enum Rounding) view"}},"id":16954,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12560:192:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16955,"nodeType":"ExpressionStatement","src":"12560:192:54"}]},"documentation":{"id":16927,"nodeType":"StructuredDocumentation","src":"11729:702:54","text":" @dev Fill in PoolData, including paying protocol yield fees and computing final raw and live balances.\n In normal operation, we update both balances and fees together. However, while Recovery Mode is enabled,\n we cannot track yield fees, as that would involve making external calls that could fail and block withdrawals.\n Therefore, disabling Recovery Mode requires writing *only* the balances to storage, so we still need this\n as a separate function. It is normally called by `_loadPoolDataUpdatingBalancesAndYieldFees`, but in the\n Recovery Mode special case, it is called separately, with the result passed into `_writePoolBalancesToStorage`."},"id":16957,"implemented":true,"kind":"function","modifiers":[],"name":"_loadPoolData","nameLocation":"12445:13:54","nodeType":"FunctionDefinition","parameters":{"id":16933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16929,"mutability":"mutable","name":"pool","nameLocation":"12467:4:54","nodeType":"VariableDeclaration","scope":16957,"src":"12459:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16928,"name":"address","nodeType":"ElementaryTypeName","src":"12459:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16932,"mutability":"mutable","name":"roundingDirection","nameLocation":"12482:17:54","nodeType":"VariableDeclaration","scope":16957,"src":"12473:26:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"},"typeName":{"id":16931,"nodeType":"UserDefinedTypeName","pathNode":{"id":16930,"name":"Rounding","nameLocations":["12473:8:54"],"nodeType":"IdentifierPath","referencedDeclaration":2334,"src":"12473:8:54"},"referencedDeclaration":2334,"src":"12473:8:54","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"12458:42:54"},"returnParameters":{"id":16937,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16936,"mutability":"mutable","name":"poolData","nameLocation":"12540:8:54","nodeType":"VariableDeclaration","scope":16957,"src":"12524:24:54","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":16935,"nodeType":"UserDefinedTypeName","pathNode":{"id":16934,"name":"PoolData","nameLocations":["12524:8:54"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"12524:8:54"},"referencedDeclaration":2331,"src":"12524:8:54","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"12523:26:54"},"scope":17227,"src":"12436:323:54","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17001,"nodeType":"Block","src":"13378:401:54","statements":[{"expression":{"arguments":[{"baseExpression":{"id":16974,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17383,"src":"13497:18:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":16976,"indexExpression":{"id":16975,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16960,"src":"13516:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13497:24:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},{"baseExpression":{"id":16977,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17353,"src":"13535:15:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"mapping(address => PoolConfigBits)"}},"id":16979,"indexExpression":{"id":16978,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16960,"src":"13551:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13535:21:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},{"baseExpression":{"id":16980,"name":"_poolTokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17377,"src":"13570:14:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6980_$_t_struct$_TokenInfo_$2306_storage_$_$","typeString":"mapping(address => mapping(contract IERC20 => struct TokenInfo storage ref))"}},"id":16982,"indexExpression":{"id":16981,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16960,"src":"13585:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13570:20:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_struct$_TokenInfo_$2306_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo storage ref)"}},{"baseExpression":{"id":16983,"name":"_poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17369,"src":"13604:11:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_IERC20_$6980_$dyn_storage_$","typeString":"mapping(address => contract IERC20[] storage ref)"}},"id":16985,"indexExpression":{"id":16984,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16960,"src":"13616:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13604:17:54","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage","typeString":"contract IERC20[] storage ref"}},{"id":16986,"name":"roundingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16963,"src":"13635:17:54","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_struct$_TokenInfo_$2306_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo storage ref)"},{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage","typeString":"contract IERC20[] storage ref"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"expression":{"id":16971,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16969,"src":"13470:8:54","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":16973,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13479:4:54","memberName":"load","nodeType":"MemberAccess","referencedDeclaration":19831,"src":"13470:13:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PoolData_$2331_memory_ptr_$_t_mapping$_t_uint256_$_t_bytes32_$_$_t_userDefinedValueType$_PoolConfigBits_$2184_$_t_mapping$_t_contract$_IERC20_$6980_$_t_struct$_TokenInfo_$2306_storage_$_$_t_array$_t_contract$_IERC20_$6980_$dyn_storage_ptr_$_t_enum$_Rounding_$2334_$returns$__$attached_to$_t_struct$_PoolData_$2331_memory_ptr_$","typeString":"function (struct PoolData memory,mapping(uint256 => bytes32),PoolConfigBits,mapping(contract IERC20 => struct TokenInfo storage ref),contract IERC20[] storage pointer,enum Rounding) view"}},"id":16987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13470:192:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16988,"nodeType":"ExpressionStatement","src":"13470:192:54"},{"expression":{"arguments":[{"id":16992,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16969,"src":"13709:8:54","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},{"baseExpression":{"id":16993,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17383,"src":"13719:18:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":16995,"indexExpression":{"id":16994,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16960,"src":"13738:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13719:24:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},{"baseExpression":{"id":16996,"name":"_aggregateFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17390,"src":"13745:20:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6980_$_t_bytes32_$_$","typeString":"mapping(address => mapping(contract IERC20 => bytes32))"}},"id":16998,"indexExpression":{"id":16997,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16960,"src":"13766:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13745:26:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}],"expression":{"id":16989,"name":"PoolDataLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20158,"src":"13673:11:54","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolDataLib_$20158_$","typeString":"type(library PoolDataLib)"}},"id":16991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13685:23:54","memberName":"syncPoolBalancesAndFees","nodeType":"MemberAccess","referencedDeclaration":19934,"src":"13673:35:54","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PoolData_$2331_memory_ptr_$_t_mapping$_t_uint256_$_t_bytes32_$_$_t_mapping$_t_contract$_IERC20_$6980_$_t_bytes32_$_$returns$__$","typeString":"function (struct PoolData memory,mapping(uint256 => bytes32),mapping(contract IERC20 => bytes32))"}},"id":16999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13673:99:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17000,"nodeType":"ExpressionStatement","src":"13673:99:54"}]},"documentation":{"id":16958,"nodeType":"StructuredDocumentation","src":"12765:436:54","text":" @dev Fill in PoolData, including paying protocol yield fees and computing final raw and live balances.\n This function modifies protocol fees and balance storage. Out of an abundance of caution, since `_loadPoolData`\n makes external calls, we are making anything that calls it and then modifies storage non-reentrant.\n Side effects: updates `_aggregateFeeAmounts` and `_poolTokenBalances` in storage."},"id":17002,"implemented":true,"kind":"function","modifiers":[{"id":16966,"kind":"modifierInvocation","modifierName":{"id":16965,"name":"nonReentrant","nameLocations":["13330:12:54"],"nodeType":"IdentifierPath","referencedDeclaration":6146,"src":"13330:12:54"},"nodeType":"ModifierInvocation","src":"13330:12:54"}],"name":"_loadPoolDataUpdatingBalancesAndYieldFees","nameLocation":"13215:41:54","nodeType":"FunctionDefinition","parameters":{"id":16964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16960,"mutability":"mutable","name":"pool","nameLocation":"13274:4:54","nodeType":"VariableDeclaration","scope":17002,"src":"13266:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16959,"name":"address","nodeType":"ElementaryTypeName","src":"13266:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16963,"mutability":"mutable","name":"roundingDirection","nameLocation":"13297:17:54","nodeType":"VariableDeclaration","scope":17002,"src":"13288:26:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"},"typeName":{"id":16962,"nodeType":"UserDefinedTypeName","pathNode":{"id":16961,"name":"Rounding","nameLocations":["13288:8:54"],"nodeType":"IdentifierPath","referencedDeclaration":2334,"src":"13288:8:54"},"referencedDeclaration":2334,"src":"13288:8:54","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"13256:64:54"},"returnParameters":{"id":16970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16969,"mutability":"mutable","name":"poolData","nameLocation":"13368:8:54","nodeType":"VariableDeclaration","scope":17002,"src":"13352:24:54","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":16968,"nodeType":"UserDefinedTypeName","pathNode":{"id":16967,"name":"PoolData","nameLocations":["13352:8:54"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"13352:8:54"},"referencedDeclaration":2331,"src":"13352:8:54","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"13351:26:54"},"scope":17227,"src":"13206:573:54","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17078,"nodeType":"Block","src":"14277:641:54","statements":[{"expression":{"id":17024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17018,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17006,"src":"14287:8:54","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":17021,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14296:11:54","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":2321,"src":"14287:20:54","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17022,"indexExpression":{"id":17020,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17013,"src":"14308:10:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14287:32:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17023,"name":"newRawBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17008,"src":"14322:13:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14287:48:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17025,"nodeType":"ExpressionStatement","src":"14287:48:54"},{"assignments":[17037],"declarations":[{"constant":false,"id":17037,"mutability":"mutable","name":"_upOrDown","nameLocation":"14414:9:54","nodeType":"VariableDeclaration","scope":17078,"src":"14346:77:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"},"typeName":{"id":17036,"nodeType":"FunctionTypeName","parameterTypes":{"id":17032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17027,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17036,"src":"14355:7:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17026,"name":"uint256","nodeType":"ElementaryTypeName","src":"14355:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17029,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17036,"src":"14364:7:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17028,"name":"uint256","nodeType":"ElementaryTypeName","src":"14364:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17031,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17036,"src":"14373:7:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17030,"name":"uint256","nodeType":"ElementaryTypeName","src":"14373:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14354:27:54"},"returnParameterTypes":{"id":17035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17034,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17036,"src":"14405:7:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17033,"name":"uint256","nodeType":"ElementaryTypeName","src":"14405:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14404:9:54"},"src":"14346:77:54","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"},"visibility":"internal"},"visibility":"internal"}],"id":17047,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"},"id":17041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17038,"name":"roundingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17011,"src":"14426:17:54","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":17039,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"14459:8:54","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2334_$","typeString":"type(enum Rounding)"}},"id":17040,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14468:8:54","memberName":"ROUND_UP","nodeType":"MemberAccess","referencedDeclaration":2332,"src":"14459:17:54","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}},"src":"14426:50:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":17044,"name":"ScalingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"14547:14:54","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ScalingHelpers_$3446_$","typeString":"type(library ScalingHelpers)"}},"id":17045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14562:28:54","memberName":"toScaled18ApplyRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":3065,"src":"14547:43:54","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":17046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"14426:164:54","trueExpression":{"expression":{"id":17042,"name":"ScalingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"14491:14:54","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ScalingHelpers_$3446_$","typeString":"type(library ScalingHelpers)"}},"id":17043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14506:26:54","memberName":"toScaled18ApplyRateRoundUp","nodeType":"MemberAccess","referencedDeclaration":3086,"src":"14491:41:54","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"nodeType":"VariableDeclarationStatement","src":"14346:244:54"},{"expression":{"id":17064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17048,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17006,"src":"14601:8:54","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":17051,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14610:20:54","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"14601:29:54","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17052,"indexExpression":{"id":17050,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17013,"src":"14631:10:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14601:41:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17054,"name":"newRawBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17008,"src":"14668:13:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":17055,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17006,"src":"14695:8:54","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":17056,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14704:21:54","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":2330,"src":"14695:30:54","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17058,"indexExpression":{"id":17057,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17013,"src":"14726:10:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14695:42:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":17059,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17006,"src":"14751:8:54","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":17060,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14760:10:54","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":2327,"src":"14751:19:54","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17062,"indexExpression":{"id":17061,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17013,"src":"14771:10:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14751:31:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17053,"name":"_upOrDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17037,"src":"14645:9:54","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":17063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14645:147:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14601:191:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17065,"nodeType":"ExpressionStatement","src":"14601:191:54"},{"expression":{"arguments":[{"id":17067,"name":"newRawBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17008,"src":"14820:13:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":17068,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17006,"src":"14835:8:54","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":17069,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14844:21:54","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":2330,"src":"14835:30:54","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17071,"indexExpression":{"id":17070,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17013,"src":"14866:10:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14835:42:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":17072,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17006,"src":"14879:8:54","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":17073,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14888:10:54","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":2327,"src":"14879:19:54","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17075,"indexExpression":{"id":17074,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17013,"src":"14899:10:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14879:31:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17066,"name":"_upOrDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17037,"src":"14810:9:54","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":17076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14810:101:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17017,"id":17077,"nodeType":"Return","src":"14803:108:54"}]},"documentation":{"id":17003,"nodeType":"StructuredDocumentation","src":"13785:270:54","text":" @dev Updates the raw and live balance of a given token in poolData, scaling the given raw balance by both decimal\n and token rates, and rounding the result in the given direction. Assumes scaling factors and rates are current\n in PoolData."},"id":17079,"implemented":true,"kind":"function","modifiers":[],"name":"_updateRawAndLiveTokenBalancesInPoolData","nameLocation":"14069:40:54","nodeType":"FunctionDefinition","parameters":{"id":17014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17006,"mutability":"mutable","name":"poolData","nameLocation":"14135:8:54","nodeType":"VariableDeclaration","scope":17079,"src":"14119:24:54","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":17005,"nodeType":"UserDefinedTypeName","pathNode":{"id":17004,"name":"PoolData","nameLocations":["14119:8:54"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"14119:8:54"},"referencedDeclaration":2331,"src":"14119:8:54","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":17008,"mutability":"mutable","name":"newRawBalance","nameLocation":"14161:13:54","nodeType":"VariableDeclaration","scope":17079,"src":"14153:21:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17007,"name":"uint256","nodeType":"ElementaryTypeName","src":"14153:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17011,"mutability":"mutable","name":"roundingDirection","nameLocation":"14193:17:54","nodeType":"VariableDeclaration","scope":17079,"src":"14184:26:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"},"typeName":{"id":17010,"nodeType":"UserDefinedTypeName","pathNode":{"id":17009,"name":"Rounding","nameLocations":["14184:8:54"],"nodeType":"IdentifierPath","referencedDeclaration":2334,"src":"14184:8:54"},"referencedDeclaration":2334,"src":"14184:8:54","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}},"visibility":"internal"},{"constant":false,"id":17013,"mutability":"mutable","name":"tokenIndex","nameLocation":"14228:10:54","nodeType":"VariableDeclaration","scope":17079,"src":"14220:18:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17012,"name":"uint256","nodeType":"ElementaryTypeName","src":"14220:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14109:135:54"},"returnParameters":{"id":17017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17016,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17079,"src":"14268:7:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17015,"name":"uint256","nodeType":"ElementaryTypeName","src":"14268:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14267:9:54"},"scope":17227,"src":"14060:858:54","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17126,"nodeType":"Block","src":"15011:692:54","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17086,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17083,"src":"15132:17:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":17088,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17081,"src":"15177:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17087,"name":"ISwapFeePercentageBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":659,"src":"15152:24:54","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISwapFeePercentageBounds_$659_$","typeString":"type(contract ISwapFeePercentageBounds)"}},"id":17089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15152:30:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISwapFeePercentageBounds_$659","typeString":"contract ISwapFeePercentageBounds"}},"id":17090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15183:27:54","memberName":"getMinimumSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":652,"src":"15152:58:54","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":17091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15152:60:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15132:80:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17097,"nodeType":"IfStatement","src":"15128:143:54","trueBody":{"id":17096,"nodeType":"Block","src":"15214:57:54","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17093,"name":"SwapFeePercentageTooLow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1212,"src":"15235:23:54","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15235:25:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17095,"nodeType":"RevertStatement","src":"15228:32:54"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17098,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17083,"src":"15285:17:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":17100,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17081,"src":"15330:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17099,"name":"ISwapFeePercentageBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":659,"src":"15305:24:54","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISwapFeePercentageBounds_$659_$","typeString":"type(contract ISwapFeePercentageBounds)"}},"id":17101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15305:30:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISwapFeePercentageBounds_$659","typeString":"contract ISwapFeePercentageBounds"}},"id":17102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15336:27:54","memberName":"getMaximumSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":658,"src":"15305:58:54","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":17103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15305:60:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15285:80:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17109,"nodeType":"IfStatement","src":"15281:144:54","trueBody":{"id":17108,"nodeType":"Block","src":"15367:58:54","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17105,"name":"SwapFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1215,"src":"15388:24:54","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17106,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15388:26:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17107,"nodeType":"RevertStatement","src":"15381:33:54"}]}},{"expression":{"id":17119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17110,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17353,"src":"15540:15:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"mapping(address => PoolConfigBits)"}},"id":17112,"indexExpression":{"id":17111,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17081,"src":"15556:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15540:21:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17117,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17083,"src":"15613:17:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":17113,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17353,"src":"15564:15:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"mapping(address => PoolConfigBits)"}},"id":17115,"indexExpression":{"id":17114,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17081,"src":"15580:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15564:21:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":17116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15586:26:54","memberName":"setStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":19228,"src":"15564:48:54","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$_t_uint256_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits,uint256) pure returns (PoolConfigBits)"}},"id":17118,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15564:67:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"src":"15540:91:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":17120,"nodeType":"ExpressionStatement","src":"15540:91:54"},{"eventCall":{"arguments":[{"id":17122,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17081,"src":"15672:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17123,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17083,"src":"15678:17:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17121,"name":"SwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1517,"src":"15647:24:54","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":17124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15647:49:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17125,"nodeType":"EmitStatement","src":"15642:54:54"}]},"id":17127,"implemented":true,"kind":"function","modifiers":[],"name":"_setStaticSwapFeePercentage","nameLocation":"14933:27:54","nodeType":"FunctionDefinition","parameters":{"id":17084,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17081,"mutability":"mutable","name":"pool","nameLocation":"14969:4:54","nodeType":"VariableDeclaration","scope":17127,"src":"14961:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17080,"name":"address","nodeType":"ElementaryTypeName","src":"14961:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17083,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"14983:17:54","nodeType":"VariableDeclaration","scope":17127,"src":"14975:25:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17082,"name":"uint256","nodeType":"ElementaryTypeName","src":"14975:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14960:41:54"},"returnParameters":{"id":17085,"nodeType":"ParameterList","parameters":[],"src":"15011:0:54"},"scope":17227,"src":"14924:779:54","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17166,"nodeType":"Block","src":"15883:192:54","statements":[{"body":{"id":17160,"nodeType":"Block","src":"15937:89:54","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"id":17155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":17151,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17132,"src":"15955:6:54","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":17153,"indexExpression":{"id":17152,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17141,"src":"15962:1:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15955:9:54","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":17154,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17135,"src":"15968:5:54","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"src":"15955:18:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17159,"nodeType":"IfStatement","src":"15951:65:54","trueBody":{"id":17158,"nodeType":"Block","src":"15975:41:54","statements":[{"expression":{"id":17156,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17141,"src":"16000:1:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17139,"id":17157,"nodeType":"Return","src":"15993:8:54"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17144,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17141,"src":"15913:1:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":17145,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17132,"src":"15917:6:54","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":17146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15924:6:54","memberName":"length","nodeType":"MemberAccess","src":"15917:13:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15913:17:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17161,"initializationExpression":{"assignments":[17141],"declarations":[{"constant":false,"id":17141,"mutability":"mutable","name":"i","nameLocation":"15906:1:54","nodeType":"VariableDeclaration","scope":17161,"src":"15898:9:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17140,"name":"uint256","nodeType":"ElementaryTypeName","src":"15898:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17143,"initialValue":{"hexValue":"30","id":17142,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15910:1:54","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15898:13:54"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":17149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"15932:3:54","subExpression":{"id":17148,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17141,"src":"15932:1:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17150,"nodeType":"ExpressionStatement","src":"15932:3:54"},"nodeType":"ForStatement","src":"15893:133:54"},{"errorCall":{"arguments":[{"id":17163,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17135,"src":"16062:5:54","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}],"id":17162,"name":"TokenNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1120,"src":"16043:18:54","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$6980_$returns$_t_error_$","typeString":"function (contract IERC20) pure returns (error)"}},"id":17164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16043:25:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17165,"nodeType":"RevertStatement","src":"16036:32:54"}]},"documentation":{"id":17128,"nodeType":"StructuredDocumentation","src":"15709:74:54","text":"@dev Find the index of a token in a token array. Reverts if not found."},"id":17167,"implemented":true,"kind":"function","modifiers":[],"name":"_findTokenIndex","nameLocation":"15797:15:54","nodeType":"FunctionDefinition","parameters":{"id":17136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17132,"mutability":"mutable","name":"tokens","nameLocation":"15829:6:54","nodeType":"VariableDeclaration","scope":17167,"src":"15813:22:54","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":17130,"nodeType":"UserDefinedTypeName","pathNode":{"id":17129,"name":"IERC20","nameLocations":["15813:6:54"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"15813:6:54"},"referencedDeclaration":6980,"src":"15813:6:54","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":17131,"nodeType":"ArrayTypeName","src":"15813:8:54","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":17135,"mutability":"mutable","name":"token","nameLocation":"15844:5:54","nodeType":"VariableDeclaration","scope":17167,"src":"15837:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":17134,"nodeType":"UserDefinedTypeName","pathNode":{"id":17133,"name":"IERC20","nameLocations":["15837:6:54"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"15837:6:54"},"referencedDeclaration":6980,"src":"15837:6:54","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"15812:38:54"},"returnParameters":{"id":17139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17138,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17167,"src":"15874:7:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17137,"name":"uint256","nodeType":"ElementaryTypeName","src":"15874:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15873:9:54"},"scope":17227,"src":"15788:287:54","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17177,"nodeType":"Block","src":"16446:59:54","statements":[{"expression":{"arguments":[{"id":17173,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17170,"src":"16482:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17172,"name":"_ensurePoolInRecoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17195,"src":"16456:25:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":17174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16456:31:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17175,"nodeType":"ExpressionStatement","src":"16456:31:54"},{"id":17176,"nodeType":"PlaceholderStatement","src":"16497:1:54"}]},"documentation":{"id":17168,"nodeType":"StructuredDocumentation","src":"16302:97:54","text":"@dev Place on functions that may only be called when the associated pool is in recovery mode."},"id":17178,"name":"onlyInRecoveryMode","nameLocation":"16413:18:54","nodeType":"ModifierDefinition","parameters":{"id":17171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17170,"mutability":"mutable","name":"pool","nameLocation":"16440:4:54","nodeType":"VariableDeclaration","scope":17178,"src":"16432:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17169,"name":"address","nodeType":"ElementaryTypeName","src":"16432:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16431:14:54"},"src":"16404:101:54","virtual":false,"visibility":"internal"},{"body":{"id":17194,"nodeType":"Block","src":"16632:109:54","statements":[{"condition":{"id":17187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"16646:28:54","subExpression":{"arguments":[{"id":17185,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17181,"src":"16669:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17184,"name":"_isPoolInRecoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17210,"src":"16647:21:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":17186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16647:27:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17193,"nodeType":"IfStatement","src":"16642:93:54","trueBody":{"id":17192,"nodeType":"Block","src":"16676:59:54","statements":[{"errorCall":{"arguments":[{"id":17189,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17181,"src":"16719:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17188,"name":"PoolNotInRecoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1237,"src":"16697:21:54","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":17190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16697:27:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17191,"nodeType":"RevertStatement","src":"16690:34:54"}]}}]},"documentation":{"id":17179,"nodeType":"StructuredDocumentation","src":"16511:53:54","text":"@dev Reverts if the pool is not in recovery mode."},"id":17195,"implemented":true,"kind":"function","modifiers":[],"name":"_ensurePoolInRecoveryMode","nameLocation":"16578:25:54","nodeType":"FunctionDefinition","parameters":{"id":17182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17181,"mutability":"mutable","name":"pool","nameLocation":"16612:4:54","nodeType":"VariableDeclaration","scope":17195,"src":"16604:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17180,"name":"address","nodeType":"ElementaryTypeName","src":"16604:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16603:14:54"},"returnParameters":{"id":17183,"nodeType":"ParameterList","parameters":[],"src":"16632:0:54"},"scope":17227,"src":"16569:172:54","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17209,"nodeType":"Block","src":"17027:68:54","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":17203,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17353,"src":"17044:15:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"mapping(address => PoolConfigBits)"}},"id":17205,"indexExpression":{"id":17204,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17198,"src":"17060:4:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17044:21:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":17206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17066:20:54","memberName":"isPoolInRecoveryMode","nodeType":"MemberAccess","referencedDeclaration":18893,"src":"17044:42:54","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":17207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17044:44:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17202,"id":17208,"nodeType":"Return","src":"17037:51:54"}]},"documentation":{"id":17196,"nodeType":"StructuredDocumentation","src":"16747:201:54","text":" @notice Checks whether a pool is in recovery mode.\n @param pool Address of the pool to check\n @return inRecoveryMode True if the pool is in recovery mode, false otherwise"},"id":17210,"implemented":true,"kind":"function","modifiers":[],"name":"_isPoolInRecoveryMode","nameLocation":"16962:21:54","nodeType":"FunctionDefinition","parameters":{"id":17199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17198,"mutability":"mutable","name":"pool","nameLocation":"16992:4:54","nodeType":"VariableDeclaration","scope":17210,"src":"16984:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17197,"name":"address","nodeType":"ElementaryTypeName","src":"16984:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16983:14:54"},"returnParameters":{"id":17202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17201,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17210,"src":"17021:4:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17200,"name":"bool","nodeType":"ElementaryTypeName","src":"17021:4:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"17020:6:54"},"scope":17227,"src":"16953:142:54","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17225,"nodeType":"Block","src":"17157:103:54","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17215,"name":"EVMCallModeHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2639,"src":"17174:18:54","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_EVMCallModeHelpers_$2639_$","typeString":"type(library EVMCallModeHelpers)"}},"id":17216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17193:12:54","memberName":"isStaticCall","nodeType":"MemberAccess","referencedDeclaration":2638,"src":"17174:31:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":17217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17174:33:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17218,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17399,"src":"17211:15:54","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}},"id":17219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17227:15:54","memberName":"isQueryDisabled","nodeType":"MemberAccess","referencedDeclaration":20198,"src":"17211:31:54","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VaultStateBits_$20164_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_VaultStateBits_$20164_$","typeString":"function (VaultStateBits) pure returns (bool)"}},"id":17220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17211:33:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":17221,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17248:5:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"17211:42:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17174:79:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17214,"id":17224,"nodeType":"Return","src":"17167:86:54"}]},"id":17226,"implemented":true,"kind":"function","modifiers":[],"name":"_isQueryContext","nameLocation":"17110:15:54","nodeType":"FunctionDefinition","parameters":{"id":17211,"nodeType":"ParameterList","parameters":[],"src":"17125:2:54"},"returnParameters":{"id":17214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17213,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17226,"src":"17151:4:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17212,"name":"bool","nodeType":"ElementaryTypeName","src":"17151:4:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"17150:6:54"},"scope":17227,"src":"17101:159:54","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":17228,"src":"1998:15264:54","usedErrors":[97,1015,1020,1025,1030,1039,1045,1048,1051,1054,1057,1060,1063,1072,1075,1078,1081,1084,1087,1090,1093,1096,1099,1102,1105,1108,1111,1114,1120,1127,1134,1137,1140,1150,1160,1167,1170,1173,1176,1186,1196,1203,1206,1209,1212,1215,1218,1221,1224,1227,1232,1237,1242,1245,1248,1251,1254,1257,1262,1267,1272,1278,1284,1287,1295,1301,1307,1310,1313,1316,1321,1331,1341,1348,1351,1354,1357,1360,1363,1366,1369,6135,6741,6746,6751,6760,6765,6770],"usedEvents":[1408,1413,1432,1444,1456,1474,1492,1497,1500,1503,1510,1517,1524,1531,1538,1544,1550,1562,1572,1582,1594,1599,1608,20334,20345]}],"src":"46:17217:54"},"id":54},"contracts/VaultGuard.sol":{"ast":{"absolutePath":"contracts/VaultGuard.sol","exportedSymbols":{"IVault":[713],"IVaultErrors":[1370],"VaultGuard":[17276]},"id":17277,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":17229,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:55"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":17231,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17277,"sourceUnit":1371,"src":"72:93:55","symbolAliases":[{"foreign":{"id":17230,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"81:12:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":17233,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17277,"sourceUnit":714,"src":"166:81:55","symbolAliases":[{"foreign":{"id":17232,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":713,"src":"175:6:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"VaultGuard","contractDependencies":[],"contractKind":"contract","documentation":{"id":17234,"nodeType":"StructuredDocumentation","src":"249:59:55","text":"@notice Contract that shares the modifier `onlyVault`."},"fullyImplemented":true,"id":17276,"linearizedBaseContracts":[17276],"name":"VaultGuard","nameLocation":"317:10:55","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":17237,"mutability":"immutable","name":"_vault","nameLocation":"360:6:55","nodeType":"VariableDeclaration","scope":17276,"src":"334:32:55","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"},"typeName":{"id":17236,"nodeType":"UserDefinedTypeName","pathNode":{"id":17235,"name":"IVault","nameLocations":["334:6:55"],"nodeType":"IdentifierPath","referencedDeclaration":713,"src":"334:6:55"},"referencedDeclaration":713,"src":"334:6:55","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}},"visibility":"internal"},{"body":{"id":17247,"nodeType":"Block","src":"399:31:55","statements":[{"expression":{"id":17245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17243,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17237,"src":"409:6:55","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17244,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17240,"src":"418:5:55","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}},"src":"409:14:55","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}},"id":17246,"nodeType":"ExpressionStatement","src":"409:14:55"}]},"id":17248,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":17241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17240,"mutability":"mutable","name":"vault","nameLocation":"392:5:55","nodeType":"VariableDeclaration","scope":17248,"src":"385:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"},"typeName":{"id":17239,"nodeType":"UserDefinedTypeName","pathNode":{"id":17238,"name":"IVault","nameLocations":["385:6:55"],"nodeType":"IdentifierPath","referencedDeclaration":713,"src":"385:6:55"},"referencedDeclaration":713,"src":"385:6:55","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}},"visibility":"internal"}],"src":"384:14:55"},"returnParameters":{"id":17242,"nodeType":"ParameterList","parameters":[],"src":"399:0:55"},"scope":17276,"src":"373:57:55","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":17254,"nodeType":"Block","src":"457:46:55","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":17250,"name":"_ensureOnlyVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17275,"src":"467:16:55","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":17251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"467:18:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17252,"nodeType":"ExpressionStatement","src":"467:18:55"},{"id":17253,"nodeType":"PlaceholderStatement","src":"495:1:55"}]},"id":17255,"name":"onlyVault","nameLocation":"445:9:55","nodeType":"ModifierDefinition","parameters":{"id":17249,"nodeType":"ParameterList","parameters":[],"src":"454:2:55"},"src":"436:67:55","virtual":false,"visibility":"internal"},{"body":{"id":17274,"nodeType":"Block","src":"550:124:55","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17258,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"564:3:55","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"568:6:55","memberName":"sender","nodeType":"MemberAccess","src":"564:10:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":17262,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17237,"src":"586:6:55","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$713","typeString":"contract IVault"}],"id":17261,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"578:7:55","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17260,"name":"address","nodeType":"ElementaryTypeName","src":"578:7:55","typeDescriptions":{}}},"id":17263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"578:15:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"564:29:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17273,"nodeType":"IfStatement","src":"560:108:55","trueBody":{"id":17272,"nodeType":"Block","src":"595:73:55","statements":[{"errorCall":{"arguments":[{"expression":{"id":17268,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"646:3:55","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"650:6:55","memberName":"sender","nodeType":"MemberAccess","src":"646:10:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17265,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"616:12:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":17267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"629:16:55","memberName":"SenderIsNotVault","nodeType":"MemberAccess","referencedDeclaration":1242,"src":"616:29:55","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":17270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"616:41:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17271,"nodeType":"RevertStatement","src":"609:48:55"}]}}]},"id":17275,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureOnlyVault","nameLocation":"518:16:55","nodeType":"FunctionDefinition","parameters":{"id":17256,"nodeType":"ParameterList","parameters":[],"src":"534:2:55"},"returnParameters":{"id":17257,"nodeType":"ParameterList","parameters":[],"src":"550:0:55"},"scope":17276,"src":"509:165:55","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":17277,"src":"308:368:55","usedErrors":[],"usedEvents":[]}],"src":"46:631:55"},"id":55},"contracts/VaultStorage.sol":{"ast":{"absolutePath":"contracts/VaultStorage.sol","exportedSymbols":{"AddLiquidityKind":[2409],"AddLiquidityParams":[2425],"AfterSwapParams":[2403],"BufferWrapOrUnwrapParams":[2464],"FEE_BITLENGTH":[2467],"FEE_SCALING_FACTOR":[2470],"HookFlags":[2229],"HooksConfig":[2253],"IAuthorizer":[40],"IERC20":[6980],"IERC4626":[6704],"IHooks":[300],"IProtocolFeeController":[643],"IRateProvider":[24],"IVaultExtension":[2028],"LiquidityManagement":[2182],"MAX_FEE_PERCENTAGE":[2473],"PoolConfig":[2207],"PoolConfigBits":[2184],"PoolData":[2331],"PoolRoleAccounts":[2279],"PoolSwapParams":[2374],"RemoveLiquidityKind":[2430],"RemoveLiquidityParams":[2446],"Rounding":[2334],"StorageSlotExtension":[6534],"SwapKind":[2337],"SwapState":[2263],"TokenConfig":[2296],"TokenDeltaMappingSlotType":[3456],"TokenInfo":[2306],"TokenType":[2283],"TransientStorageHelpers":[4040],"UintToAddressToBooleanMappingSlot":[3460],"VaultState":[2271],"VaultStateBits":[20164],"VaultStorage":[17511],"VaultSwapParams":[2356],"WrappingDirection":[2449]},"id":17512,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":17278,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:56"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":17280,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17512,"sourceUnit":6981,"src":"72:72:56","symbolAliases":[{"foreign":{"id":17279,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"81:6:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":17282,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17512,"sourceUnit":644,"src":"146:113:56","symbolAliases":[{"foreign":{"id":17281,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":643,"src":"155:22:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","id":17284,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17512,"sourceUnit":2029,"src":"260:99:56","symbolAliases":[{"foreign":{"id":17283,"name":"IVaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2028,"src":"269:15:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":17286,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17512,"sourceUnit":41,"src":"360:91:56","symbolAliases":[{"foreign":{"id":17285,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40,"src":"369:11:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","id":17288,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17512,"sourceUnit":301,"src":"452:81:56","symbolAliases":[{"foreign":{"id":17287,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":300,"src":"461:6:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":17289,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17512,"sourceUnit":2474,"src":"534:69:56","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","id":17291,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17512,"sourceUnit":6535,"src":"605:120:56","symbolAliases":[{"foreign":{"id":17290,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6534,"src":"614:20:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","id":17295,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17512,"sourceUnit":4041,"src":"726:195:56","symbolAliases":[{"foreign":{"id":17292,"name":"TransientStorageHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4040,"src":"739:23:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":17293,"name":"TokenDeltaMappingSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3456,"src":"768:25:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":17294,"name":"UintToAddressToBooleanMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3460,"src":"799:33:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/lib/VaultStateLib.sol","file":"./lib/VaultStateLib.sol","id":17297,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17512,"sourceUnit":20306,"src":"923:57:56","symbolAliases":[{"foreign":{"id":17296,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20164,"src":"932:14:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/lib/PoolConfigLib.sol","file":"./lib/PoolConfigLib.sol","id":17299,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17512,"sourceUnit":19569,"src":"981:57:56","symbolAliases":[{"foreign":{"id":17298,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"990:14:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"VaultStorage","contractDependencies":[],"contractKind":"contract","documentation":{"id":17300,"nodeType":"StructuredDocumentation","src":"1077:299:56","text":" @notice Storage layout for the Vault.\n @dev This contract has no code, but is inherited by all three Vault contracts. In order to ensure that *only* the\n Vault contract's storage is actually used, calls to the extension contracts must be delegate calls made through the\n main Vault."},"fullyImplemented":true,"id":17511,"linearizedBaseContracts":[17511],"name":"VaultStorage","nameLocation":"1386:12:56","nodeType":"ContractDefinition","nodes":[{"global":false,"id":17302,"libraryName":{"id":17301,"name":"StorageSlotExtension","nameLocations":["1411:20:56"],"nodeType":"IdentifierPath","referencedDeclaration":6534,"src":"1411:20:56"},"nodeType":"UsingForDirective","src":"1405:33:56"},{"constant":true,"id":17305,"mutability":"constant","name":"_MIN_TOKENS","nameLocation":"1732:11:56","nodeType":"VariableDeclaration","scope":17511,"src":"1706:41:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17303,"name":"uint256","nodeType":"ElementaryTypeName","src":"1706:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":17304,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1746:1:56","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"internal"},{"constant":true,"id":17308,"mutability":"constant","name":"_MAX_TOKENS","nameLocation":"1899:11:56","nodeType":"VariableDeclaration","scope":17511,"src":"1873:41:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17306,"name":"uint256","nodeType":"ElementaryTypeName","src":"1873:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"38","id":17307,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1913:1:56","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"visibility":"internal"},{"constant":true,"id":17311,"mutability":"constant","name":"_MAX_TOKEN_DECIMALS","nameLocation":"2058:19:56","nodeType":"VariableDeclaration","scope":17511,"src":"2034:48:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":17309,"name":"uint8","nodeType":"ElementaryTypeName","src":"2034:5:56","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"3138","id":17310,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2080:2:56","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"visibility":"internal"},{"constant":true,"id":17316,"mutability":"constant","name":"_MAX_PAUSE_WINDOW_DURATION","nameLocation":"2165:26:56","nodeType":"VariableDeclaration","scope":17511,"src":"2139:67:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17312,"name":"uint256","nodeType":"ElementaryTypeName","src":"2139:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_rational_126144000_by_1","typeString":"int_const 126144000"},"id":17315,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"333635","id":17313,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2194:8:56","subdenomination":"days","typeDescriptions":{"typeIdentifier":"t_rational_31536000_by_1","typeString":"int_const 31536000"},"value":"365"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"34","id":17314,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2205:1:56","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"2194:12:56","typeDescriptions":{"typeIdentifier":"t_rational_126144000_by_1","typeString":"int_const 126144000"}},"visibility":"internal"},{"constant":true,"id":17319,"mutability":"constant","name":"_MAX_BUFFER_PERIOD_DURATION","nameLocation":"2238:27:56","nodeType":"VariableDeclaration","scope":17511,"src":"2212:64:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17317,"name":"uint256","nodeType":"ElementaryTypeName","src":"2212:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"313830","id":17318,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2268:8:56","subdenomination":"days","typeDescriptions":{"typeIdentifier":"t_rational_15552000_by_1","typeString":"int_const 15552000"},"value":"180"},"visibility":"internal"},{"constant":false,"id":17321,"mutability":"immutable","name":"_MINIMUM_TRADE_AMOUNT","nameLocation":"2509:21:56","nodeType":"VariableDeclaration","scope":17511,"src":"2482:48:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17320,"name":"uint256","nodeType":"ElementaryTypeName","src":"2482:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17323,"mutability":"immutable","name":"_MINIMUM_WRAP_AMOUNT","nameLocation":"2721:20:56","nodeType":"VariableDeclaration","scope":17511,"src":"2694:47:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17322,"name":"uint256","nodeType":"ElementaryTypeName","src":"2694:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17328,"mutability":"immutable","name":"_IS_UNLOCKED_SLOT","nameLocation":"3380:17:56","nodeType":"VariableDeclaration","scope":17511,"src":"3354:86:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17324,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3354:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"6973556e6c6f636b6564","id":17326,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3427:12:56","typeDescriptions":{"typeIdentifier":"t_stringliteral_a510d743a7e777ee75c062642dc8c16fed516063b6963ca8d80c87d268ce0db7","typeString":"literal_string \"isUnlocked\""},"value":"isUnlocked"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_a510d743a7e777ee75c062642dc8c16fed516063b6963ca8d80c87d268ce0db7","typeString":"literal_string \"isUnlocked\""}],"id":17325,"name":"_calculateVaultStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17510,"src":"3400:26:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":17327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3400:40:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":17333,"mutability":"immutable","name":"_NON_ZERO_DELTA_COUNT_SLOT","nameLocation":"3472:26:56","nodeType":"VariableDeclaration","scope":17511,"src":"3446:102:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17329,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3446:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"6e6f6e5a65726f44656c7461436f756e74","id":17331,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3528:19:56","typeDescriptions":{"typeIdentifier":"t_stringliteral_20641895e8df322512adcd6373d3c6096d4e0152b30bd6a461d49c5bf2ba6634","typeString":"literal_string \"nonZeroDeltaCount\""},"value":"nonZeroDeltaCount"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_20641895e8df322512adcd6373d3c6096d4e0152b30bd6a461d49c5bf2ba6634","typeString":"literal_string \"nonZeroDeltaCount\""}],"id":17330,"name":"_calculateVaultStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17510,"src":"3501:26:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":17332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3501:47:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":17338,"mutability":"immutable","name":"_TOKEN_DELTAS_SLOT","nameLocation":"3580:18:56","nodeType":"VariableDeclaration","scope":17511,"src":"3554:88:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17334,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3554:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"746f6b656e44656c746173","id":17336,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3628:13:56","typeDescriptions":{"typeIdentifier":"t_stringliteral_f30c7b7598180f2aeb106e995ea0047da95f7a2b6d28dcb1281ac7f231dea1dd","typeString":"literal_string \"tokenDeltas\""},"value":"tokenDeltas"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_f30c7b7598180f2aeb106e995ea0047da95f7a2b6d28dcb1281ac7f231dea1dd","typeString":"literal_string \"tokenDeltas\""}],"id":17335,"name":"_calculateVaultStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17510,"src":"3601:26:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":17337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3601:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":17343,"mutability":"immutable","name":"_ADD_LIQUIDITY_CALLED_SLOT","nameLocation":"3674:26:56","nodeType":"VariableDeclaration","scope":17511,"src":"3648:103:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17339,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3648:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"6164644c697175696469747943616c6c6564","id":17341,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3730:20:56","typeDescriptions":{"typeIdentifier":"t_stringliteral_7841a116c280f8c1ac8b69abca4cf7c2e40d11cf0658dc5b3f9204db134a8494","typeString":"literal_string \"addLiquidityCalled\""},"value":"addLiquidityCalled"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_7841a116c280f8c1ac8b69abca4cf7c2e40d11cf0658dc5b3f9204db134a8494","typeString":"literal_string \"addLiquidityCalled\""}],"id":17340,"name":"_calculateVaultStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17510,"src":"3703:26:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":17342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3703:48:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":17348,"mutability":"immutable","name":"_SESSION_ID_SLOT","nameLocation":"3783:16:56","nodeType":"VariableDeclaration","scope":17511,"src":"3757:84:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17344,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3757:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"73657373696f6e4964","id":17346,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3829:11:56","typeDescriptions":{"typeIdentifier":"t_stringliteral_7665db96508d50e1824f5dc8219e0168a78d13b9d608109c1eeac31853406877","typeString":"literal_string \"sessionId\""},"value":"sessionId"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_7665db96508d50e1824f5dc8219e0168a78d13b9d608109c1eeac31853406877","typeString":"literal_string \"sessionId\""}],"id":17345,"name":"_calculateVaultStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17510,"src":"3802:26:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":17347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3802:39:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":17353,"mutability":"mutable","name":"_poolConfigBits","nameLocation":"4248:15:56","nodeType":"VariableDeclaration","scope":17511,"src":"4188:75:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"mapping(address => PoolConfigBits)"},"typeName":{"id":17352,"keyName":"pool","keyNameLocation":"4204:4:56","keyType":{"id":17349,"name":"address","nodeType":"ElementaryTypeName","src":"4196:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4188:50:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"mapping(address => PoolConfigBits)"},"valueName":"poolConfig","valueNameLocation":"4227:10:56","valueType":{"id":17351,"nodeType":"UserDefinedTypeName","pathNode":{"id":17350,"name":"PoolConfigBits","nameLocations":["4212:14:56"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"4212:14:56"},"referencedDeclaration":2184,"src":"4212:14:56","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}},"visibility":"internal"},{"constant":false,"id":17358,"mutability":"mutable","name":"_poolRoleAccounts","nameLocation":"4411:17:56","nodeType":"VariableDeclaration","scope":17511,"src":"4347:81:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolRoleAccounts_$2279_storage_$","typeString":"mapping(address => struct PoolRoleAccounts)"},"typeName":{"id":17357,"keyName":"pool","keyNameLocation":"4363:4:56","keyType":{"id":17354,"name":"address","nodeType":"ElementaryTypeName","src":"4355:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4347:54:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolRoleAccounts_$2279_storage_$","typeString":"mapping(address => struct PoolRoleAccounts)"},"valueName":"roleAccounts","valueNameLocation":"4388:12:56","valueType":{"id":17356,"nodeType":"UserDefinedTypeName","pathNode":{"id":17355,"name":"PoolRoleAccounts","nameLocations":["4371:16:56"],"nodeType":"IdentifierPath","referencedDeclaration":2279,"src":"4371:16:56"},"referencedDeclaration":2279,"src":"4371:16:56","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2279_storage_ptr","typeString":"struct PoolRoleAccounts"}}},"visibility":"internal"},{"constant":false,"id":17363,"mutability":"mutable","name":"_hooksContracts","nameLocation":"4544:15:56","nodeType":"VariableDeclaration","scope":17511,"src":"4489:70:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$300_$","typeString":"mapping(address => contract IHooks)"},"typeName":{"id":17362,"keyName":"pool","keyNameLocation":"4505:4:56","keyType":{"id":17359,"name":"address","nodeType":"ElementaryTypeName","src":"4497:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4489:45:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$300_$","typeString":"mapping(address => contract IHooks)"},"valueName":"hooksContract","valueNameLocation":"4520:13:56","valueType":{"id":17361,"nodeType":"UserDefinedTypeName","pathNode":{"id":17360,"name":"IHooks","nameLocations":["4513:6:56"],"nodeType":"IdentifierPath","referencedDeclaration":300,"src":"4513:6:56"},"referencedDeclaration":300,"src":"4513:6:56","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}}},"visibility":"internal"},{"constant":false,"id":17369,"mutability":"mutable","name":"_poolTokens","nameLocation":"4672:11:56","nodeType":"VariableDeclaration","scope":17511,"src":"4618:65:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_IERC20_$6980_$dyn_storage_$","typeString":"mapping(address => contract IERC20[])"},"typeName":{"id":17368,"keyName":"pool","keyNameLocation":"4634:4:56","keyType":{"id":17364,"name":"address","nodeType":"ElementaryTypeName","src":"4626:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4618:44:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_IERC20_$6980_$dyn_storage_$","typeString":"mapping(address => contract IERC20[])"},"valueName":"poolTokens","valueNameLocation":"4651:10:56","valueType":{"baseType":{"id":17366,"nodeType":"UserDefinedTypeName","pathNode":{"id":17365,"name":"IERC20","nameLocations":["4642:6:56"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"4642:6:56"},"referencedDeclaration":6980,"src":"4642:6:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":17367,"nodeType":"ArrayTypeName","src":"4642:8:56","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage_ptr","typeString":"contract IERC20[]"}}},"visibility":"internal"},{"constant":false,"id":17377,"mutability":"mutable","name":"_poolTokenInfo","nameLocation":"4823:14:56","nodeType":"VariableDeclaration","scope":17511,"src":"4744:93:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6980_$_t_struct$_TokenInfo_$2306_storage_$_$","typeString":"mapping(address => mapping(contract IERC20 => struct TokenInfo))"},"typeName":{"id":17376,"keyName":"pool","keyNameLocation":"4760:4:56","keyType":{"id":17370,"name":"address","nodeType":"ElementaryTypeName","src":"4752:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4744:69:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6980_$_t_struct$_TokenInfo_$2306_storage_$_$","typeString":"mapping(address => mapping(contract IERC20 => struct TokenInfo))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":17375,"keyName":"token","keyNameLocation":"4783:5:56","keyType":{"id":17372,"nodeType":"UserDefinedTypeName","pathNode":{"id":17371,"name":"IERC20","nameLocations":["4776:6:56"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"4776:6:56"},"referencedDeclaration":6980,"src":"4776:6:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"4768:44:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_struct$_TokenInfo_$2306_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo)"},"valueName":"tokenInfo","valueNameLocation":"4802:9:56","valueType":{"id":17374,"nodeType":"UserDefinedTypeName","pathNode":{"id":17373,"name":"TokenInfo","nameLocations":["4792:9:56"],"nodeType":"IdentifierPath","referencedDeclaration":2306,"src":"4792:9:56"},"referencedDeclaration":2306,"src":"4792:9:56","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2306_storage_ptr","typeString":"struct TokenInfo"}}}},"visibility":"internal"},{"constant":false,"id":17383,"mutability":"mutable","name":"_poolTokenBalances","nameLocation":"5226:18:56","nodeType":"VariableDeclaration","scope":17511,"src":"5134:110:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"},"typeName":{"id":17382,"keyName":"pool","keyNameLocation":"5150:4:56","keyType":{"id":17378,"name":"address","nodeType":"ElementaryTypeName","src":"5142:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5134:82:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":17381,"keyName":"tokenIndex","keyNameLocation":"5174:10:56","keyType":{"id":17379,"name":"uint256","nodeType":"ElementaryTypeName","src":"5166:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"5158:57:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"5196:18:56","valueType":{"id":17380,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5188:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}}},"visibility":"internal"},{"constant":false,"id":17390,"mutability":"mutable","name":"_aggregateFeeAmounts","nameLocation":"5597:20:56","nodeType":"VariableDeclaration","scope":17511,"src":"5513:104:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6980_$_t_bytes32_$_$","typeString":"mapping(address => mapping(contract IERC20 => bytes32))"},"typeName":{"id":17389,"keyName":"pool","keyNameLocation":"5529:4:56","keyType":{"id":17384,"name":"address","nodeType":"ElementaryTypeName","src":"5521:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5513:74:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6980_$_t_bytes32_$_$","typeString":"mapping(address => mapping(contract IERC20 => bytes32))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":17388,"keyName":"token","keyNameLocation":"5552:5:56","keyType":{"id":17386,"nodeType":"UserDefinedTypeName","pathNode":{"id":17385,"name":"IERC20","nameLocations":["5545:6:56"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"5545:6:56"},"referencedDeclaration":6980,"src":"5545:6:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"5537:49:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"},"valueName":"packedFeeAmounts","valueNameLocation":"5569:16:56","valueType":{"id":17387,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5561:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}}},"visibility":"internal"},{"constant":false,"id":17392,"mutability":"immutable","name":"_vaultPauseWindowEndTime","nameLocation":"5980:24:56","nodeType":"VariableDeclaration","scope":17511,"src":"5954:50:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":17391,"name":"uint32","nodeType":"ElementaryTypeName","src":"5954:6:56","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":17394,"mutability":"immutable","name":"_vaultBufferPeriodEndTime","nameLocation":"6036:25:56","nodeType":"VariableDeclaration","scope":17511,"src":"6010:51:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":17393,"name":"uint32","nodeType":"ElementaryTypeName","src":"6010:6:56","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":17396,"mutability":"immutable","name":"_vaultBufferPeriodDuration","nameLocation":"6170:26:56","nodeType":"VariableDeclaration","scope":17511,"src":"6144:52:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":17395,"name":"uint32","nodeType":"ElementaryTypeName","src":"6144:6:56","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":17399,"mutability":"mutable","name":"_vaultStateBits","nameLocation":"6296:15:56","nodeType":"VariableDeclaration","scope":17511,"src":"6272:39:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"},"typeName":{"id":17398,"nodeType":"UserDefinedTypeName","pathNode":{"id":17397,"name":"VaultStateBits","nameLocations":["6272:14:56"],"nodeType":"IdentifierPath","referencedDeclaration":20164,"src":"6272:14:56"},"referencedDeclaration":20164,"src":"6272:14:56","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}},"visibility":"internal"},{"constant":false,"documentation":{"id":17400,"nodeType":"StructuredDocumentation","src":"6318:159:56","text":" @dev Represents the total reserve of each ERC20 token. It should be always equal to `token.balanceOf(vault)`,\n except during `unlock`."},"id":17405,"mutability":"mutable","name":"_reservesOf","nameLocation":"6537:11:56","nodeType":"VariableDeclaration","scope":17511,"src":"6482:66:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"typeName":{"id":17404,"keyName":"token","keyNameLocation":"6497:5:56","keyType":{"id":17402,"nodeType":"UserDefinedTypeName","pathNode":{"id":17401,"name":"IERC20","nameLocations":["6490:6:56"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"6490:6:56"},"referencedDeclaration":6980,"src":"6490:6:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"6482:45:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"valueName":"vaultBalance","valueNameLocation":"6514:12:56","valueType":{"id":17403,"name":"uint256","nodeType":"ElementaryTypeName","src":"6506:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"documentation":{"id":17406,"nodeType":"StructuredDocumentation","src":"6555:48:56","text":"@dev Flag that prevents re-enabling queries."},"id":17408,"mutability":"mutable","name":"_queriesDisabledPermanently","nameLocation":"6622:27:56","nodeType":"VariableDeclaration","scope":17511,"src":"6608:41:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17407,"name":"bool","nodeType":"ElementaryTypeName","src":"6608:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":17411,"mutability":"mutable","name":"_authorizer","nameLocation":"6954:11:56","nodeType":"VariableDeclaration","scope":17511,"src":"6933:32:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$40","typeString":"contract IAuthorizer"},"typeName":{"id":17410,"nodeType":"UserDefinedTypeName","pathNode":{"id":17409,"name":"IAuthorizer","nameLocations":["6933:11:56"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"6933:11:56"},"referencedDeclaration":40,"src":"6933:11:56","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$40","typeString":"contract IAuthorizer"}},"visibility":"internal"},{"constant":false,"id":17414,"mutability":"mutable","name":"_protocolFeeController","nameLocation":"7065:22:56","nodeType":"VariableDeclaration","scope":17511,"src":"7033:54:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$643","typeString":"contract IProtocolFeeController"},"typeName":{"id":17413,"nodeType":"UserDefinedTypeName","pathNode":{"id":17412,"name":"IProtocolFeeController","nameLocations":["7033:22:56"],"nodeType":"IdentifierPath","referencedDeclaration":643,"src":"7033:22:56"},"referencedDeclaration":643,"src":"7033:22:56","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$643","typeString":"contract IProtocolFeeController"}},"visibility":"internal"},{"constant":false,"id":17419,"mutability":"mutable","name":"_bufferTokenBalances","nameLocation":"8207:20:56","nodeType":"VariableDeclaration","scope":17511,"src":"8137:90:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$6704_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"},"typeName":{"id":17418,"keyName":"wrappedToken","keyNameLocation":"8154:12:56","keyType":{"id":17416,"nodeType":"UserDefinedTypeName","pathNode":{"id":17415,"name":"IERC4626","nameLocations":["8145:8:56"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"8145:8:56"},"referencedDeclaration":6704,"src":"8145:8:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"nodeType":"Mapping","src":"8137:60:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$6704_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"8178:18:56","valueType":{"id":17417,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8170:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"},{"constant":false,"id":17426,"mutability":"mutable","name":"_bufferLpShares","nameLocation":"8549:15:56","nodeType":"VariableDeclaration","scope":17511,"src":"8462:102:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$6704_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(contract IERC4626 => mapping(address => uint256))"},"typeName":{"id":17425,"keyName":"wrappedToken","keyNameLocation":"8479:12:56","keyType":{"id":17421,"nodeType":"UserDefinedTypeName","pathNode":{"id":17420,"name":"IERC4626","nameLocations":["8470:8:56"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"8470:8:56"},"referencedDeclaration":6704,"src":"8470:8:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"nodeType":"Mapping","src":"8462:77:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$6704_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(contract IERC4626 => mapping(address => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":17424,"keyName":"user","keyNameLocation":"8511:4:56","keyType":{"id":17422,"name":"address","nodeType":"ElementaryTypeName","src":"8503:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"8495:43:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"userShares","valueNameLocation":"8527:10:56","valueType":{"id":17423,"name":"uint256","nodeType":"ElementaryTypeName","src":"8519:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"constant":false,"id":17431,"mutability":"mutable","name":"_bufferTotalShares","nameLocation":"8658:18:56","nodeType":"VariableDeclaration","scope":17511,"src":"8595:81:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$6704_$_t_uint256_$","typeString":"mapping(contract IERC4626 => uint256)"},"typeName":{"id":17430,"keyName":"wrappedToken","keyNameLocation":"8612:12:56","keyType":{"id":17428,"nodeType":"UserDefinedTypeName","pathNode":{"id":17427,"name":"IERC4626","nameLocations":["8603:8:56"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"8603:8:56"},"referencedDeclaration":6704,"src":"8603:8:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"nodeType":"Mapping","src":"8595:53:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$6704_$_t_uint256_$","typeString":"mapping(contract IERC4626 => uint256)"},"valueName":"totalShares","valueNameLocation":"8636:11:56","valueType":{"id":17429,"name":"uint256","nodeType":"ElementaryTypeName","src":"8628:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":17436,"mutability":"mutable","name":"_bufferAssets","nameLocation":"8844:13:56","nodeType":"VariableDeclaration","scope":17511,"src":"8777:80:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$6704_$_t_address_$","typeString":"mapping(contract IERC4626 => address)"},"typeName":{"id":17435,"keyName":"wrappedToken","keyNameLocation":"8794:12:56","keyType":{"id":17433,"nodeType":"UserDefinedTypeName","pathNode":{"id":17432,"name":"IERC4626","nameLocations":["8785:8:56"],"nodeType":"IdentifierPath","referencedDeclaration":6704,"src":"8785:8:56"},"referencedDeclaration":6704,"src":"8785:8:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6704","typeString":"contract IERC4626"}},"nodeType":"Mapping","src":"8777:57:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$6704_$_t_address_$","typeString":"mapping(contract IERC4626 => address)"},"valueName":"underlyingToken","valueNameLocation":"8818:15:56","valueType":{"id":17434,"name":"address","nodeType":"ElementaryTypeName","src":"8810:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"body":{"id":17446,"nodeType":"Block","src":"9170:53:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17442,"name":"_IS_UNLOCKED_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17328,"src":"9187:17:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9205:9:56","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":6372,"src":"9187:27:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$6357_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":17444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9187:29:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6357","typeString":"StorageSlotExtension.BooleanSlotType"}},"functionReturnParameters":17441,"id":17445,"nodeType":"Return","src":"9180:36:56"}]},"id":17447,"implemented":true,"kind":"function","modifiers":[],"name":"_isUnlocked","nameLocation":"9090:11:56","nodeType":"FunctionDefinition","parameters":{"id":17437,"nodeType":"ParameterList","parameters":[],"src":"9101:2:56"},"returnParameters":{"id":17441,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17440,"mutability":"mutable","name":"slot","nameLocation":"9164:4:56","nodeType":"VariableDeclaration","scope":17447,"src":"9127:41:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6357","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":17439,"nodeType":"UserDefinedTypeName","pathNode":{"id":17438,"name":"StorageSlotExtension.BooleanSlotType","nameLocations":["9127:20:56","9148:15:56"],"nodeType":"IdentifierPath","referencedDeclaration":6357,"src":"9127:36:56"},"referencedDeclaration":6357,"src":"9127:36:56","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6357","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"9126:43:56"},"scope":17511,"src":"9081:142:56","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17457,"nodeType":"Block","src":"9325:62:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17453,"name":"_NON_ZERO_DELTA_COUNT_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17333,"src":"9342:26:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9369:9:56","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":6406,"src":"9342:36:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$6391_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":17455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9342:38:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"functionReturnParameters":17452,"id":17456,"nodeType":"Return","src":"9335:45:56"}]},"id":17458,"implemented":true,"kind":"function","modifiers":[],"name":"_nonZeroDeltaCount","nameLocation":"9238:18:56","nodeType":"FunctionDefinition","parameters":{"id":17448,"nodeType":"ParameterList","parameters":[],"src":"9256:2:56"},"returnParameters":{"id":17452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17451,"mutability":"mutable","name":"slot","nameLocation":"9319:4:56","nodeType":"VariableDeclaration","scope":17458,"src":"9282:41:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":17450,"nodeType":"UserDefinedTypeName","pathNode":{"id":17449,"name":"StorageSlotExtension.Uint256SlotType","nameLocations":["9282:20:56","9303:15:56"],"nodeType":"IdentifierPath","referencedDeclaration":6391,"src":"9282:36:56"},"referencedDeclaration":6391,"src":"9282:36:56","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"9281:43:56"},"scope":17511,"src":"9229:158:56","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17469,"nodeType":"Block","src":"9472:74:56","statements":[{"expression":{"arguments":[{"id":17466,"name":"_TOKEN_DELTAS_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17338,"src":"9520:18:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":17464,"name":"TokenDeltaMappingSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3456,"src":"9489:25:56","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456_$","typeString":"type(TokenDeltaMappingSlotType)"}},"id":17465,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9515:4:56","memberName":"wrap","nodeType":"MemberAccess","src":"9489:30:56","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456_$","typeString":"function (bytes32) pure returns (TokenDeltaMappingSlotType)"}},"id":17467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9489:50:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456","typeString":"TokenDeltaMappingSlotType"}},"functionReturnParameters":17463,"id":17468,"nodeType":"Return","src":"9482:57:56"}]},"id":17470,"implemented":true,"kind":"function","modifiers":[],"name":"_tokenDeltas","nameLocation":"9402:12:56","nodeType":"FunctionDefinition","parameters":{"id":17459,"nodeType":"ParameterList","parameters":[],"src":"9414:2:56"},"returnParameters":{"id":17463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17462,"mutability":"mutable","name":"slot","nameLocation":"9466:4:56","nodeType":"VariableDeclaration","scope":17470,"src":"9440:30:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456","typeString":"TokenDeltaMappingSlotType"},"typeName":{"id":17461,"nodeType":"UserDefinedTypeName","pathNode":{"id":17460,"name":"TokenDeltaMappingSlotType","nameLocations":["9440:25:56"],"nodeType":"IdentifierPath","referencedDeclaration":3456,"src":"9440:25:56"},"referencedDeclaration":3456,"src":"9440:25:56","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$3456","typeString":"TokenDeltaMappingSlotType"}},"visibility":"internal"}],"src":"9439:32:56"},"scope":17511,"src":"9393:153:56","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17481,"nodeType":"Block","src":"9646:90:56","statements":[{"expression":{"arguments":[{"id":17478,"name":"_ADD_LIQUIDITY_CALLED_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17343,"src":"9702:26:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":17476,"name":"UintToAddressToBooleanMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3460,"src":"9663:33:56","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460_$","typeString":"type(UintToAddressToBooleanMappingSlot)"}},"id":17477,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9697:4:56","memberName":"wrap","nodeType":"MemberAccess","src":"9663:38:56","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460_$","typeString":"function (bytes32) pure returns (UintToAddressToBooleanMappingSlot)"}},"id":17479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9663:66:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460","typeString":"UintToAddressToBooleanMappingSlot"}},"functionReturnParameters":17475,"id":17480,"nodeType":"Return","src":"9656:73:56"}]},"id":17482,"implemented":true,"kind":"function","modifiers":[],"name":"_addLiquidityCalled","nameLocation":"9561:19:56","nodeType":"FunctionDefinition","parameters":{"id":17471,"nodeType":"ParameterList","parameters":[],"src":"9580:2:56"},"returnParameters":{"id":17475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17474,"mutability":"mutable","name":"slot","nameLocation":"9640:4:56","nodeType":"VariableDeclaration","scope":17482,"src":"9606:38:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460","typeString":"UintToAddressToBooleanMappingSlot"},"typeName":{"id":17473,"nodeType":"UserDefinedTypeName","pathNode":{"id":17472,"name":"UintToAddressToBooleanMappingSlot","nameLocations":["9606:33:56"],"nodeType":"IdentifierPath","referencedDeclaration":3460,"src":"9606:33:56"},"referencedDeclaration":3460,"src":"9606:33:56","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$3460","typeString":"UintToAddressToBooleanMappingSlot"}},"visibility":"internal"}],"src":"9605:40:56"},"scope":17511,"src":"9552:184:56","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17492,"nodeType":"Block","src":"9834:52:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17488,"name":"_SESSION_ID_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17348,"src":"9851:16:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9868:9:56","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":6406,"src":"9851:26:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$6391_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":17490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9851:28:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"functionReturnParameters":17487,"id":17491,"nodeType":"Return","src":"9844:35:56"}]},"id":17493,"implemented":true,"kind":"function","modifiers":[],"name":"_sessionIdSlot","nameLocation":"9751:14:56","nodeType":"FunctionDefinition","parameters":{"id":17483,"nodeType":"ParameterList","parameters":[],"src":"9765:2:56"},"returnParameters":{"id":17487,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17486,"mutability":"mutable","name":"slot","nameLocation":"9828:4:56","nodeType":"VariableDeclaration","scope":17493,"src":"9791:41:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":17485,"nodeType":"UserDefinedTypeName","pathNode":{"id":17484,"name":"StorageSlotExtension.Uint256SlotType","nameLocations":["9791:20:56","9812:15:56"],"nodeType":"IdentifierPath","referencedDeclaration":6391,"src":"9791:36:56"},"referencedDeclaration":6391,"src":"9791:36:56","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6391","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"9790:43:56"},"scope":17511,"src":"9742:144:56","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17509,"nodeType":"Block","src":"9978:91:56","statements":[{"expression":{"arguments":[{"expression":{"arguments":[{"id":17503,"name":"VaultStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17511,"src":"10038:12:56","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VaultStorage_$17511_$","typeString":"type(contract VaultStorage)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_VaultStorage_$17511_$","typeString":"type(contract VaultStorage)"}],"id":17502,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10033:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":17504,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10033:18:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_VaultStorage_$17511","typeString":"type(contract VaultStorage)"}},"id":17505,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10052:4:56","memberName":"name","nodeType":"MemberAccess","src":"10033:23:56","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":17506,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17495,"src":"10058:3:56","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":17500,"name":"TransientStorageHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4040,"src":"9995:23:56","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TransientStorageHelpers_$4040_$","typeString":"type(library TransientStorageHelpers)"}},"id":17501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10019:13:56","memberName":"calculateSlot","nodeType":"MemberAccess","referencedDeclaration":3509,"src":"9995:37:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory,string memory) pure returns (bytes32)"}},"id":17507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9995:67:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":17499,"id":17508,"nodeType":"Return","src":"9988:74:56"}]},"id":17510,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateVaultStorageSlot","nameLocation":"9901:26:56","nodeType":"FunctionDefinition","parameters":{"id":17496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17495,"mutability":"mutable","name":"key","nameLocation":"9942:3:56","nodeType":"VariableDeclaration","scope":17510,"src":"9928:17:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17494,"name":"string","nodeType":"ElementaryTypeName","src":"9928:6:56","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"9927:19:56"},"returnParameters":{"id":17499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17498,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17510,"src":"9969:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17497,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9969:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9968:9:56"},"scope":17511,"src":"9892:177:56","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":17512,"src":"1377:8694:56","usedErrors":[],"usedEvents":[]}],"src":"46:10026:56"},"id":56},"contracts/lib/HooksConfigLib.sol":{"ast":{"absolutePath":"contracts/lib/HooksConfigLib.sol","exportedSymbols":{"AddLiquidityKind":[2409],"AddLiquidityParams":[2425],"AfterSwapParams":[2403],"BufferWrapOrUnwrapParams":[2464],"FEE_BITLENGTH":[2467],"FEE_SCALING_FACTOR":[2470],"HookFlags":[2229],"HooksConfig":[2253],"HooksConfigLib":[18601],"IERC20":[6980],"IERC4626":[6704],"IHooks":[300],"IRateProvider":[24],"IVaultErrors":[1370],"LiquidityManagement":[2182],"MAX_FEE_PERCENTAGE":[2473],"PoolConfig":[2207],"PoolConfigBits":[2184],"PoolConfigConst":[18729],"PoolData":[2331],"PoolRoleAccounts":[2279],"PoolSwapParams":[2374],"RemoveLiquidityKind":[2430],"RemoveLiquidityParams":[2446],"Rounding":[2334],"SwapKind":[2337],"SwapState":[2263],"TokenConfig":[2296],"TokenInfo":[2306],"TokenType":[2283],"VaultState":[2271],"VaultSwapParams":[2356],"WordCodec":[4467],"WrappingDirection":[2449]},"id":18602,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":17513,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:57"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":17515,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18602,"sourceUnit":1371,"src":"72:93:57","symbolAliases":[{"foreign":{"id":17514,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"81:12:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","id":17517,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18602,"sourceUnit":301,"src":"166:81:57","symbolAliases":[{"foreign":{"id":17516,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":300,"src":"175:6:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":17518,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18602,"sourceUnit":2474,"src":"248:69:57","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol","id":17520,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18602,"sourceUnit":4468,"src":"319:93:57","symbolAliases":[{"foreign":{"id":17519,"name":"WordCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4467,"src":"328:9:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/lib/PoolConfigConst.sol","file":"./PoolConfigConst.sol","id":17522,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18602,"sourceUnit":18730,"src":"414:56:57","symbolAliases":[{"foreign":{"id":17521,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"423:15:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"HooksConfigLib","contractDependencies":[],"contractKind":"library","documentation":{"id":17523,"nodeType":"StructuredDocumentation","src":"472:1405:57","text":" @notice Helper functions to read and write the packed hook configuration flags stored in `_poolConfigBits`.\n @dev This library has two additional functions. `toHooksConfig` constructs a `HooksConfig` structure from the\n PoolConfig and the hooks contract address. Also, there are `call` functions that forward the arguments\n to the corresponding functions in the hook contract, then validate and return the results.\n Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot per pool).\n This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct. The layout (i.e.,\n offsets for each data field) is specified in `PoolConfigConst`.\n There are two libraries for interpreting these data. This one parses fields related to hooks, and also\n contains helpers for the struct building and hooks contract forwarding functions described above. `PoolConfigLib`\n contains helpers related to the non-hook-related flags, along with aggregate fee percentages and other data\n associated with pools.\n The `PoolData` struct contains the raw bitmap with the entire pool state (`PoolConfigBits`), plus the token\n configuration, scaling factors, and dynamic information such as current balances and rates.\n The hooks contract addresses themselves are stored in a separate `_hooksContracts` mapping."},"fullyImplemented":true,"id":18601,"linearizedBaseContracts":[18601],"name":"HooksConfigLib","nameLocation":"1886:14:57","nodeType":"ContractDefinition","nodes":[{"global":false,"id":17526,"libraryName":{"id":17524,"name":"WordCodec","nameLocations":["1913:9:57"],"nodeType":"IdentifierPath","referencedDeclaration":4467,"src":"1913:9:57"},"nodeType":"UsingForDirective","src":"1907:28:57","typeName":{"id":17525,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1927:7:57","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"global":false,"id":17530,"libraryName":{"id":17527,"name":"HooksConfigLib","nameLocations":["1946:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":18601,"src":"1946:14:57"},"nodeType":"UsingForDirective","src":"1940:40:57","typeName":{"id":17529,"nodeType":"UserDefinedTypeName","pathNode":{"id":17528,"name":"PoolConfigBits","nameLocations":["1965:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"1965:14:57"},"referencedDeclaration":2184,"src":"1965:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}},{"body":{"id":17547,"nodeType":"Block","src":"2073:117:57","statements":[{"expression":{"arguments":[{"expression":{"id":17543,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"2131:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":17544,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2147:35:57","memberName":"ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18654,"src":"2131:51:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":17540,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17533,"src":"2112:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":17538,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"2090:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17539,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2105:6:57","memberName":"unwrap","nodeType":"MemberAccess","src":"2090:21:57","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":17541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2090:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2120:10:57","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"2090:40:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":17545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2090:93:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17537,"id":17546,"nodeType":"Return","src":"2083:100:57"}]},"id":17548,"implemented":true,"kind":"function","modifiers":[],"name":"enableHookAdjustedAmounts","nameLocation":"1995:25:57","nodeType":"FunctionDefinition","parameters":{"id":17534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17533,"mutability":"mutable","name":"config","nameLocation":"2036:6:57","nodeType":"VariableDeclaration","scope":17548,"src":"2021:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17532,"nodeType":"UserDefinedTypeName","pathNode":{"id":17531,"name":"PoolConfigBits","nameLocations":["2021:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"2021:14:57"},"referencedDeclaration":2184,"src":"2021:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"2020:23:57"},"returnParameters":{"id":17537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17536,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17548,"src":"2067:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17535,"name":"bool","nodeType":"ElementaryTypeName","src":"2067:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2066:6:57"},"scope":18601,"src":"1986:204:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17572,"nodeType":"Block","src":"2302:187:57","statements":[{"expression":{"arguments":[{"arguments":[{"id":17566,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17553,"src":"2409:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":17567,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"2416:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":17568,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2432:35:57","memberName":"ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18654,"src":"2416:51:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":17563,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17551,"src":"2390:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":17561,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"2368:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17562,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2383:6:57","memberName":"unwrap","nodeType":"MemberAccess","src":"2368:21:57","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":17564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2368:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2398:10:57","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"2368:40:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":17569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2368:100:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":17559,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"2331:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17560,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2346:4:57","memberName":"wrap","nodeType":"MemberAccess","src":"2331:19:57","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":17570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2331:151:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":17558,"id":17571,"nodeType":"Return","src":"2312:170:57"}]},"id":17573,"implemented":true,"kind":"function","modifiers":[],"name":"setHookAdjustedAmounts","nameLocation":"2205:22:57","nodeType":"FunctionDefinition","parameters":{"id":17554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17551,"mutability":"mutable","name":"config","nameLocation":"2243:6:57","nodeType":"VariableDeclaration","scope":17573,"src":"2228:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17550,"nodeType":"UserDefinedTypeName","pathNode":{"id":17549,"name":"PoolConfigBits","nameLocations":["2228:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"2228:14:57"},"referencedDeclaration":2184,"src":"2228:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":17553,"mutability":"mutable","name":"value","nameLocation":"2256:5:57","nodeType":"VariableDeclaration","scope":17573,"src":"2251:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17552,"name":"bool","nodeType":"ElementaryTypeName","src":"2251:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2227:35:57"},"returnParameters":{"id":17558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17557,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17573,"src":"2286:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17556,"nodeType":"UserDefinedTypeName","pathNode":{"id":17555,"name":"PoolConfigBits","nameLocations":["2286:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"2286:14:57"},"referencedDeclaration":2184,"src":"2286:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"2285:16:57"},"scope":18601,"src":"2196:293:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17590,"nodeType":"Block","src":"2583:106:57","statements":[{"expression":{"arguments":[{"expression":{"id":17586,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"2641:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":17587,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2657:24:57","memberName":"BEFORE_INITIALIZE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18649,"src":"2641:40:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":17583,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17576,"src":"2622:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":17581,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"2600:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17582,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2615:6:57","memberName":"unwrap","nodeType":"MemberAccess","src":"2600:21:57","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":17584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2600:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2630:10:57","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"2600:40:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":17588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2600:82:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17580,"id":17589,"nodeType":"Return","src":"2593:89:57"}]},"id":17591,"implemented":true,"kind":"function","modifiers":[],"name":"shouldCallBeforeInitialize","nameLocation":"2504:26:57","nodeType":"FunctionDefinition","parameters":{"id":17577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17576,"mutability":"mutable","name":"config","nameLocation":"2546:6:57","nodeType":"VariableDeclaration","scope":17591,"src":"2531:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17575,"nodeType":"UserDefinedTypeName","pathNode":{"id":17574,"name":"PoolConfigBits","nameLocations":["2531:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"2531:14:57"},"referencedDeclaration":2184,"src":"2531:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"2530:23:57"},"returnParameters":{"id":17580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17579,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17591,"src":"2577:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17578,"name":"bool","nodeType":"ElementaryTypeName","src":"2577:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2576:6:57"},"scope":18601,"src":"2495:194:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17615,"nodeType":"Block","src":"2808:176:57","statements":[{"expression":{"arguments":[{"arguments":[{"id":17609,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17596,"src":"2915:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":17610,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"2922:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":17611,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2938:24:57","memberName":"BEFORE_INITIALIZE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18649,"src":"2922:40:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":17606,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17594,"src":"2896:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":17604,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"2874:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17605,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2889:6:57","memberName":"unwrap","nodeType":"MemberAccess","src":"2874:21:57","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":17607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2874:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2904:10:57","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"2874:40:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":17612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2874:89:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":17602,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"2837:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17603,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2852:4:57","memberName":"wrap","nodeType":"MemberAccess","src":"2837:19:57","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":17613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2837:140:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":17601,"id":17614,"nodeType":"Return","src":"2818:159:57"}]},"id":17616,"implemented":true,"kind":"function","modifiers":[],"name":"setShouldCallBeforeInitialize","nameLocation":"2704:29:57","nodeType":"FunctionDefinition","parameters":{"id":17597,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17594,"mutability":"mutable","name":"config","nameLocation":"2749:6:57","nodeType":"VariableDeclaration","scope":17616,"src":"2734:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17593,"nodeType":"UserDefinedTypeName","pathNode":{"id":17592,"name":"PoolConfigBits","nameLocations":["2734:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"2734:14:57"},"referencedDeclaration":2184,"src":"2734:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":17596,"mutability":"mutable","name":"value","nameLocation":"2762:5:57","nodeType":"VariableDeclaration","scope":17616,"src":"2757:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17595,"name":"bool","nodeType":"ElementaryTypeName","src":"2757:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2733:35:57"},"returnParameters":{"id":17601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17600,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17616,"src":"2792:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17599,"nodeType":"UserDefinedTypeName","pathNode":{"id":17598,"name":"PoolConfigBits","nameLocations":["2792:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"2792:14:57"},"referencedDeclaration":2184,"src":"2792:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"2791:16:57"},"scope":18601,"src":"2695:289:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17633,"nodeType":"Block","src":"3077:105:57","statements":[{"expression":{"arguments":[{"expression":{"id":17629,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"3135:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":17630,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3151:23:57","memberName":"AFTER_INITIALIZE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18659,"src":"3135:39:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":17626,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17619,"src":"3116:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":17624,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"3094:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17625,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3109:6:57","memberName":"unwrap","nodeType":"MemberAccess","src":"3094:21:57","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":17627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3094:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3124:10:57","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"3094:40:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":17631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3094:81:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17623,"id":17632,"nodeType":"Return","src":"3087:88:57"}]},"id":17634,"implemented":true,"kind":"function","modifiers":[],"name":"shouldCallAfterInitialize","nameLocation":"2999:25:57","nodeType":"FunctionDefinition","parameters":{"id":17620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17619,"mutability":"mutable","name":"config","nameLocation":"3040:6:57","nodeType":"VariableDeclaration","scope":17634,"src":"3025:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17618,"nodeType":"UserDefinedTypeName","pathNode":{"id":17617,"name":"PoolConfigBits","nameLocations":["3025:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"3025:14:57"},"referencedDeclaration":2184,"src":"3025:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"3024:23:57"},"returnParameters":{"id":17623,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17622,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17634,"src":"3071:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17621,"name":"bool","nodeType":"ElementaryTypeName","src":"3071:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3070:6:57"},"scope":18601,"src":"2990:192:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17658,"nodeType":"Block","src":"3300:175:57","statements":[{"expression":{"arguments":[{"arguments":[{"id":17652,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17639,"src":"3407:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":17653,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"3414:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":17654,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3430:23:57","memberName":"AFTER_INITIALIZE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18659,"src":"3414:39:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":17649,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17637,"src":"3388:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":17647,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"3366:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17648,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3381:6:57","memberName":"unwrap","nodeType":"MemberAccess","src":"3366:21:57","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":17650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3366:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3396:10:57","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"3366:40:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":17655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3366:88:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":17645,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"3329:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17646,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3344:4:57","memberName":"wrap","nodeType":"MemberAccess","src":"3329:19:57","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":17656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3329:139:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":17644,"id":17657,"nodeType":"Return","src":"3310:158:57"}]},"id":17659,"implemented":true,"kind":"function","modifiers":[],"name":"setShouldCallAfterInitialize","nameLocation":"3197:28:57","nodeType":"FunctionDefinition","parameters":{"id":17640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17637,"mutability":"mutable","name":"config","nameLocation":"3241:6:57","nodeType":"VariableDeclaration","scope":17659,"src":"3226:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17636,"nodeType":"UserDefinedTypeName","pathNode":{"id":17635,"name":"PoolConfigBits","nameLocations":["3226:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"3226:14:57"},"referencedDeclaration":2184,"src":"3226:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":17639,"mutability":"mutable","name":"value","nameLocation":"3254:5:57","nodeType":"VariableDeclaration","scope":17659,"src":"3249:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17638,"name":"bool","nodeType":"ElementaryTypeName","src":"3249:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3225:35:57"},"returnParameters":{"id":17644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17643,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17659,"src":"3284:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17642,"nodeType":"UserDefinedTypeName","pathNode":{"id":17641,"name":"PoolConfigBits","nameLocations":["3284:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"3284:14:57"},"referencedDeclaration":2184,"src":"3284:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"3283:16:57"},"scope":18601,"src":"3188:287:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17676,"nodeType":"Block","src":"3574:105:57","statements":[{"expression":{"arguments":[{"expression":{"id":17672,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"3632:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":17673,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3648:23:57","memberName":"DYNAMIC_SWAP_FEE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18664,"src":"3632:39:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":17669,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17662,"src":"3613:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":17667,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"3591:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17668,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3606:6:57","memberName":"unwrap","nodeType":"MemberAccess","src":"3591:21:57","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":17670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3591:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3621:10:57","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"3591:40:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":17674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3591:81:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17666,"id":17675,"nodeType":"Return","src":"3584:88:57"}]},"id":17677,"implemented":true,"kind":"function","modifiers":[],"name":"shouldCallComputeDynamicSwapFee","nameLocation":"3490:31:57","nodeType":"FunctionDefinition","parameters":{"id":17663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17662,"mutability":"mutable","name":"config","nameLocation":"3537:6:57","nodeType":"VariableDeclaration","scope":17677,"src":"3522:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17661,"nodeType":"UserDefinedTypeName","pathNode":{"id":17660,"name":"PoolConfigBits","nameLocations":["3522:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"3522:14:57"},"referencedDeclaration":2184,"src":"3522:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"3521:23:57"},"returnParameters":{"id":17666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17665,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17677,"src":"3568:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17664,"name":"bool","nodeType":"ElementaryTypeName","src":"3568:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3567:6:57"},"scope":18601,"src":"3481:198:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17701,"nodeType":"Block","src":"3825:175:57","statements":[{"expression":{"arguments":[{"arguments":[{"id":17695,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17682,"src":"3932:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":17696,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"3939:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":17697,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3955:23:57","memberName":"DYNAMIC_SWAP_FEE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18664,"src":"3939:39:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":17692,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17680,"src":"3913:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":17690,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"3891:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17691,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3906:6:57","memberName":"unwrap","nodeType":"MemberAccess","src":"3891:21:57","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":17693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3891:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3921:10:57","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"3891:40:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":17698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3891:88:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":17688,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"3854:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17689,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3869:4:57","memberName":"wrap","nodeType":"MemberAccess","src":"3854:19:57","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":17699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3854:139:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":17687,"id":17700,"nodeType":"Return","src":"3835:158:57"}]},"id":17702,"implemented":true,"kind":"function","modifiers":[],"name":"setShouldCallComputeDynamicSwapFee","nameLocation":"3694:34:57","nodeType":"FunctionDefinition","parameters":{"id":17683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17680,"mutability":"mutable","name":"config","nameLocation":"3753:6:57","nodeType":"VariableDeclaration","scope":17702,"src":"3738:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17679,"nodeType":"UserDefinedTypeName","pathNode":{"id":17678,"name":"PoolConfigBits","nameLocations":["3738:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"3738:14:57"},"referencedDeclaration":2184,"src":"3738:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":17682,"mutability":"mutable","name":"value","nameLocation":"3774:5:57","nodeType":"VariableDeclaration","scope":17702,"src":"3769:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17681,"name":"bool","nodeType":"ElementaryTypeName","src":"3769:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3728:57:57"},"returnParameters":{"id":17687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17686,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17702,"src":"3809:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17685,"nodeType":"UserDefinedTypeName","pathNode":{"id":17684,"name":"PoolConfigBits","nameLocations":["3809:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"3809:14:57"},"referencedDeclaration":2184,"src":"3809:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"3808:16:57"},"scope":18601,"src":"3685:315:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17719,"nodeType":"Block","src":"4088:100:57","statements":[{"expression":{"arguments":[{"expression":{"id":17715,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"4146:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":17716,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4162:18:57","memberName":"BEFORE_SWAP_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18669,"src":"4146:34:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":17712,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17705,"src":"4127:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":17710,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"4105:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17711,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4120:6:57","memberName":"unwrap","nodeType":"MemberAccess","src":"4105:21:57","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":17713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4105:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4135:10:57","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"4105:40:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":17717,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4105:76:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17709,"id":17718,"nodeType":"Return","src":"4098:83:57"}]},"id":17720,"implemented":true,"kind":"function","modifiers":[],"name":"shouldCallBeforeSwap","nameLocation":"4015:20:57","nodeType":"FunctionDefinition","parameters":{"id":17706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17705,"mutability":"mutable","name":"config","nameLocation":"4051:6:57","nodeType":"VariableDeclaration","scope":17720,"src":"4036:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17704,"nodeType":"UserDefinedTypeName","pathNode":{"id":17703,"name":"PoolConfigBits","nameLocations":["4036:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"4036:14:57"},"referencedDeclaration":2184,"src":"4036:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"4035:23:57"},"returnParameters":{"id":17709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17708,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17720,"src":"4082:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17707,"name":"bool","nodeType":"ElementaryTypeName","src":"4082:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4081:6:57"},"scope":18601,"src":"4006:182:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17744,"nodeType":"Block","src":"4301:128:57","statements":[{"expression":{"arguments":[{"arguments":[{"id":17738,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17725,"src":"4379:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":17739,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"4386:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":17740,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4402:18:57","memberName":"BEFORE_SWAP_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18669,"src":"4386:34:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":17735,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17723,"src":"4360:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":17733,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"4338:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17734,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4353:6:57","memberName":"unwrap","nodeType":"MemberAccess","src":"4338:21:57","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":17736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4338:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4368:10:57","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"4338:40:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":17741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4338:83:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":17731,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"4318:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17732,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4333:4:57","memberName":"wrap","nodeType":"MemberAccess","src":"4318:19:57","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":17742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4318:104:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":17730,"id":17743,"nodeType":"Return","src":"4311:111:57"}]},"id":17745,"implemented":true,"kind":"function","modifiers":[],"name":"setShouldCallBeforeSwap","nameLocation":"4203:23:57","nodeType":"FunctionDefinition","parameters":{"id":17726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17723,"mutability":"mutable","name":"config","nameLocation":"4242:6:57","nodeType":"VariableDeclaration","scope":17745,"src":"4227:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17722,"nodeType":"UserDefinedTypeName","pathNode":{"id":17721,"name":"PoolConfigBits","nameLocations":["4227:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"4227:14:57"},"referencedDeclaration":2184,"src":"4227:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":17725,"mutability":"mutable","name":"value","nameLocation":"4255:5:57","nodeType":"VariableDeclaration","scope":17745,"src":"4250:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17724,"name":"bool","nodeType":"ElementaryTypeName","src":"4250:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4226:35:57"},"returnParameters":{"id":17730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17729,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17745,"src":"4285:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17728,"nodeType":"UserDefinedTypeName","pathNode":{"id":17727,"name":"PoolConfigBits","nameLocations":["4285:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"4285:14:57"},"referencedDeclaration":2184,"src":"4285:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"4284:16:57"},"scope":18601,"src":"4194:235:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17762,"nodeType":"Block","src":"4516:99:57","statements":[{"expression":{"arguments":[{"expression":{"id":17758,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"4574:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":17759,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4590:17:57","memberName":"AFTER_SWAP_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18674,"src":"4574:33:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":17755,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17748,"src":"4555:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":17753,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"4533:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17754,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4548:6:57","memberName":"unwrap","nodeType":"MemberAccess","src":"4533:21:57","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":17756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4533:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4563:10:57","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"4533:40:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":17760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4533:75:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17752,"id":17761,"nodeType":"Return","src":"4526:82:57"}]},"id":17763,"implemented":true,"kind":"function","modifiers":[],"name":"shouldCallAfterSwap","nameLocation":"4444:19:57","nodeType":"FunctionDefinition","parameters":{"id":17749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17748,"mutability":"mutable","name":"config","nameLocation":"4479:6:57","nodeType":"VariableDeclaration","scope":17763,"src":"4464:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17747,"nodeType":"UserDefinedTypeName","pathNode":{"id":17746,"name":"PoolConfigBits","nameLocations":["4464:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"4464:14:57"},"referencedDeclaration":2184,"src":"4464:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"4463:23:57"},"returnParameters":{"id":17752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17751,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17763,"src":"4510:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17750,"name":"bool","nodeType":"ElementaryTypeName","src":"4510:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4509:6:57"},"scope":18601,"src":"4435:180:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17787,"nodeType":"Block","src":"4727:127:57","statements":[{"expression":{"arguments":[{"arguments":[{"id":17781,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17768,"src":"4805:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":17782,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"4812:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":17783,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4828:17:57","memberName":"AFTER_SWAP_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18674,"src":"4812:33:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":17778,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17766,"src":"4786:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":17776,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"4764:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17777,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4779:6:57","memberName":"unwrap","nodeType":"MemberAccess","src":"4764:21:57","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":17779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4764:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4794:10:57","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"4764:40:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":17784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4764:82:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":17774,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"4744:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17775,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4759:4:57","memberName":"wrap","nodeType":"MemberAccess","src":"4744:19:57","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":17785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4744:103:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":17773,"id":17786,"nodeType":"Return","src":"4737:110:57"}]},"id":17788,"implemented":true,"kind":"function","modifiers":[],"name":"setShouldCallAfterSwap","nameLocation":"4630:22:57","nodeType":"FunctionDefinition","parameters":{"id":17769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17766,"mutability":"mutable","name":"config","nameLocation":"4668:6:57","nodeType":"VariableDeclaration","scope":17788,"src":"4653:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17765,"nodeType":"UserDefinedTypeName","pathNode":{"id":17764,"name":"PoolConfigBits","nameLocations":["4653:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"4653:14:57"},"referencedDeclaration":2184,"src":"4653:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":17768,"mutability":"mutable","name":"value","nameLocation":"4681:5:57","nodeType":"VariableDeclaration","scope":17788,"src":"4676:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17767,"name":"bool","nodeType":"ElementaryTypeName","src":"4676:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4652:35:57"},"returnParameters":{"id":17773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17772,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17788,"src":"4711:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17771,"nodeType":"UserDefinedTypeName","pathNode":{"id":17770,"name":"PoolConfigBits","nameLocations":["4711:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"4711:14:57"},"referencedDeclaration":2184,"src":"4711:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"4710:16:57"},"scope":18601,"src":"4621:233:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17805,"nodeType":"Block","src":"4950:109:57","statements":[{"expression":{"arguments":[{"expression":{"id":17801,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"5008:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":17802,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5024:27:57","memberName":"BEFORE_ADD_LIQUIDITY_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18679,"src":"5008:43:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":17798,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17791,"src":"4989:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":17796,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"4967:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17797,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4982:6:57","memberName":"unwrap","nodeType":"MemberAccess","src":"4967:21:57","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":17799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4967:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4997:10:57","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"4967:40:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":17803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4967:85:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17795,"id":17804,"nodeType":"Return","src":"4960:92:57"}]},"id":17806,"implemented":true,"kind":"function","modifiers":[],"name":"shouldCallBeforeAddLiquidity","nameLocation":"4869:28:57","nodeType":"FunctionDefinition","parameters":{"id":17792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17791,"mutability":"mutable","name":"config","nameLocation":"4913:6:57","nodeType":"VariableDeclaration","scope":17806,"src":"4898:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17790,"nodeType":"UserDefinedTypeName","pathNode":{"id":17789,"name":"PoolConfigBits","nameLocations":["4898:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"4898:14:57"},"referencedDeclaration":2184,"src":"4898:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"4897:23:57"},"returnParameters":{"id":17795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17794,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17806,"src":"4944:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17793,"name":"bool","nodeType":"ElementaryTypeName","src":"4944:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4943:6:57"},"scope":18601,"src":"4860:199:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17830,"nodeType":"Block","src":"5180:179:57","statements":[{"expression":{"arguments":[{"arguments":[{"id":17824,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17811,"src":"5287:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":17825,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"5294:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":17826,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5310:27:57","memberName":"BEFORE_ADD_LIQUIDITY_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18679,"src":"5294:43:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":17821,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17809,"src":"5268:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":17819,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"5246:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17820,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5261:6:57","memberName":"unwrap","nodeType":"MemberAccess","src":"5246:21:57","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":17822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5246:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5276:10:57","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"5246:40:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":17827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5246:92:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":17817,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"5209:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17818,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5224:4:57","memberName":"wrap","nodeType":"MemberAccess","src":"5209:19:57","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":17828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5209:143:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":17816,"id":17829,"nodeType":"Return","src":"5190:162:57"}]},"id":17831,"implemented":true,"kind":"function","modifiers":[],"name":"setShouldCallBeforeAddLiquidity","nameLocation":"5074:31:57","nodeType":"FunctionDefinition","parameters":{"id":17812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17809,"mutability":"mutable","name":"config","nameLocation":"5121:6:57","nodeType":"VariableDeclaration","scope":17831,"src":"5106:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17808,"nodeType":"UserDefinedTypeName","pathNode":{"id":17807,"name":"PoolConfigBits","nameLocations":["5106:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"5106:14:57"},"referencedDeclaration":2184,"src":"5106:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":17811,"mutability":"mutable","name":"value","nameLocation":"5134:5:57","nodeType":"VariableDeclaration","scope":17831,"src":"5129:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17810,"name":"bool","nodeType":"ElementaryTypeName","src":"5129:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5105:35:57"},"returnParameters":{"id":17816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17815,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17831,"src":"5164:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17814,"nodeType":"UserDefinedTypeName","pathNode":{"id":17813,"name":"PoolConfigBits","nameLocations":["5164:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"5164:14:57"},"referencedDeclaration":2184,"src":"5164:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"5163:16:57"},"scope":18601,"src":"5065:294:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17848,"nodeType":"Block","src":"5454:108:57","statements":[{"expression":{"arguments":[{"expression":{"id":17844,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"5512:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":17845,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5528:26:57","memberName":"AFTER_ADD_LIQUIDITY_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18684,"src":"5512:42:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":17841,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17834,"src":"5493:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":17839,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"5471:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17840,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5486:6:57","memberName":"unwrap","nodeType":"MemberAccess","src":"5471:21:57","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":17842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5471:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5501:10:57","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"5471:40:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":17846,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5471:84:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17838,"id":17847,"nodeType":"Return","src":"5464:91:57"}]},"id":17849,"implemented":true,"kind":"function","modifiers":[],"name":"shouldCallAfterAddLiquidity","nameLocation":"5374:27:57","nodeType":"FunctionDefinition","parameters":{"id":17835,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17834,"mutability":"mutable","name":"config","nameLocation":"5417:6:57","nodeType":"VariableDeclaration","scope":17849,"src":"5402:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17833,"nodeType":"UserDefinedTypeName","pathNode":{"id":17832,"name":"PoolConfigBits","nameLocations":["5402:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"5402:14:57"},"referencedDeclaration":2184,"src":"5402:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"5401:23:57"},"returnParameters":{"id":17838,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17837,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17849,"src":"5448:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17836,"name":"bool","nodeType":"ElementaryTypeName","src":"5448:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5447:6:57"},"scope":18601,"src":"5365:197:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17873,"nodeType":"Block","src":"5682:178:57","statements":[{"expression":{"arguments":[{"arguments":[{"id":17867,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17854,"src":"5789:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":17868,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"5796:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":17869,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5812:26:57","memberName":"AFTER_ADD_LIQUIDITY_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18684,"src":"5796:42:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":17864,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17852,"src":"5770:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":17862,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"5748:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17863,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5763:6:57","memberName":"unwrap","nodeType":"MemberAccess","src":"5748:21:57","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":17865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5748:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5778:10:57","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"5748:40:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":17870,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5748:91:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":17860,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"5711:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17861,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5726:4:57","memberName":"wrap","nodeType":"MemberAccess","src":"5711:19:57","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":17871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5711:142:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":17859,"id":17872,"nodeType":"Return","src":"5692:161:57"}]},"id":17874,"implemented":true,"kind":"function","modifiers":[],"name":"setShouldCallAfterAddLiquidity","nameLocation":"5577:30:57","nodeType":"FunctionDefinition","parameters":{"id":17855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17852,"mutability":"mutable","name":"config","nameLocation":"5623:6:57","nodeType":"VariableDeclaration","scope":17874,"src":"5608:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17851,"nodeType":"UserDefinedTypeName","pathNode":{"id":17850,"name":"PoolConfigBits","nameLocations":["5608:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"5608:14:57"},"referencedDeclaration":2184,"src":"5608:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":17854,"mutability":"mutable","name":"value","nameLocation":"5636:5:57","nodeType":"VariableDeclaration","scope":17874,"src":"5631:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17853,"name":"bool","nodeType":"ElementaryTypeName","src":"5631:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5607:35:57"},"returnParameters":{"id":17859,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17858,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17874,"src":"5666:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17857,"nodeType":"UserDefinedTypeName","pathNode":{"id":17856,"name":"PoolConfigBits","nameLocations":["5666:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"5666:14:57"},"referencedDeclaration":2184,"src":"5666:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"5665:16:57"},"scope":18601,"src":"5568:292:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17891,"nodeType":"Block","src":"5959:112:57","statements":[{"expression":{"arguments":[{"expression":{"id":17887,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"6017:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":17888,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6033:30:57","memberName":"BEFORE_REMOVE_LIQUIDITY_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18689,"src":"6017:46:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":17884,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17877,"src":"5998:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":17882,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"5976:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17883,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5991:6:57","memberName":"unwrap","nodeType":"MemberAccess","src":"5976:21:57","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":17885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5976:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6006:10:57","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"5976:40:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":17889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5976:88:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17881,"id":17890,"nodeType":"Return","src":"5969:95:57"}]},"id":17892,"implemented":true,"kind":"function","modifiers":[],"name":"shouldCallBeforeRemoveLiquidity","nameLocation":"5875:31:57","nodeType":"FunctionDefinition","parameters":{"id":17878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17877,"mutability":"mutable","name":"config","nameLocation":"5922:6:57","nodeType":"VariableDeclaration","scope":17892,"src":"5907:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17876,"nodeType":"UserDefinedTypeName","pathNode":{"id":17875,"name":"PoolConfigBits","nameLocations":["5907:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"5907:14:57"},"referencedDeclaration":2184,"src":"5907:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"5906:23:57"},"returnParameters":{"id":17881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17880,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17892,"src":"5953:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17879,"name":"bool","nodeType":"ElementaryTypeName","src":"5953:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5952:6:57"},"scope":18601,"src":"5866:205:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17916,"nodeType":"Block","src":"6217:182:57","statements":[{"expression":{"arguments":[{"arguments":[{"id":17910,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17897,"src":"6324:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":17911,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"6331:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":17912,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6347:30:57","memberName":"BEFORE_REMOVE_LIQUIDITY_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18689,"src":"6331:46:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":17907,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17895,"src":"6305:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":17905,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"6283:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17906,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6298:6:57","memberName":"unwrap","nodeType":"MemberAccess","src":"6283:21:57","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":17908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6283:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6313:10:57","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"6283:40:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":17913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6283:95:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":17903,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"6246:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17904,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6261:4:57","memberName":"wrap","nodeType":"MemberAccess","src":"6246:19:57","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":17914,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6246:146:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":17902,"id":17915,"nodeType":"Return","src":"6227:165:57"}]},"id":17917,"implemented":true,"kind":"function","modifiers":[],"name":"setShouldCallBeforeRemoveLiquidity","nameLocation":"6086:34:57","nodeType":"FunctionDefinition","parameters":{"id":17898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17895,"mutability":"mutable","name":"config","nameLocation":"6145:6:57","nodeType":"VariableDeclaration","scope":17917,"src":"6130:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17894,"nodeType":"UserDefinedTypeName","pathNode":{"id":17893,"name":"PoolConfigBits","nameLocations":["6130:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"6130:14:57"},"referencedDeclaration":2184,"src":"6130:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":17897,"mutability":"mutable","name":"value","nameLocation":"6166:5:57","nodeType":"VariableDeclaration","scope":17917,"src":"6161:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17896,"name":"bool","nodeType":"ElementaryTypeName","src":"6161:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6120:57:57"},"returnParameters":{"id":17902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17901,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17917,"src":"6201:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17900,"nodeType":"UserDefinedTypeName","pathNode":{"id":17899,"name":"PoolConfigBits","nameLocations":["6201:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"6201:14:57"},"referencedDeclaration":2184,"src":"6201:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"6200:16:57"},"scope":18601,"src":"6077:322:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17934,"nodeType":"Block","src":"6497:111:57","statements":[{"expression":{"arguments":[{"expression":{"id":17930,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"6555:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":17931,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6571:29:57","memberName":"AFTER_REMOVE_LIQUIDITY_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18694,"src":"6555:45:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":17927,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17920,"src":"6536:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":17925,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"6514:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17926,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6529:6:57","memberName":"unwrap","nodeType":"MemberAccess","src":"6514:21:57","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":17928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6514:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6544:10:57","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"6514:40:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":17932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6514:87:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17924,"id":17933,"nodeType":"Return","src":"6507:94:57"}]},"id":17935,"implemented":true,"kind":"function","modifiers":[],"name":"shouldCallAfterRemoveLiquidity","nameLocation":"6414:30:57","nodeType":"FunctionDefinition","parameters":{"id":17921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17920,"mutability":"mutable","name":"config","nameLocation":"6460:6:57","nodeType":"VariableDeclaration","scope":17935,"src":"6445:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17919,"nodeType":"UserDefinedTypeName","pathNode":{"id":17918,"name":"PoolConfigBits","nameLocations":["6445:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"6445:14:57"},"referencedDeclaration":2184,"src":"6445:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"6444:23:57"},"returnParameters":{"id":17924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17923,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17935,"src":"6491:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17922,"name":"bool","nodeType":"ElementaryTypeName","src":"6491:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6490:6:57"},"scope":18601,"src":"6405:203:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17959,"nodeType":"Block","src":"6753:181:57","statements":[{"expression":{"arguments":[{"arguments":[{"id":17953,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17940,"src":"6860:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":17954,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"6867:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":17955,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6883:29:57","memberName":"AFTER_REMOVE_LIQUIDITY_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18694,"src":"6867:45:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":17950,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17938,"src":"6841:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":17948,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"6819:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17949,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6834:6:57","memberName":"unwrap","nodeType":"MemberAccess","src":"6819:21:57","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":17951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6819:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":17952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6849:10:57","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"6819:40:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":17956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6819:94:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":17946,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"6782:14:57","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":17947,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6797:4:57","memberName":"wrap","nodeType":"MemberAccess","src":"6782:19:57","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":17957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6782:145:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":17945,"id":17958,"nodeType":"Return","src":"6763:164:57"}]},"id":17960,"implemented":true,"kind":"function","modifiers":[],"name":"setShouldCallAfterRemoveLiquidity","nameLocation":"6623:33:57","nodeType":"FunctionDefinition","parameters":{"id":17941,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17938,"mutability":"mutable","name":"config","nameLocation":"6681:6:57","nodeType":"VariableDeclaration","scope":17960,"src":"6666:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17937,"nodeType":"UserDefinedTypeName","pathNode":{"id":17936,"name":"PoolConfigBits","nameLocations":["6666:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"6666:14:57"},"referencedDeclaration":2184,"src":"6666:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":17940,"mutability":"mutable","name":"value","nameLocation":"6702:5:57","nodeType":"VariableDeclaration","scope":17960,"src":"6697:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17939,"name":"bool","nodeType":"ElementaryTypeName","src":"6697:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6656:57:57"},"returnParameters":{"id":17945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17944,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17960,"src":"6737:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17943,"nodeType":"UserDefinedTypeName","pathNode":{"id":17942,"name":"PoolConfigBits","nameLocations":["6737:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"6737:14:57"},"referencedDeclaration":2184,"src":"6737:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"6736:16:57"},"scope":18601,"src":"6614:320:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":18009,"nodeType":"Block","src":"7051:932:57","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17973,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17963,"src":"7137:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":17974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7144:25:57","memberName":"enableHookAdjustedAmounts","nodeType":"MemberAccess","referencedDeclaration":17548,"src":"7137:32:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":17975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7137:34:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17976,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17963,"src":"7217:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":17977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7224:26:57","memberName":"shouldCallBeforeInitialize","nodeType":"MemberAccess","referencedDeclaration":17591,"src":"7217:33:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":17978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7217:35:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17979,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17963,"src":"7297:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":17980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7304:25:57","memberName":"shouldCallAfterInitialize","nodeType":"MemberAccess","referencedDeclaration":17634,"src":"7297:32:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":17981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7297:34:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17982,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17963,"src":"7379:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":17983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7386:28:57","memberName":"shouldCallBeforeAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":17806,"src":"7379:35:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":17984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7379:37:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17985,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17963,"src":"7463:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":17986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7470:27:57","memberName":"shouldCallAfterAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":17849,"src":"7463:34:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":17987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7463:36:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17988,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17963,"src":"7550:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":17989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7557:31:57","memberName":"shouldCallBeforeRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":17892,"src":"7550:38:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":17990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7550:40:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17991,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17963,"src":"7640:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":17992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7647:30:57","memberName":"shouldCallAfterRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":17935,"src":"7640:37:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":17993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7640:39:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17994,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17963,"src":"7730:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":17995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7737:31:57","memberName":"shouldCallComputeDynamicSwapFee","nodeType":"MemberAccess","referencedDeclaration":17677,"src":"7730:38:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":17996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7730:40:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17997,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17963,"src":"7810:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":17998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7817:20:57","memberName":"shouldCallBeforeSwap","nodeType":"MemberAccess","referencedDeclaration":17720,"src":"7810:27:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":17999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7810:29:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18000,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17963,"src":"7878:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":18001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7885:19:57","memberName":"shouldCallAfterSwap","nodeType":"MemberAccess","referencedDeclaration":17763,"src":"7878:26:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":18002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7878:28:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[{"id":18005,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17966,"src":"7947:13:57","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}],"id":18004,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7939:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18003,"name":"address","nodeType":"ElementaryTypeName","src":"7939:7:57","typeDescriptions":{}}},"id":18006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7939:22:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17972,"name":"HooksConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2253,"src":"7080:11:57","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_HooksConfig_$2253_storage_ptr_$","typeString":"type(struct HooksConfig storage pointer)"}},"id":18007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["7110:25:57","7189:26:57","7270:25:57","7349:28:57","7434:27:57","7517:31:57","7608:30:57","7697:31:57","7788:20:57","7857:19:57","7924:13:57"],"names":["enableHookAdjustedAmounts","shouldCallBeforeInitialize","shouldCallAfterInitialize","shouldCallBeforeAddLiquidity","shouldCallAfterAddLiquidity","shouldCallBeforeRemoveLiquidity","shouldCallAfterRemoveLiquidity","shouldCallComputeDynamicSwapFee","shouldCallBeforeSwap","shouldCallAfterSwap","hooksContract"],"nodeType":"FunctionCall","src":"7080:896:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2253_memory_ptr","typeString":"struct HooksConfig memory"}},"functionReturnParameters":17971,"id":18008,"nodeType":"Return","src":"7061:915:57"}]},"id":18010,"implemented":true,"kind":"function","modifiers":[],"name":"toHooksConfig","nameLocation":"6949:13:57","nodeType":"FunctionDefinition","parameters":{"id":17967,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17963,"mutability":"mutable","name":"config","nameLocation":"6978:6:57","nodeType":"VariableDeclaration","scope":18010,"src":"6963:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":17962,"nodeType":"UserDefinedTypeName","pathNode":{"id":17961,"name":"PoolConfigBits","nameLocations":["6963:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"6963:14:57"},"referencedDeclaration":2184,"src":"6963:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":17966,"mutability":"mutable","name":"hooksContract","nameLocation":"6993:13:57","nodeType":"VariableDeclaration","scope":18010,"src":"6986:20:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"},"typeName":{"id":17965,"nodeType":"UserDefinedTypeName","pathNode":{"id":17964,"name":"IHooks","nameLocations":["6986:6:57"],"nodeType":"IdentifierPath","referencedDeclaration":300,"src":"6986:6:57"},"referencedDeclaration":300,"src":"6986:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"visibility":"internal"}],"src":"6962:45:57"},"returnParameters":{"id":17971,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17970,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18010,"src":"7031:18:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2253_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":17969,"nodeType":"UserDefinedTypeName","pathNode":{"id":17968,"name":"HooksConfig","nameLocations":["7031:11:57"],"nodeType":"IdentifierPath","referencedDeclaration":2253,"src":"7031:11:57"},"referencedDeclaration":2253,"src":"7031:11:57","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2253_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"}],"src":"7030:20:57"},"scope":18601,"src":"6940:1043:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":18059,"nodeType":"Block","src":"8655:644:57","statements":[{"assignments":[18027,18029],"declarations":[{"constant":false,"id":18027,"mutability":"mutable","name":"success","nameLocation":"8671:7:57","nodeType":"VariableDeclaration","scope":18059,"src":"8666:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18026,"name":"bool","nodeType":"ElementaryTypeName","src":"8666:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":18029,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"8688:17:57","nodeType":"VariableDeclaration","scope":18059,"src":"8680:25:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18028,"name":"uint256","nodeType":"ElementaryTypeName","src":"8680:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18036,"initialValue":{"arguments":[{"id":18032,"name":"swapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18014,"src":"8770:10:57","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"}},{"id":18033,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18016,"src":"8794:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18034,"name":"staticSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18018,"src":"8812:23:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18030,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18021,"src":"8709:13:57","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"id":18031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8723:33:57","memberName":"onComputeDynamicSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":299,"src":"8709:47:57","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_struct$_PoolSwapParams_$2374_memory_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (struct PoolSwapParams memory,address,uint256) view external returns (bool,uint256)"}},"id":18035,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8709:136:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"8665:180:57"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18037,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18027,"src":"8860:7:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":18038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8871:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"8860:16:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18046,"nodeType":"IfStatement","src":"8856:93:57","trueBody":{"id":18045,"nodeType":"Block","src":"8878:71:57","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18040,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"8899:12:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":18042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8912:24:57","memberName":"DynamicSwapFeeHookFailed","nodeType":"MemberAccess","referencedDeclaration":1081,"src":"8899:37:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8899:39:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18044,"nodeType":"RevertStatement","src":"8892:46:57"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18047,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18029,"src":"9153:17:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":18048,"name":"MAX_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2473,"src":"9173:18:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9153:38:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18056,"nodeType":"IfStatement","src":"9149:109:57","trueBody":{"id":18055,"nodeType":"Block","src":"9193:65:57","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18050,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"9214:12:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":18052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9227:18:57","memberName":"PercentageAboveMax","nodeType":"MemberAccess","referencedDeclaration":1221,"src":"9214:31:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9214:33:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18054,"nodeType":"RevertStatement","src":"9207:40:57"}]}},{"expression":{"id":18057,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18029,"src":"9275:17:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18025,"id":18058,"nodeType":"Return","src":"9268:24:57"}]},"documentation":{"id":18011,"nodeType":"StructuredDocumentation","src":"7989:449:57","text":" @dev Call the `onComputeDynamicSwapFeePercentage` hook and return the result. Reverts on failure.\n @param swapParams The swap parameters used to calculate the fee\n @param pool Pool address\n @param staticSwapFeePercentage Value of the static swap fee, for reference\n @param hooksContract Storage slot with the address of the hooks contract\n @return swapFeePercentage The calculated swap fee percentage"},"id":18060,"implemented":true,"kind":"function","modifiers":[],"name":"callComputeDynamicSwapFeeHook","nameLocation":"8452:29:57","nodeType":"FunctionDefinition","parameters":{"id":18022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18014,"mutability":"mutable","name":"swapParams","nameLocation":"8513:10:57","nodeType":"VariableDeclaration","scope":18060,"src":"8491:32:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":18013,"nodeType":"UserDefinedTypeName","pathNode":{"id":18012,"name":"PoolSwapParams","nameLocations":["8491:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2374,"src":"8491:14:57"},"referencedDeclaration":2374,"src":"8491:14:57","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":18016,"mutability":"mutable","name":"pool","nameLocation":"8541:4:57","nodeType":"VariableDeclaration","scope":18060,"src":"8533:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18015,"name":"address","nodeType":"ElementaryTypeName","src":"8533:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18018,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"8563:23:57","nodeType":"VariableDeclaration","scope":18060,"src":"8555:31:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18017,"name":"uint256","nodeType":"ElementaryTypeName","src":"8555:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18021,"mutability":"mutable","name":"hooksContract","nameLocation":"8603:13:57","nodeType":"VariableDeclaration","scope":18060,"src":"8596:20:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"},"typeName":{"id":18020,"nodeType":"UserDefinedTypeName","pathNode":{"id":18019,"name":"IHooks","nameLocations":["8596:6:57"],"nodeType":"IdentifierPath","referencedDeclaration":300,"src":"8596:6:57"},"referencedDeclaration":300,"src":"8596:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"visibility":"internal"}],"src":"8481:141:57"},"returnParameters":{"id":18025,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18024,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18060,"src":"8646:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18023,"name":"uint256","nodeType":"ElementaryTypeName","src":"8646:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8645:9:57"},"scope":18601,"src":"8443:856:57","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":18086,"nodeType":"Block","src":"9664:243:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":18074,"name":"swapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18064,"src":"9705:10:57","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"}},{"id":18075,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18066,"src":"9717:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams memory"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":18072,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18069,"src":"9678:13:57","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"id":18073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9692:12:57","memberName":"onBeforeSwap","nodeType":"MemberAccess","referencedDeclaration":273,"src":"9678:26:57","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_PoolSwapParams_$2374_memory_ptr_$_t_address_$returns$_t_bool_$","typeString":"function (struct PoolSwapParams memory,address) external returns (bool)"}},"id":18076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9678:44:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":18077,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9726:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"9678:53:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18085,"nodeType":"IfStatement","src":"9674:227:57","trueBody":{"id":18084,"nodeType":"Block","src":"9733:168:57","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18079,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"9855:12:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":18081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9868:20:57","memberName":"BeforeSwapHookFailed","nodeType":"MemberAccess","referencedDeclaration":1084,"src":"9855:33:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9855:35:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18083,"nodeType":"RevertStatement","src":"9848:42:57"}]}}]},"documentation":{"id":18061,"nodeType":"StructuredDocumentation","src":"9305:247:57","text":" @dev Call the `onBeforeSwap` hook. Reverts on failure.\n @param swapParams The swap parameters used in the hook\n @param pool Pool address\n @param hooksContract Storage slot with the address of the hooks contract"},"id":18087,"implemented":true,"kind":"function","modifiers":[],"name":"callBeforeSwapHook","nameLocation":"9566:18:57","nodeType":"FunctionDefinition","parameters":{"id":18070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18064,"mutability":"mutable","name":"swapParams","nameLocation":"9607:10:57","nodeType":"VariableDeclaration","scope":18087,"src":"9585:32:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":18063,"nodeType":"UserDefinedTypeName","pathNode":{"id":18062,"name":"PoolSwapParams","nameLocations":["9585:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2374,"src":"9585:14:57"},"referencedDeclaration":2374,"src":"9585:14:57","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2374_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":18066,"mutability":"mutable","name":"pool","nameLocation":"9627:4:57","nodeType":"VariableDeclaration","scope":18087,"src":"9619:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18065,"name":"address","nodeType":"ElementaryTypeName","src":"9619:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18069,"mutability":"mutable","name":"hooksContract","nameLocation":"9640:13:57","nodeType":"VariableDeclaration","scope":18087,"src":"9633:20:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"},"typeName":{"id":18068,"nodeType":"UserDefinedTypeName","pathNode":{"id":18067,"name":"IHooks","nameLocations":["9633:6:57"],"nodeType":"IdentifierPath","referencedDeclaration":300,"src":"9633:6:57"},"referencedDeclaration":300,"src":"9633:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"visibility":"internal"}],"src":"9584:70:57"},"returnParameters":{"id":18071,"nodeType":"ParameterList","parameters":[],"src":"9664:0:57"},"scope":18601,"src":"9557:350:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":18222,"nodeType":"Block","src":"11164:1965:57","statements":[{"assignments":[18115,18117],"declarations":[{"constant":false,"id":18115,"mutability":"mutable","name":"amountInScaled18","nameLocation":"11234:16:57","nodeType":"VariableDeclaration","scope":18222,"src":"11226:24:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18114,"name":"uint256","nodeType":"ElementaryTypeName","src":"11226:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18117,"mutability":"mutable","name":"amountOutScaled18","nameLocation":"11260:17:57","nodeType":"VariableDeclaration","scope":18222,"src":"11252:25:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18116,"name":"uint256","nodeType":"ElementaryTypeName","src":"11252:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18132,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},"id":18122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18118,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18100,"src":"11281:15:57","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":18119,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11297:4:57","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2341,"src":"11281:20:57","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":18120,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2337,"src":"11305:8:57","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$2337_$","typeString":"type(enum SwapKind)"}},"id":18121,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11314:8:57","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":2335,"src":"11305:17:57","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"src":"11281:41:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"id":18127,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18093,"src":"11406:24:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18128,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18103,"src":"11432:5:57","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":18129,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11438:19:57","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":2260,"src":"11432:25:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":18130,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11405:53:57","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":18131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11281:177:57","trueExpression":{"components":[{"expression":{"id":18123,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18103,"src":"11338:5:57","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":18124,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11344:19:57","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":2260,"src":"11338:25:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18125,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18093,"src":"11365:24:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":18126,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11337:53:57","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11225:233:57"},{"assignments":[18134,18136],"declarations":[{"constant":false,"id":18134,"mutability":"mutable","name":"success","nameLocation":"11475:7:57","nodeType":"VariableDeclaration","scope":18222,"src":"11470:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18133,"name":"bool","nodeType":"ElementaryTypeName","src":"11470:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":18136,"mutability":"mutable","name":"hookAdjustedAmountCalculatedRaw","nameLocation":"11492:31:57","nodeType":"VariableDeclaration","scope":18222,"src":"11484:39:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18135,"name":"uint256","nodeType":"ElementaryTypeName","src":"11484:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18167,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":18140,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18100,"src":"11606:15:57","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":18141,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11622:4:57","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2341,"src":"11606:20:57","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},{"expression":{"id":18142,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18100,"src":"11653:15:57","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":18143,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11669:7:57","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":2346,"src":"11653:23:57","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"expression":{"id":18144,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18100,"src":"11704:15:57","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":18145,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11720:8:57","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":2349,"src":"11704:24:57","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"id":18146,"name":"amountInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18115,"src":"11764:16:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18147,"name":"amountOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18117,"src":"11817:17:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":18148,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18106,"src":"11876:8:57","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":18149,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11885:20:57","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"11876:29:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":18152,"indexExpression":{"expression":{"id":18150,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18103,"src":"11906:5:57","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":18151,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11912:7:57","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":2256,"src":"11906:13:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11876:44:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":18153,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18106,"src":"11963:8:57","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":18154,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11972:20:57","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"11963:29:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":18157,"indexExpression":{"expression":{"id":18155,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18103,"src":"11993:5:57","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState memory"}},"id":18156,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11999:8:57","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":2258,"src":"11993:14:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11963:45:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18158,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18093,"src":"12052:24:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18159,"name":"amountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18095,"src":"12115:19:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18160,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18097,"src":"12160:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18161,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18100,"src":"12190:15:57","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":18162,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12206:4:57","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2343,"src":"12190:20:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18163,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18100,"src":"12238:15:57","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":18164,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12254:8:57","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":2355,"src":"12238:24:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":18139,"name":"AfterSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2403,"src":"11566:15:57","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AfterSwapParams_$2403_storage_ptr_$","typeString":"type(struct AfterSwapParams storage pointer)"}},"id":18165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["11600:4:57","11644:7:57","11694:8:57","11746:16:57","11798:17:57","11852:22:57","11938:23:57","12026:24:57","12094:19:57","12152:6:57","12184:4:57","12228:8:57"],"names":["kind","tokenIn","tokenOut","amountInScaled18","amountOutScaled18","tokenInBalanceScaled18","tokenOutBalanceScaled18","amountCalculatedScaled18","amountCalculatedRaw","router","pool","userData"],"nodeType":"FunctionCall","src":"11566:711:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$2403_memory_ptr","typeString":"struct AfterSwapParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AfterSwapParams_$2403_memory_ptr","typeString":"struct AfterSwapParams memory"}],"expression":{"id":18137,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18109,"src":"11527:13:57","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"id":18138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11541:11:57","memberName":"onAfterSwap","nodeType":"MemberAccess","referencedDeclaration":284,"src":"11527:25:57","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_AfterSwapParams_$2403_memory_ptr_$returns$_t_bool_$_t_uint256_$","typeString":"function (struct AfterSwapParams memory) external returns (bool,uint256)"}},"id":18166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11527:760:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11469:818:57"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18168,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18134,"src":"12302:7:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":18169,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12313:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"12302:16:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18177,"nodeType":"IfStatement","src":"12298:188:57","trueBody":{"id":18176,"nodeType":"Block","src":"12320:166:57","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18171,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"12441:12:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":18173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12454:19:57","memberName":"AfterSwapHookFailed","nodeType":"MemberAccess","referencedDeclaration":1087,"src":"12441:32:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12441:34:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18175,"nodeType":"RevertStatement","src":"12434:41:57"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18178,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18091,"src":"12588:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":18179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12595:25:57","memberName":"enableHookAdjustedAmounts","nodeType":"MemberAccess","referencedDeclaration":17548,"src":"12588:32:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":18180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12588:34:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":18181,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12626:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"12588:43:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18186,"nodeType":"IfStatement","src":"12584:100:57","trueBody":{"id":18185,"nodeType":"Block","src":"12633:51:57","statements":[{"expression":{"id":18183,"name":"amountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18095,"src":"12654:19:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18113,"id":18184,"nodeType":"Return","src":"12647:26:57"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},"id":18191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18187,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18100,"src":"12712:15:57","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":18188,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12728:4:57","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2341,"src":"12712:20:57","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":18189,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2337,"src":"12736:8:57","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$2337_$","typeString":"type(enum SwapKind)"}},"id":18190,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12745:8:57","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":2335,"src":"12736:17:57","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"src":"12712:41:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18192,"name":"hookAdjustedAmountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18136,"src":"12757:31:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":18193,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18100,"src":"12791:15:57","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":18194,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12807:8:57","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":2353,"src":"12791:24:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12757:58:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12712:103:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":18197,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12711:105:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"},"id":18202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18198,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18100,"src":"12833:15:57","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":18199,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12849:4:57","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2341,"src":"12833:20:57","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":18200,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2337,"src":"12857:8:57","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$2337_$","typeString":"type(enum SwapKind)"}},"id":18201,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12866:9:57","memberName":"EXACT_OUT","nodeType":"MemberAccess","referencedDeclaration":2336,"src":"12857:18:57","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2337","typeString":"enum SwapKind"}},"src":"12833:42:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18203,"name":"hookAdjustedAmountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18136,"src":"12879:31:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":18204,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18100,"src":"12913:15:57","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":18205,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12929:8:57","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":2353,"src":"12913:24:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12879:58:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12833:104:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":18208,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12832:106:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12711:227:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18219,"nodeType":"IfStatement","src":"12694:380:57","trueBody":{"id":18218,"nodeType":"Block","src":"12949:125:57","statements":[{"errorCall":{"arguments":[{"id":18213,"name":"hookAdjustedAmountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18136,"src":"13005:31:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18214,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18100,"src":"13038:15:57","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":18215,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13054:8:57","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":2353,"src":"13038:24:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18210,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"12970:12:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":18212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12983:21:57","memberName":"HookAdjustedSwapLimit","nodeType":"MemberAccess","referencedDeclaration":1134,"src":"12970:34:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":18216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12970:93:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18217,"nodeType":"RevertStatement","src":"12963:100:57"}]}},{"expression":{"id":18220,"name":"hookAdjustedAmountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18136,"src":"13091:31:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18113,"id":18221,"nodeType":"Return","src":"13084:38:57"}]},"documentation":{"id":18088,"nodeType":"StructuredDocumentation","src":"9913:908:57","text":" @dev Call the `onAfterSwap` hook, then validate and return the result. Reverts on failure, or if the limits\n are violated. If the hook contract did not enable hook-adjusted amounts, it will ignore the hook results and\n return the original `amountCalculatedRaw`.\n @param config The encoded pool configuration\n @param amountCalculatedScaled18 Token amount calculated by the swap\n @param amountCalculatedRaw Token amount calculated by the swap\n @param router Router address\n @param vaultSwapParams The swap parameters\n @param state Temporary state used in swap operations\n @param poolData Struct containing balance and token information of the pool\n @param hooksContract Storage slot with the address of the hooks contract\n @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook"},"id":18223,"implemented":true,"kind":"function","modifiers":[],"name":"callAfterSwapHook","nameLocation":"10835:17:57","nodeType":"FunctionDefinition","parameters":{"id":18110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18091,"mutability":"mutable","name":"config","nameLocation":"10877:6:57","nodeType":"VariableDeclaration","scope":18223,"src":"10862:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":18090,"nodeType":"UserDefinedTypeName","pathNode":{"id":18089,"name":"PoolConfigBits","nameLocations":["10862:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"10862:14:57"},"referencedDeclaration":2184,"src":"10862:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":18093,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"10901:24:57","nodeType":"VariableDeclaration","scope":18223,"src":"10893:32:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18092,"name":"uint256","nodeType":"ElementaryTypeName","src":"10893:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18095,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"10943:19:57","nodeType":"VariableDeclaration","scope":18223,"src":"10935:27:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18094,"name":"uint256","nodeType":"ElementaryTypeName","src":"10935:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18097,"mutability":"mutable","name":"router","nameLocation":"10980:6:57","nodeType":"VariableDeclaration","scope":18223,"src":"10972:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18096,"name":"address","nodeType":"ElementaryTypeName","src":"10972:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18100,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"11019:15:57","nodeType":"VariableDeclaration","scope":18223,"src":"10996:38:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":18099,"nodeType":"UserDefinedTypeName","pathNode":{"id":18098,"name":"VaultSwapParams","nameLocations":["10996:15:57"],"nodeType":"IdentifierPath","referencedDeclaration":2356,"src":"10996:15:57"},"referencedDeclaration":2356,"src":"10996:15:57","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2356_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":18103,"mutability":"mutable","name":"state","nameLocation":"11061:5:57","nodeType":"VariableDeclaration","scope":18223,"src":"11044:22:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":18102,"nodeType":"UserDefinedTypeName","pathNode":{"id":18101,"name":"SwapState","nameLocations":["11044:9:57"],"nodeType":"IdentifierPath","referencedDeclaration":2263,"src":"11044:9:57"},"referencedDeclaration":2263,"src":"11044:9:57","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$2263_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"},{"constant":false,"id":18106,"mutability":"mutable","name":"poolData","nameLocation":"11092:8:57","nodeType":"VariableDeclaration","scope":18223,"src":"11076:24:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":18105,"nodeType":"UserDefinedTypeName","pathNode":{"id":18104,"name":"PoolData","nameLocations":["11076:8:57"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"11076:8:57"},"referencedDeclaration":2331,"src":"11076:8:57","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":18109,"mutability":"mutable","name":"hooksContract","nameLocation":"11117:13:57","nodeType":"VariableDeclaration","scope":18223,"src":"11110:20:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"},"typeName":{"id":18108,"nodeType":"UserDefinedTypeName","pathNode":{"id":18107,"name":"IHooks","nameLocations":["11110:6:57"],"nodeType":"IdentifierPath","referencedDeclaration":300,"src":"11110:6:57"},"referencedDeclaration":300,"src":"11110:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"visibility":"internal"}],"src":"10852:284:57"},"returnParameters":{"id":18113,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18112,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18223,"src":"11155:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18111,"name":"uint256","nodeType":"ElementaryTypeName","src":"11155:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11154:9:57"},"scope":18601,"src":"10826:2303:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":18265,"nodeType":"Block","src":"13815:416:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":18243,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18226,"src":"13894:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18244,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18232,"src":"13918:6:57","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":18245,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13925:4:57","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"13918:11:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18246,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18232,"src":"13947:6:57","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":18247,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13954:4:57","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2422,"src":"13947:11:57","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"}},{"id":18248,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18229,"src":"13976:20:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":18249,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18232,"src":"14014:6:57","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":18250,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14021:15:57","memberName":"minBptAmountOut","nodeType":"MemberAccess","referencedDeclaration":2419,"src":"14014:22:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18251,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18235,"src":"14054:8:57","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":18252,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14063:20:57","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"14054:29:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":18253,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18232,"src":"14101:6:57","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":18254,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14108:8:57","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":2424,"src":"14101:15:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18241,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18238,"src":"13842:13:57","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"id":18242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13856:20:57","memberName":"onBeforeAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":181,"src":"13842:34:57","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_enum$_AddLiquidityKind_$2409_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,address,enum AddLiquidityKind,uint256[] memory,uint256,uint256[] memory,bytes memory) external returns (bool)"}},"id":18255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13842:288:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":18256,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14134:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"13842:297:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18264,"nodeType":"IfStatement","src":"13825:400:57","trueBody":{"id":18263,"nodeType":"Block","src":"14150:75:57","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18258,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"14171:12:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":18260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14184:28:57","memberName":"BeforeAddLiquidityHookFailed","nodeType":"MemberAccess","referencedDeclaration":1096,"src":"14171:41:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14171:43:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18262,"nodeType":"RevertStatement","src":"14164:50:57"}]}}]},"documentation":{"id":18224,"nodeType":"StructuredDocumentation","src":"13135:447:57","text":" @dev Call the `onBeforeAddLiquidity` hook. Reverts on failure.\n @param router Router address\n @param maxAmountsInScaled18 An array with maximum amounts for each input token of the add liquidity operation\n @param params The add liquidity parameters\n @param poolData Struct containing balance and token information of the pool\n @param hooksContract Storage slot with the address of the hooks contract"},"id":18266,"implemented":true,"kind":"function","modifiers":[],"name":"callBeforeAddLiquidityHook","nameLocation":"13596:26:57","nodeType":"FunctionDefinition","parameters":{"id":18239,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18226,"mutability":"mutable","name":"router","nameLocation":"13640:6:57","nodeType":"VariableDeclaration","scope":18266,"src":"13632:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18225,"name":"address","nodeType":"ElementaryTypeName","src":"13632:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18229,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"13673:20:57","nodeType":"VariableDeclaration","scope":18266,"src":"13656:37:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18227,"name":"uint256","nodeType":"ElementaryTypeName","src":"13656:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18228,"nodeType":"ArrayTypeName","src":"13656:9:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":18232,"mutability":"mutable","name":"params","nameLocation":"13729:6:57","nodeType":"VariableDeclaration","scope":18266,"src":"13703:32:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":18231,"nodeType":"UserDefinedTypeName","pathNode":{"id":18230,"name":"AddLiquidityParams","nameLocations":["13703:18:57"],"nodeType":"IdentifierPath","referencedDeclaration":2425,"src":"13703:18:57"},"referencedDeclaration":2425,"src":"13703:18:57","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"},{"constant":false,"id":18235,"mutability":"mutable","name":"poolData","nameLocation":"13761:8:57","nodeType":"VariableDeclaration","scope":18266,"src":"13745:24:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":18234,"nodeType":"UserDefinedTypeName","pathNode":{"id":18233,"name":"PoolData","nameLocations":["13745:8:57"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"13745:8:57"},"referencedDeclaration":2331,"src":"13745:8:57","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":18238,"mutability":"mutable","name":"hooksContract","nameLocation":"13786:13:57","nodeType":"VariableDeclaration","scope":18266,"src":"13779:20:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"},"typeName":{"id":18237,"nodeType":"UserDefinedTypeName","pathNode":{"id":18236,"name":"IHooks","nameLocations":["13779:6:57"],"nodeType":"IdentifierPath","referencedDeclaration":300,"src":"13779:6:57"},"referencedDeclaration":300,"src":"13779:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"visibility":"internal"}],"src":"13622:183:57"},"returnParameters":{"id":18240,"nodeType":"ParameterList","parameters":[],"src":"13815:0:57"},"scope":18601,"src":"13587:644:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":18382,"nodeType":"Block","src":"15588:1128:57","statements":[{"assignments":[18296,18299],"declarations":[{"constant":false,"id":18296,"mutability":"mutable","name":"success","nameLocation":"15604:7:57","nodeType":"VariableDeclaration","scope":18382,"src":"15599:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18295,"name":"bool","nodeType":"ElementaryTypeName","src":"15599:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":18299,"mutability":"mutable","name":"hookAdjustedAmountsInRaw","nameLocation":"15630:24:57","nodeType":"VariableDeclaration","scope":18382,"src":"15613:41:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18297,"name":"uint256","nodeType":"ElementaryTypeName","src":"15613:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18298,"nodeType":"ArrayTypeName","src":"15613:9:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":18315,"initialValue":{"arguments":[{"id":18302,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18272,"src":"15705:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18303,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18283,"src":"15725:6:57","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":18304,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15732:4:57","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"15725:11:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18305,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18283,"src":"15750:6:57","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":18306,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15757:4:57","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2422,"src":"15750:11:57","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"}},{"id":18307,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18275,"src":"15775:17:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":18308,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18278,"src":"15806:12:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":18309,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18280,"src":"15832:12:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18310,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18286,"src":"15858:8:57","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":18311,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15867:20:57","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"15858:29:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":18312,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18283,"src":"15901:6:57","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":18313,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15908:8:57","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":2424,"src":"15901:15:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$2409","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18300,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18289,"src":"15658:13:57","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"id":18301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15672:19:57","memberName":"onAfterAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":210,"src":"15658:33:57","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_enum$_AddLiquidityKind_$2409_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address,address,enum AddLiquidityKind,uint256[] memory,uint256[] memory,uint256,uint256[] memory,bytes memory) external returns (bool,uint256[] memory)"}},"id":18314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15658:268:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(bool,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"15598:328:57"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18316,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18296,"src":"15941:7:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":18317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15952:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"15941:16:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18319,"name":"hookAdjustedAmountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18299,"src":"15961:24:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":18320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15986:6:57","memberName":"length","nodeType":"MemberAccess","src":"15961:31:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":18321,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18278,"src":"15996:12:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":18322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16009:6:57","memberName":"length","nodeType":"MemberAccess","src":"15996:19:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15961:54:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"15941:74:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18331,"nodeType":"IfStatement","src":"15937:154:57","trueBody":{"id":18330,"nodeType":"Block","src":"16017:74:57","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18325,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"16038:12:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":18327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16051:27:57","memberName":"AfterAddLiquidityHookFailed","nodeType":"MemberAccess","referencedDeclaration":1099,"src":"16038:40:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16038:42:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18329,"nodeType":"RevertStatement","src":"16031:49:57"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18332,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18270,"src":"16193:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":18333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16200:25:57","memberName":"enableHookAdjustedAmounts","nodeType":"MemberAccess","referencedDeclaration":17548,"src":"16193:32:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":18334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16193:34:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":18335,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16231:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"16193:43:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18340,"nodeType":"IfStatement","src":"16189:93:57","trueBody":{"id":18339,"nodeType":"Block","src":"16238:44:57","statements":[{"expression":{"id":18337,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18278,"src":"16259:12:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":18294,"id":18338,"nodeType":"Return","src":"16252:19:57"}]}},{"body":{"id":18378,"nodeType":"Block","src":"16354:314:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":18352,"name":"hookAdjustedAmountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18299,"src":"16372:24:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":18354,"indexExpression":{"id":18353,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18342,"src":"16397:1:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16372:27:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"expression":{"id":18355,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18283,"src":"16402:6:57","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":18356,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16409:12:57","memberName":"maxAmountsIn","nodeType":"MemberAccess","referencedDeclaration":2417,"src":"16402:19:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":18358,"indexExpression":{"id":18357,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18342,"src":"16422:1:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16402:22:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16372:52:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18377,"nodeType":"IfStatement","src":"16368:290:57","trueBody":{"id":18376,"nodeType":"Block","src":"16426:232:57","statements":[{"errorCall":{"arguments":[{"baseExpression":{"expression":{"id":18363,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18286,"src":"16514:8:57","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":18364,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16523:6:57","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":2314,"src":"16514:15:57","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":18366,"indexExpression":{"id":18365,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18342,"src":"16530:1:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16514:18:57","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"baseExpression":{"id":18367,"name":"hookAdjustedAmountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18299,"src":"16554:24:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":18369,"indexExpression":{"id":18368,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18342,"src":"16579:1:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16554:27:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":18370,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18283,"src":"16603:6:57","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":18371,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16610:12:57","memberName":"maxAmountsIn","nodeType":"MemberAccess","referencedDeclaration":2417,"src":"16603:19:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":18373,"indexExpression":{"id":18372,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18342,"src":"16623:1:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16603:22:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18360,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"16451:12:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":18362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16464:28:57","memberName":"HookAdjustedAmountInAboveMax","nodeType":"MemberAccess","referencedDeclaration":1160,"src":"16451:41:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$6980_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":18374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16451:192:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18375,"nodeType":"RevertStatement","src":"16444:199:57"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18345,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18342,"src":"16312:1:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":18346,"name":"hookAdjustedAmountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18299,"src":"16316:24:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":18347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16341:6:57","memberName":"length","nodeType":"MemberAccess","src":"16316:31:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16312:35:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18379,"initializationExpression":{"assignments":[18342],"declarations":[{"constant":false,"id":18342,"mutability":"mutable","name":"i","nameLocation":"16305:1:57","nodeType":"VariableDeclaration","scope":18379,"src":"16297:9:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18341,"name":"uint256","nodeType":"ElementaryTypeName","src":"16297:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18344,"initialValue":{"hexValue":"30","id":18343,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16309:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16297:13:57"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":18350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16349:3:57","subExpression":{"id":18349,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18342,"src":"16349:1:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18351,"nodeType":"ExpressionStatement","src":"16349:3:57"},"nodeType":"ForStatement","src":"16292:376:57"},{"expression":{"id":18380,"name":"hookAdjustedAmountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18299,"src":"16685:24:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":18294,"id":18381,"nodeType":"Return","src":"16678:31:57"}]},"documentation":{"id":18267,"nodeType":"StructuredDocumentation","src":"14237:995:57","text":" @dev Call the `onAfterAddLiquidity` hook, then validate and return the result. Reverts on failure, or if\n the limits are violated. If the contract did not enable hook-adjusted amounts, it will ignore the hook\n results and return the original `amountsInRaw`.\n @param config The encoded pool configuration\n @param router Router address\n @param amountsInScaled18 An array with amounts for each input token of the add liquidity operation\n @param amountsInRaw An array with amounts for each input token of the add liquidity operation\n @param bptAmountOut The BPT amount a user will receive after add liquidity operation succeeds\n @param params The add liquidity parameters\n @param poolData Struct containing balance and token information of the pool\n @param hooksContract Storage slot with the address of the hooks contract\n @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook"},"id":18383,"implemented":true,"kind":"function","modifiers":[],"name":"callAfterAddLiquidityHook","nameLocation":"15246:25:57","nodeType":"FunctionDefinition","parameters":{"id":18290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18270,"mutability":"mutable","name":"config","nameLocation":"15296:6:57","nodeType":"VariableDeclaration","scope":18383,"src":"15281:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":18269,"nodeType":"UserDefinedTypeName","pathNode":{"id":18268,"name":"PoolConfigBits","nameLocations":["15281:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"15281:14:57"},"referencedDeclaration":2184,"src":"15281:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":18272,"mutability":"mutable","name":"router","nameLocation":"15320:6:57","nodeType":"VariableDeclaration","scope":18383,"src":"15312:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18271,"name":"address","nodeType":"ElementaryTypeName","src":"15312:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18275,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"15353:17:57","nodeType":"VariableDeclaration","scope":18383,"src":"15336:34:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18273,"name":"uint256","nodeType":"ElementaryTypeName","src":"15336:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18274,"nodeType":"ArrayTypeName","src":"15336:9:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":18278,"mutability":"mutable","name":"amountsInRaw","nameLocation":"15397:12:57","nodeType":"VariableDeclaration","scope":18383,"src":"15380:29:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18276,"name":"uint256","nodeType":"ElementaryTypeName","src":"15380:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18277,"nodeType":"ArrayTypeName","src":"15380:9:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":18280,"mutability":"mutable","name":"bptAmountOut","nameLocation":"15427:12:57","nodeType":"VariableDeclaration","scope":18383,"src":"15419:20:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18279,"name":"uint256","nodeType":"ElementaryTypeName","src":"15419:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18283,"mutability":"mutable","name":"params","nameLocation":"15475:6:57","nodeType":"VariableDeclaration","scope":18383,"src":"15449:32:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":18282,"nodeType":"UserDefinedTypeName","pathNode":{"id":18281,"name":"AddLiquidityParams","nameLocations":["15449:18:57"],"nodeType":"IdentifierPath","referencedDeclaration":2425,"src":"15449:18:57"},"referencedDeclaration":2425,"src":"15449:18:57","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2425_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"},{"constant":false,"id":18286,"mutability":"mutable","name":"poolData","nameLocation":"15507:8:57","nodeType":"VariableDeclaration","scope":18383,"src":"15491:24:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":18285,"nodeType":"UserDefinedTypeName","pathNode":{"id":18284,"name":"PoolData","nameLocations":["15491:8:57"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"15491:8:57"},"referencedDeclaration":2331,"src":"15491:8:57","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":18289,"mutability":"mutable","name":"hooksContract","nameLocation":"15532:13:57","nodeType":"VariableDeclaration","scope":18383,"src":"15525:20:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"},"typeName":{"id":18288,"nodeType":"UserDefinedTypeName","pathNode":{"id":18287,"name":"IHooks","nameLocations":["15525:6:57"],"nodeType":"IdentifierPath","referencedDeclaration":300,"src":"15525:6:57"},"referencedDeclaration":300,"src":"15525:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"visibility":"internal"}],"src":"15271:280:57"},"returnParameters":{"id":18294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18293,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18383,"src":"15570:16:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18291,"name":"uint256","nodeType":"ElementaryTypeName","src":"15570:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18292,"nodeType":"ArrayTypeName","src":"15570:9:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15569:18:57"},"scope":18601,"src":"15237:1479:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":18425,"nodeType":"Block","src":"17406:422:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":18403,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18389,"src":"17488:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18404,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18392,"src":"17512:6:57","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":18405,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17519:4:57","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"17512:11:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18406,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18392,"src":"17541:6:57","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":18407,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17548:4:57","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2443,"src":"17541:11:57","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"}},{"expression":{"id":18408,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18392,"src":"17570:6:57","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":18409,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17577:14:57","memberName":"maxBptAmountIn","nodeType":"MemberAccess","referencedDeclaration":2437,"src":"17570:21:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18410,"name":"minAmountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18387,"src":"17609:21:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":18411,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18395,"src":"17648:8:57","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":18412,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17657:20:57","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"17648:29:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":18413,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18392,"src":"17695:6:57","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":18414,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17702:8:57","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":2445,"src":"17695:15:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18401,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18398,"src":"17433:13:57","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"id":18402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17447:23:57","memberName":"onBeforeRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":233,"src":"17433:37:57","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_enum$_RemoveLiquidityKind_$2430_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,address,enum RemoveLiquidityKind,uint256,uint256[] memory,uint256[] memory,bytes memory) external returns (bool)"}},"id":18415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17433:291:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":18416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17728:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"17433:300:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18424,"nodeType":"IfStatement","src":"17416:406:57","trueBody":{"id":18423,"nodeType":"Block","src":"17744:78:57","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18418,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"17765:12:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":18420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17778:31:57","memberName":"BeforeRemoveLiquidityHookFailed","nodeType":"MemberAccess","referencedDeclaration":1102,"src":"17765:44:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17765:46:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18422,"nodeType":"RevertStatement","src":"17758:53:57"}]}}]},"documentation":{"id":18384,"nodeType":"StructuredDocumentation","src":"16722:444:57","text":" @dev Call the `onBeforeRemoveLiquidity` hook. Reverts on failure.\n @param minAmountsOutScaled18 Minimum amounts for each output token of the remove liquidity operation\n @param router Router address\n @param params The remove liquidity parameters\n @param poolData Struct containing balance and token information of the pool\n @param hooksContract Storage slot with the address of the hooks contract"},"id":18426,"implemented":true,"kind":"function","modifiers":[],"name":"callBeforeRemoveLiquidityHook","nameLocation":"17180:29:57","nodeType":"FunctionDefinition","parameters":{"id":18399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18387,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"17236:21:57","nodeType":"VariableDeclaration","scope":18426,"src":"17219:38:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18385,"name":"uint256","nodeType":"ElementaryTypeName","src":"17219:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18386,"nodeType":"ArrayTypeName","src":"17219:9:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":18389,"mutability":"mutable","name":"router","nameLocation":"17275:6:57","nodeType":"VariableDeclaration","scope":18426,"src":"17267:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18388,"name":"address","nodeType":"ElementaryTypeName","src":"17267:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18392,"mutability":"mutable","name":"params","nameLocation":"17320:6:57","nodeType":"VariableDeclaration","scope":18426,"src":"17291:35:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":18391,"nodeType":"UserDefinedTypeName","pathNode":{"id":18390,"name":"RemoveLiquidityParams","nameLocations":["17291:21:57"],"nodeType":"IdentifierPath","referencedDeclaration":2446,"src":"17291:21:57"},"referencedDeclaration":2446,"src":"17291:21:57","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"},{"constant":false,"id":18395,"mutability":"mutable","name":"poolData","nameLocation":"17352:8:57","nodeType":"VariableDeclaration","scope":18426,"src":"17336:24:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":18394,"nodeType":"UserDefinedTypeName","pathNode":{"id":18393,"name":"PoolData","nameLocations":["17336:8:57"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"17336:8:57"},"referencedDeclaration":2331,"src":"17336:8:57","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":18398,"mutability":"mutable","name":"hooksContract","nameLocation":"17377:13:57","nodeType":"VariableDeclaration","scope":18426,"src":"17370:20:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"},"typeName":{"id":18397,"nodeType":"UserDefinedTypeName","pathNode":{"id":18396,"name":"IHooks","nameLocations":["17370:6:57"],"nodeType":"IdentifierPath","referencedDeclaration":300,"src":"17370:6:57"},"referencedDeclaration":300,"src":"17370:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"visibility":"internal"}],"src":"17209:187:57"},"returnParameters":{"id":18400,"nodeType":"ParameterList","parameters":[],"src":"17406:0:57"},"scope":18601,"src":"17171:657:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":18542,"nodeType":"Block","src":"19195:1146:57","statements":[{"assignments":[18456,18459],"declarations":[{"constant":false,"id":18456,"mutability":"mutable","name":"success","nameLocation":"19211:7:57","nodeType":"VariableDeclaration","scope":18542,"src":"19206:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18455,"name":"bool","nodeType":"ElementaryTypeName","src":"19206:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":18459,"mutability":"mutable","name":"hookAdjustedAmountsOutRaw","nameLocation":"19237:25:57","nodeType":"VariableDeclaration","scope":18542,"src":"19220:42:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18457,"name":"uint256","nodeType":"ElementaryTypeName","src":"19220:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18458,"nodeType":"ArrayTypeName","src":"19220:9:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":18475,"initialValue":{"arguments":[{"id":18462,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18432,"src":"19316:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18463,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18443,"src":"19336:6:57","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":18464,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19343:4:57","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2433,"src":"19336:11:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18465,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18443,"src":"19361:6:57","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":18466,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19368:4:57","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2443,"src":"19361:11:57","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"}},{"id":18467,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18440,"src":"19386:11:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18468,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18435,"src":"19411:18:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":18469,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18438,"src":"19443:13:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":18470,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18446,"src":"19470:8:57","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":18471,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19479:20:57","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"19470:29:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":18472,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18443,"src":"19513:6:57","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":18473,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19520:8:57","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":2445,"src":"19513:15:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2430","typeString":"enum RemoveLiquidityKind"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18460,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18449,"src":"19266:13:57","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"id":18461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19280:22:57","memberName":"onAfterRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":262,"src":"19266:36:57","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_enum$_RemoveLiquidityKind_$2430_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address,address,enum RemoveLiquidityKind,uint256,uint256[] memory,uint256[] memory,uint256[] memory,bytes memory) external returns (bool,uint256[] memory)"}},"id":18474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19266:272:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(bool,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"19205:333:57"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18476,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18456,"src":"19553:7:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":18477,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19564:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"19553:16:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18479,"name":"hookAdjustedAmountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18459,"src":"19573:25:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":18480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19599:6:57","memberName":"length","nodeType":"MemberAccess","src":"19573:32:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":18481,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18438,"src":"19609:13:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":18482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19623:6:57","memberName":"length","nodeType":"MemberAccess","src":"19609:20:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19573:56:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19553:76:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18491,"nodeType":"IfStatement","src":"19549:159:57","trueBody":{"id":18490,"nodeType":"Block","src":"19631:77:57","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18485,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"19652:12:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":18487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19665:30:57","memberName":"AfterRemoveLiquidityHookFailed","nodeType":"MemberAccess","referencedDeclaration":1105,"src":"19652:43:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19652:45:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18489,"nodeType":"RevertStatement","src":"19645:52:57"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18492,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18430,"src":"19810:6:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":18493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19817:25:57","memberName":"enableHookAdjustedAmounts","nodeType":"MemberAccess","referencedDeclaration":17548,"src":"19810:32:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":18494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19810:34:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":18495,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19848:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"19810:43:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18500,"nodeType":"IfStatement","src":"19806:94:57","trueBody":{"id":18499,"nodeType":"Block","src":"19855:45:57","statements":[{"expression":{"id":18497,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18438,"src":"19876:13:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":18454,"id":18498,"nodeType":"Return","src":"19869:20:57"}]}},{"body":{"id":18538,"nodeType":"Block","src":"19973:319:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":18512,"name":"hookAdjustedAmountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18459,"src":"19991:25:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":18514,"indexExpression":{"id":18513,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18502,"src":"20017:1:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19991:28:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"baseExpression":{"expression":{"id":18515,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18443,"src":"20022:6:57","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":18516,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20029:13:57","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":2440,"src":"20022:20:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":18518,"indexExpression":{"id":18517,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18502,"src":"20043:1:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20022:23:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19991:54:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18537,"nodeType":"IfStatement","src":"19987:295:57","trueBody":{"id":18536,"nodeType":"Block","src":"20047:235:57","statements":[{"errorCall":{"arguments":[{"baseExpression":{"expression":{"id":18523,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18446,"src":"20136:8:57","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":18524,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20145:6:57","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":2314,"src":"20136:15:57","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":18526,"indexExpression":{"id":18525,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18502,"src":"20152:1:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20136:18:57","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},{"baseExpression":{"id":18527,"name":"hookAdjustedAmountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18459,"src":"20176:25:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":18529,"indexExpression":{"id":18528,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18502,"src":"20202:1:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20176:28:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":18530,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18443,"src":"20226:6:57","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":18531,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20233:13:57","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":2440,"src":"20226:20:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":18533,"indexExpression":{"id":18532,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18502,"src":"20247:1:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20226:23:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18520,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"20072:12:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":18522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20085:29:57","memberName":"HookAdjustedAmountOutBelowMin","nodeType":"MemberAccess","referencedDeclaration":1196,"src":"20072:42:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$6980_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":18534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20072:195:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18535,"nodeType":"RevertStatement","src":"20065:202:57"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18505,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18502,"src":"19930:1:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":18506,"name":"hookAdjustedAmountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18459,"src":"19934:25:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":18507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19960:6:57","memberName":"length","nodeType":"MemberAccess","src":"19934:32:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19930:36:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18539,"initializationExpression":{"assignments":[18502],"declarations":[{"constant":false,"id":18502,"mutability":"mutable","name":"i","nameLocation":"19923:1:57","nodeType":"VariableDeclaration","scope":18539,"src":"19915:9:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18501,"name":"uint256","nodeType":"ElementaryTypeName","src":"19915:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18504,"initialValue":{"hexValue":"30","id":18503,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19927:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"19915:13:57"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":18510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19968:3:57","subExpression":{"id":18509,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18502,"src":"19968:1:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18511,"nodeType":"ExpressionStatement","src":"19968:3:57"},"nodeType":"ForStatement","src":"19910:382:57"},{"expression":{"id":18540,"name":"hookAdjustedAmountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18459,"src":"20309:25:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":18454,"id":18541,"nodeType":"Return","src":"20302:32:57"}]},"documentation":{"id":18427,"nodeType":"StructuredDocumentation","src":"17834:998:57","text":" @dev Call the `onAfterRemoveLiquidity` hook, then validate and return the result. Reverts on failure, or if\n the limits are violated. If the contract did not enable hook-adjusted amounts, it will ignore the hook\n results and return the original `amountsOutRaw`.\n @param config The encoded pool configuration\n @param router Router address\n @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n @param bptAmountIn The BPT amount a user will need burn to remove the liquidity of the pool\n @param params The remove liquidity parameters\n @param poolData Struct containing balance and token information of the pool\n @param hooksContract Storage slot with the address of the hooks contract\n @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook"},"id":18543,"implemented":true,"kind":"function","modifiers":[],"name":"callAfterRemoveLiquidityHook","nameLocation":"18846:28:57","nodeType":"FunctionDefinition","parameters":{"id":18450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18430,"mutability":"mutable","name":"config","nameLocation":"18899:6:57","nodeType":"VariableDeclaration","scope":18543,"src":"18884:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":18429,"nodeType":"UserDefinedTypeName","pathNode":{"id":18428,"name":"PoolConfigBits","nameLocations":["18884:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"18884:14:57"},"referencedDeclaration":2184,"src":"18884:14:57","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":18432,"mutability":"mutable","name":"router","nameLocation":"18923:6:57","nodeType":"VariableDeclaration","scope":18543,"src":"18915:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18431,"name":"address","nodeType":"ElementaryTypeName","src":"18915:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18435,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"18956:18:57","nodeType":"VariableDeclaration","scope":18543,"src":"18939:35:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18433,"name":"uint256","nodeType":"ElementaryTypeName","src":"18939:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18434,"nodeType":"ArrayTypeName","src":"18939:9:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":18438,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"19001:13:57","nodeType":"VariableDeclaration","scope":18543,"src":"18984:30:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18436,"name":"uint256","nodeType":"ElementaryTypeName","src":"18984:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18437,"nodeType":"ArrayTypeName","src":"18984:9:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":18440,"mutability":"mutable","name":"bptAmountIn","nameLocation":"19032:11:57","nodeType":"VariableDeclaration","scope":18543,"src":"19024:19:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18439,"name":"uint256","nodeType":"ElementaryTypeName","src":"19024:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18443,"mutability":"mutable","name":"params","nameLocation":"19082:6:57","nodeType":"VariableDeclaration","scope":18543,"src":"19053:35:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":18442,"nodeType":"UserDefinedTypeName","pathNode":{"id":18441,"name":"RemoveLiquidityParams","nameLocations":["19053:21:57"],"nodeType":"IdentifierPath","referencedDeclaration":2446,"src":"19053:21:57"},"referencedDeclaration":2446,"src":"19053:21:57","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2446_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"},{"constant":false,"id":18446,"mutability":"mutable","name":"poolData","nameLocation":"19114:8:57","nodeType":"VariableDeclaration","scope":18543,"src":"19098:24:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":18445,"nodeType":"UserDefinedTypeName","pathNode":{"id":18444,"name":"PoolData","nameLocations":["19098:8:57"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"19098:8:57"},"referencedDeclaration":2331,"src":"19098:8:57","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":18449,"mutability":"mutable","name":"hooksContract","nameLocation":"19139:13:57","nodeType":"VariableDeclaration","scope":18543,"src":"19132:20:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"},"typeName":{"id":18448,"nodeType":"UserDefinedTypeName","pathNode":{"id":18447,"name":"IHooks","nameLocations":["19132:6:57"],"nodeType":"IdentifierPath","referencedDeclaration":300,"src":"19132:6:57"},"referencedDeclaration":300,"src":"19132:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"visibility":"internal"}],"src":"18874:284:57"},"returnParameters":{"id":18454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18453,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18543,"src":"19177:16:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18451,"name":"uint256","nodeType":"ElementaryTypeName","src":"19177:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18452,"nodeType":"ArrayTypeName","src":"19177:9:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"19176:18:57"},"scope":18601,"src":"18837:1504:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":18569,"nodeType":"Block","src":"20843:170:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":18557,"name":"exactAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18547,"src":"20890:22:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":18558,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18549,"src":"20914:8:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18555,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18552,"src":"20857:13:57","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"id":18556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20871:18:57","memberName":"onBeforeInitialize","nodeType":"MemberAccess","referencedDeclaration":145,"src":"20857:32:57","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (uint256[] memory,bytes memory) external returns (bool)"}},"id":18559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20857:66:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":18560,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20927:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"20857:75:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18568,"nodeType":"IfStatement","src":"20853:154:57","trueBody":{"id":18567,"nodeType":"Block","src":"20934:73:57","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18562,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"20955:12:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":18564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20968:26:57","memberName":"BeforeInitializeHookFailed","nodeType":"MemberAccess","referencedDeclaration":1090,"src":"20955:39:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18565,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20955:41:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18566,"nodeType":"RevertStatement","src":"20948:48:57"}]}}]},"documentation":{"id":18544,"nodeType":"StructuredDocumentation","src":"20347:332:57","text":" @dev Call the `onBeforeInitialize` hook. Reverts on failure.\n @param exactAmountsInScaled18 An array with the initial liquidity of the pool\n @param userData Additional (optional) data required for adding initial liquidity\n @param hooksContract Storage slot with the address of the hooks contract"},"id":18570,"implemented":true,"kind":"function","modifiers":[],"name":"callBeforeInitializeHook","nameLocation":"20693:24:57","nodeType":"FunctionDefinition","parameters":{"id":18553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18547,"mutability":"mutable","name":"exactAmountsInScaled18","nameLocation":"20744:22:57","nodeType":"VariableDeclaration","scope":18570,"src":"20727:39:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18545,"name":"uint256","nodeType":"ElementaryTypeName","src":"20727:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18546,"nodeType":"ArrayTypeName","src":"20727:9:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":18549,"mutability":"mutable","name":"userData","nameLocation":"20789:8:57","nodeType":"VariableDeclaration","scope":18570,"src":"20776:21:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18548,"name":"bytes","nodeType":"ElementaryTypeName","src":"20776:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":18552,"mutability":"mutable","name":"hooksContract","nameLocation":"20814:13:57","nodeType":"VariableDeclaration","scope":18570,"src":"20807:20:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"},"typeName":{"id":18551,"nodeType":"UserDefinedTypeName","pathNode":{"id":18550,"name":"IHooks","nameLocations":["20807:6:57"],"nodeType":"IdentifierPath","referencedDeclaration":300,"src":"20807:6:57"},"referencedDeclaration":300,"src":"20807:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"visibility":"internal"}],"src":"20717:116:57"},"returnParameters":{"id":18554,"nodeType":"ParameterList","parameters":[],"src":"20843:0:57"},"scope":18601,"src":"20684:329:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":18599,"nodeType":"Block","src":"21645:182:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":18586,"name":"exactAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18574,"src":"21691:22:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":18587,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18576,"src":"21715:12:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18588,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18578,"src":"21729:8:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18584,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18581,"src":"21659:13:57","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"id":18585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21673:17:57","memberName":"onAfterInitialize","nodeType":"MemberAccess","referencedDeclaration":158,"src":"21659:31:57","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (uint256[] memory,uint256,bytes memory) external returns (bool)"}},"id":18589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21659:79:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":18590,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"21742:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"21659:88:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18598,"nodeType":"IfStatement","src":"21655:166:57","trueBody":{"id":18597,"nodeType":"Block","src":"21749:72:57","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18592,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"21770:12:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":18594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21783:25:57","memberName":"AfterInitializeHookFailed","nodeType":"MemberAccess","referencedDeclaration":1093,"src":"21770:38:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21770:40:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18596,"nodeType":"RevertStatement","src":"21763:47:57"}]}}]},"documentation":{"id":18571,"nodeType":"StructuredDocumentation","src":"21019:433:57","text":" @dev Call the `onAfterInitialize` hook. Reverts on failure.\n @param exactAmountsInScaled18 An array with the initial liquidity of the pool\n @param bptAmountOut The BPT amount a user will receive after initialization operation succeeds\n @param userData Additional (optional) data required for adding initial liquidity\n @param hooksContract Storage slot with the address of the hooks contract"},"id":18600,"implemented":true,"kind":"function","modifiers":[],"name":"callAfterInitializeHook","nameLocation":"21466:23:57","nodeType":"FunctionDefinition","parameters":{"id":18582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18574,"mutability":"mutable","name":"exactAmountsInScaled18","nameLocation":"21516:22:57","nodeType":"VariableDeclaration","scope":18600,"src":"21499:39:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18572,"name":"uint256","nodeType":"ElementaryTypeName","src":"21499:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18573,"nodeType":"ArrayTypeName","src":"21499:9:57","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":18576,"mutability":"mutable","name":"bptAmountOut","nameLocation":"21556:12:57","nodeType":"VariableDeclaration","scope":18600,"src":"21548:20:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18575,"name":"uint256","nodeType":"ElementaryTypeName","src":"21548:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18578,"mutability":"mutable","name":"userData","nameLocation":"21591:8:57","nodeType":"VariableDeclaration","scope":18600,"src":"21578:21:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18577,"name":"bytes","nodeType":"ElementaryTypeName","src":"21578:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":18581,"mutability":"mutable","name":"hooksContract","nameLocation":"21616:13:57","nodeType":"VariableDeclaration","scope":18600,"src":"21609:20:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"},"typeName":{"id":18580,"nodeType":"UserDefinedTypeName","pathNode":{"id":18579,"name":"IHooks","nameLocations":["21609:6:57"],"nodeType":"IdentifierPath","referencedDeclaration":300,"src":"21609:6:57"},"referencedDeclaration":300,"src":"21609:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$300","typeString":"contract IHooks"}},"visibility":"internal"}],"src":"21489:146:57"},"returnParameters":{"id":18583,"nodeType":"ParameterList","parameters":[],"src":"21645:0:57"},"scope":18601,"src":"21457:370:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":18602,"src":"1878:19951:57","usedErrors":[],"usedEvents":[]}],"src":"46:21784:57"},"id":57},"contracts/lib/PoolConfigConst.sol":{"ast":{"absolutePath":"contracts/lib/PoolConfigConst.sol","exportedSymbols":{"FEE_BITLENGTH":[2467],"PoolConfigConst":[18729]},"id":18730,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":18603,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:58"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":18605,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18730,"sourceUnit":2474,"src":"72:92:58","symbolAliases":[{"foreign":{"id":18604,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2467,"src":"81:13:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"PoolConfigConst","contractDependencies":[],"contractKind":"library","documentation":{"id":18606,"nodeType":"StructuredDocumentation","src":"166:664:58","text":" @notice Helper functions to read and write the packed configuration flags stored in `_poolConfigBits`.\n @dev Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot per pool).\n This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct. The layout (i.e.,\n offsets for each data field) is specified here.\n There are two libraries for interpreting these data. `HooksConfigLib` parses fields related to hooks, while\n `PoolConfigLib` contains helpers related to the non-hook-related flags, along with aggregate fee percentages\n and other data associated with pools."},"fullyImplemented":true,"id":18729,"linearizedBaseContracts":[18729],"name":"PoolConfigConst","nameLocation":"839:15:58","nodeType":"ContractDefinition","nodes":[{"constant":true,"functionSelector":"6801b442","id":18609,"mutability":"constant","name":"POOL_REGISTERED_OFFSET","nameLocation":"933:22:58","nodeType":"VariableDeclaration","scope":18729,"src":"911:48:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18607,"name":"uint8","nodeType":"ElementaryTypeName","src":"911:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"30","id":18608,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"958:1:58","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"public"},{"constant":true,"functionSelector":"18518628","id":18614,"mutability":"constant","name":"POOL_INITIALIZED_OFFSET","nameLocation":"987:23:58","nodeType":"VariableDeclaration","scope":18729,"src":"965:74:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18610,"name":"uint8","nodeType":"ElementaryTypeName","src":"965:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":18613,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18611,"name":"POOL_REGISTERED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18609,"src":"1013:22:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":18612,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1038:1:58","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1013:26:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"af815f04","id":18619,"mutability":"constant","name":"POOL_PAUSED_OFFSET","nameLocation":"1067:18:58","nodeType":"VariableDeclaration","scope":18729,"src":"1045:70:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18615,"name":"uint8","nodeType":"ElementaryTypeName","src":"1045:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":18618,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18616,"name":"POOL_INITIALIZED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18614,"src":"1088:23:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":18617,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1114:1:58","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1088:27:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"2d6724e1","id":18624,"mutability":"constant","name":"POOL_RECOVERY_MODE_OFFSET","nameLocation":"1143:25:58","nodeType":"VariableDeclaration","scope":18729,"src":"1121:72:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18620,"name":"uint8","nodeType":"ElementaryTypeName","src":"1121:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":18623,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18621,"name":"POOL_PAUSED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18619,"src":"1171:18:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":18622,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1192:1:58","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1171:22:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"d9827217","id":18629,"mutability":"constant","name":"UNBALANCED_LIQUIDITY_OFFSET","nameLocation":"1267:27:58","nodeType":"VariableDeclaration","scope":18729,"src":"1245:81:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18625,"name":"uint8","nodeType":"ElementaryTypeName","src":"1245:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":18628,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18626,"name":"POOL_RECOVERY_MODE_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18624,"src":"1297:25:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":18627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1325:1:58","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1297:29:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"b2cb247c","id":18634,"mutability":"constant","name":"ADD_LIQUIDITY_CUSTOM_OFFSET","nameLocation":"1354:27:58","nodeType":"VariableDeclaration","scope":18729,"src":"1332:83:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18630,"name":"uint8","nodeType":"ElementaryTypeName","src":"1332:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":18633,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18631,"name":"UNBALANCED_LIQUIDITY_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18629,"src":"1384:27:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":18632,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1414:1:58","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1384:31:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"7e3edbf1","id":18639,"mutability":"constant","name":"REMOVE_LIQUIDITY_CUSTOM_OFFSET","nameLocation":"1443:30:58","nodeType":"VariableDeclaration","scope":18729,"src":"1421:86:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18635,"name":"uint8","nodeType":"ElementaryTypeName","src":"1421:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":18638,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18636,"name":"ADD_LIQUIDITY_CUSTOM_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18634,"src":"1476:27:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":18637,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1506:1:58","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1476:31:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"e2ce6c6c","id":18644,"mutability":"constant","name":"DONATION_OFFSET","nameLocation":"1535:15:58","nodeType":"VariableDeclaration","scope":18729,"src":"1513:74:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18640,"name":"uint8","nodeType":"ElementaryTypeName","src":"1513:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":18643,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18641,"name":"REMOVE_LIQUIDITY_CUSTOM_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18639,"src":"1553:30:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":18642,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1586:1:58","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1553:34:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"547acb16","id":18649,"mutability":"constant","name":"BEFORE_INITIALIZE_OFFSET","nameLocation":"1653:24:58","nodeType":"VariableDeclaration","scope":18729,"src":"1631:68:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18645,"name":"uint8","nodeType":"ElementaryTypeName","src":"1631:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":18648,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18646,"name":"DONATION_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18644,"src":"1680:15:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":18647,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1698:1:58","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1680:19:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"fab86870","id":18654,"mutability":"constant","name":"ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET","nameLocation":"1727:35:58","nodeType":"VariableDeclaration","scope":18729,"src":"1705:88:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18650,"name":"uint8","nodeType":"ElementaryTypeName","src":"1705:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":18653,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18651,"name":"BEFORE_INITIALIZE_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18649,"src":"1765:24:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":18652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1792:1:58","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1765:28:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"3f60345a","id":18659,"mutability":"constant","name":"AFTER_INITIALIZE_OFFSET","nameLocation":"1821:23:58","nodeType":"VariableDeclaration","scope":18729,"src":"1799:87:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18655,"name":"uint8","nodeType":"ElementaryTypeName","src":"1799:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":18658,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18656,"name":"ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18654,"src":"1847:35:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":18657,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1885:1:58","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1847:39:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"84efbfd5","id":18664,"mutability":"constant","name":"DYNAMIC_SWAP_FEE_OFFSET","nameLocation":"1914:23:58","nodeType":"VariableDeclaration","scope":18729,"src":"1892:75:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18660,"name":"uint8","nodeType":"ElementaryTypeName","src":"1892:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":18663,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18661,"name":"AFTER_INITIALIZE_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18659,"src":"1940:23:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":18662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1966:1:58","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1940:27:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"a22425b6","id":18669,"mutability":"constant","name":"BEFORE_SWAP_OFFSET","nameLocation":"1995:18:58","nodeType":"VariableDeclaration","scope":18729,"src":"1973:70:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18665,"name":"uint8","nodeType":"ElementaryTypeName","src":"1973:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":18668,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18666,"name":"DYNAMIC_SWAP_FEE_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18664,"src":"2016:23:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":18667,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2042:1:58","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2016:27:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"bdefaf71","id":18674,"mutability":"constant","name":"AFTER_SWAP_OFFSET","nameLocation":"2071:17:58","nodeType":"VariableDeclaration","scope":18729,"src":"2049:64:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18670,"name":"uint8","nodeType":"ElementaryTypeName","src":"2049:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":18673,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18671,"name":"BEFORE_SWAP_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18669,"src":"2091:18:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":18672,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2112:1:58","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2091:22:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"dde7b13f","id":18679,"mutability":"constant","name":"BEFORE_ADD_LIQUIDITY_OFFSET","nameLocation":"2141:27:58","nodeType":"VariableDeclaration","scope":18729,"src":"2119:73:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18675,"name":"uint8","nodeType":"ElementaryTypeName","src":"2119:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":18678,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18676,"name":"AFTER_SWAP_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18674,"src":"2171:17:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":18677,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2191:1:58","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2171:21:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"aa6cda91","id":18684,"mutability":"constant","name":"AFTER_ADD_LIQUIDITY_OFFSET","nameLocation":"2220:26:58","nodeType":"VariableDeclaration","scope":18729,"src":"2198:82:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18680,"name":"uint8","nodeType":"ElementaryTypeName","src":"2198:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":18683,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18681,"name":"BEFORE_ADD_LIQUIDITY_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18679,"src":"2249:27:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":18682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2279:1:58","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2249:31:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"bc848769","id":18689,"mutability":"constant","name":"BEFORE_REMOVE_LIQUIDITY_OFFSET","nameLocation":"2308:30:58","nodeType":"VariableDeclaration","scope":18729,"src":"2286:85:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18685,"name":"uint8","nodeType":"ElementaryTypeName","src":"2286:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":18688,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18686,"name":"AFTER_ADD_LIQUIDITY_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18684,"src":"2341:26:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":18687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2370:1:58","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2341:30:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"80b1c55b","id":18694,"mutability":"constant","name":"AFTER_REMOVE_LIQUIDITY_OFFSET","nameLocation":"2399:29:58","nodeType":"VariableDeclaration","scope":18729,"src":"2377:88:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18690,"name":"uint8","nodeType":"ElementaryTypeName","src":"2377:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":18693,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18691,"name":"BEFORE_REMOVE_LIQUIDITY_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18689,"src":"2431:30:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":18692,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2464:1:58","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2431:34:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"fd5da010","id":18699,"mutability":"constant","name":"STATIC_SWAP_FEE_OFFSET","nameLocation":"2530:22:58","nodeType":"VariableDeclaration","scope":18729,"src":"2508:80:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18695,"name":"uint8","nodeType":"ElementaryTypeName","src":"2508:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":18698,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18696,"name":"AFTER_REMOVE_LIQUIDITY_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18694,"src":"2555:29:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":18697,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2587:1:58","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2555:33:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"1294794b","id":18704,"mutability":"constant","name":"AGGREGATE_SWAP_FEE_OFFSET","nameLocation":"2618:25:58","nodeType":"VariableDeclaration","scope":18729,"src":"2594:90:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18700,"name":"uint256","nodeType":"ElementaryTypeName","src":"2594:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18703,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18701,"name":"STATIC_SWAP_FEE_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18699,"src":"2646:22:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":18702,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2467,"src":"2671:13:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2646:38:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":true,"functionSelector":"d9cebbd9","id":18709,"mutability":"constant","name":"AGGREGATE_YIELD_FEE_OFFSET","nameLocation":"2714:26:58","nodeType":"VariableDeclaration","scope":18729,"src":"2690:94:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18705,"name":"uint256","nodeType":"ElementaryTypeName","src":"2690:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18708,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18706,"name":"AGGREGATE_SWAP_FEE_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18704,"src":"2743:25:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":18707,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2467,"src":"2771:13:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2743:41:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":true,"functionSelector":"3dc52c43","id":18714,"mutability":"constant","name":"DECIMAL_SCALING_FACTORS_OFFSET","nameLocation":"2814:30:58","nodeType":"VariableDeclaration","scope":18729,"src":"2790:99:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18710,"name":"uint256","nodeType":"ElementaryTypeName","src":"2790:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18713,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18711,"name":"AGGREGATE_YIELD_FEE_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18709,"src":"2847:26:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":18712,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2467,"src":"2876:13:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2847:42:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":true,"functionSelector":"68aa2524","id":18719,"mutability":"constant","name":"PAUSE_WINDOW_END_TIME_OFFSET","nameLocation":"2919:28:58","nodeType":"VariableDeclaration","scope":18729,"src":"2895:125:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18715,"name":"uint256","nodeType":"ElementaryTypeName","src":"2895:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18718,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18716,"name":"DECIMAL_SCALING_FACTORS_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18714,"src":"2958:30:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":18717,"name":"TOKEN_DECIMAL_DIFFS_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18722,"src":"2991:29:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"2958:62:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":true,"functionSelector":"7ea0cde9","id":18722,"mutability":"constant","name":"TOKEN_DECIMAL_DIFFS_BITLENGTH","nameLocation":"3180:29:58","nodeType":"VariableDeclaration","scope":18729,"src":"3158:56:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18720,"name":"uint8","nodeType":"ElementaryTypeName","src":"3158:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"3430","id":18721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3212:2:58","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},"visibility":"public"},{"constant":true,"functionSelector":"28b161ce","id":18725,"mutability":"constant","name":"DECIMAL_DIFF_BITLENGTH","nameLocation":"3242:22:58","nodeType":"VariableDeclaration","scope":18729,"src":"3220:48:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18723,"name":"uint8","nodeType":"ElementaryTypeName","src":"3220:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"35","id":18724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3267:1:58","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"visibility":"public"},{"constant":true,"functionSelector":"df9d385b","id":18728,"mutability":"constant","name":"TIMESTAMP_BITLENGTH","nameLocation":"3297:19:58","nodeType":"VariableDeclaration","scope":18729,"src":"3275:46:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18726,"name":"uint8","nodeType":"ElementaryTypeName","src":"3275:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"3332","id":18727,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3319:2:58","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"visibility":"public"}],"scope":18730,"src":"831:2493:58","usedErrors":[],"usedEvents":[]}],"src":"46:3279:58"},"id":58},"contracts/lib/PoolConfigLib.sol":{"ast":{"absolutePath":"contracts/lib/PoolConfigLib.sol","exportedSymbols":{"AddLiquidityKind":[2409],"AddLiquidityParams":[2425],"AfterSwapParams":[2403],"BufferWrapOrUnwrapParams":[2464],"FEE_BITLENGTH":[2467],"FEE_SCALING_FACTOR":[2470],"HookFlags":[2229],"HooksConfig":[2253],"IERC20":[6980],"IERC4626":[6704],"IRateProvider":[24],"IVaultErrors":[1370],"LiquidityManagement":[2182],"MAX_FEE_PERCENTAGE":[2473],"PoolConfig":[2207],"PoolConfigBits":[2184],"PoolConfigConst":[18729],"PoolConfigLib":[19568],"PoolData":[2331],"PoolRoleAccounts":[2279],"PoolSwapParams":[2374],"RemoveLiquidityKind":[2430],"RemoveLiquidityParams":[2446],"Rounding":[2334],"SwapKind":[2337],"SwapState":[2263],"TokenConfig":[2296],"TokenInfo":[2306],"TokenType":[2283],"VaultState":[2271],"VaultSwapParams":[2356],"WordCodec":[4467],"WrappingDirection":[2449]},"id":19569,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":18731,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:59"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":18733,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19569,"sourceUnit":1371,"src":"72:93:59","symbolAliases":[{"foreign":{"id":18732,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"81:12:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":18734,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19569,"sourceUnit":2474,"src":"166:69:59","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol","id":18736,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19569,"sourceUnit":4468,"src":"237:93:59","symbolAliases":[{"foreign":{"id":18735,"name":"WordCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4467,"src":"246:9:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/lib/PoolConfigConst.sol","file":"./PoolConfigConst.sol","id":18738,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19569,"sourceUnit":18730,"src":"332:56:59","symbolAliases":[{"foreign":{"id":18737,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"341:15:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"PoolConfigLib","contractDependencies":[],"contractKind":"library","documentation":{"id":18739,"nodeType":"StructuredDocumentation","src":"390:888:59","text":" @notice Helper functions to read and write the packed hook configuration flags stored in `_poolConfigBits`.\n @dev Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot\n per pool). This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct.\n The layout (i.e., offsets for each data field) is specified in `PoolConfigConst`.\n There are two libraries for interpreting these data. `HooksConfigLib` parses fields related to hooks, while\n this one contains helpers related to the non-hook-related flags, along with aggregate fee percentages and\n other data associated with pools.\n The `PoolData` struct contains the raw bitmap with the entire pool state (`PoolConfigBits`), plus the token\n configuration, scaling factors, and dynamic information such as current balances and rates."},"fullyImplemented":true,"id":19568,"linearizedBaseContracts":[19568],"name":"PoolConfigLib","nameLocation":"1287:13:59","nodeType":"ContractDefinition","nodes":[{"global":false,"id":18742,"libraryName":{"id":18740,"name":"WordCodec","nameLocations":["1313:9:59"],"nodeType":"IdentifierPath","referencedDeclaration":4467,"src":"1313:9:59"},"nodeType":"UsingForDirective","src":"1307:28:59","typeName":{"id":18741,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1327:7:59","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"global":false,"id":18746,"libraryName":{"id":18743,"name":"PoolConfigLib","nameLocations":["1346:13:59"],"nodeType":"IdentifierPath","referencedDeclaration":19568,"src":"1346:13:59"},"nodeType":"UsingForDirective","src":"1340:39:59","typeName":{"id":18745,"nodeType":"UserDefinedTypeName","pathNode":{"id":18744,"name":"PoolConfigBits","nameLocations":["1364:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"1364:14:59"},"referencedDeclaration":2184,"src":"1364:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}},{"body":{"id":18763,"nodeType":"Block","src":"1513:104:59","statements":[{"expression":{"arguments":[{"expression":{"id":18759,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"1571:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":18760,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1587:22:59","memberName":"POOL_REGISTERED_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18609,"src":"1571:38:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":18756,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18749,"src":"1552:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":18754,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"1530:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":18755,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1545:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"1530:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":18757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1530:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":18758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1560:10:59","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"1530:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":18761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1530:80:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":18753,"id":18762,"nodeType":"Return","src":"1523:87:59"}]},"id":18764,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"1444:16:59","nodeType":"FunctionDefinition","parameters":{"id":18750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18749,"mutability":"mutable","name":"config","nameLocation":"1476:6:59","nodeType":"VariableDeclaration","scope":18764,"src":"1461:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":18748,"nodeType":"UserDefinedTypeName","pathNode":{"id":18747,"name":"PoolConfigBits","nameLocations":["1461:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"1461:14:59"},"referencedDeclaration":2184,"src":"1461:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"1460:23:59"},"returnParameters":{"id":18753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18752,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18764,"src":"1507:4:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18751,"name":"bool","nodeType":"ElementaryTypeName","src":"1507:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1506:6:59"},"scope":19568,"src":"1435:182:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":18788,"nodeType":"Block","src":"1724:174:59","statements":[{"expression":{"arguments":[{"arguments":[{"id":18782,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18769,"src":"1831:5:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":18783,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"1838:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":18784,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1854:22:59","memberName":"POOL_REGISTERED_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18609,"src":"1838:38:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":18779,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18767,"src":"1812:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":18777,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"1790:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":18778,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1805:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"1790:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":18780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1790:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":18781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1820:10:59","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"1790:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":18785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1790:87:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":18775,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"1753:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":18776,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1768:4:59","memberName":"wrap","nodeType":"MemberAccess","src":"1753:19:59","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":18786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1753:138:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":18774,"id":18787,"nodeType":"Return","src":"1734:157:59"}]},"id":18789,"implemented":true,"kind":"function","modifiers":[],"name":"setPoolRegistered","nameLocation":"1632:17:59","nodeType":"FunctionDefinition","parameters":{"id":18770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18767,"mutability":"mutable","name":"config","nameLocation":"1665:6:59","nodeType":"VariableDeclaration","scope":18789,"src":"1650:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":18766,"nodeType":"UserDefinedTypeName","pathNode":{"id":18765,"name":"PoolConfigBits","nameLocations":["1650:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"1650:14:59"},"referencedDeclaration":2184,"src":"1650:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":18769,"mutability":"mutable","name":"value","nameLocation":"1678:5:59","nodeType":"VariableDeclaration","scope":18789,"src":"1673:10:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18768,"name":"bool","nodeType":"ElementaryTypeName","src":"1673:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1649:35:59"},"returnParameters":{"id":18774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18773,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18789,"src":"1708:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":18772,"nodeType":"UserDefinedTypeName","pathNode":{"id":18771,"name":"PoolConfigBits","nameLocations":["1708:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"1708:14:59"},"referencedDeclaration":2184,"src":"1708:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"1707:16:59"},"scope":19568,"src":"1623:275:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":18806,"nodeType":"Block","src":"1983:105:59","statements":[{"expression":{"arguments":[{"expression":{"id":18802,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"2041:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":18803,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2057:23:59","memberName":"POOL_INITIALIZED_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18614,"src":"2041:39:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":18799,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18792,"src":"2022:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":18797,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"2000:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":18798,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2015:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"2000:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":18800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2000:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":18801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2030:10:59","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"2000:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":18804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2000:81:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":18796,"id":18805,"nodeType":"Return","src":"1993:88:59"}]},"id":18807,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolInitialized","nameLocation":"1913:17:59","nodeType":"FunctionDefinition","parameters":{"id":18793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18792,"mutability":"mutable","name":"config","nameLocation":"1946:6:59","nodeType":"VariableDeclaration","scope":18807,"src":"1931:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":18791,"nodeType":"UserDefinedTypeName","pathNode":{"id":18790,"name":"PoolConfigBits","nameLocations":["1931:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"1931:14:59"},"referencedDeclaration":2184,"src":"1931:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"1930:23:59"},"returnParameters":{"id":18796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18795,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18807,"src":"1977:4:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18794,"name":"bool","nodeType":"ElementaryTypeName","src":"1977:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1976:6:59"},"scope":19568,"src":"1904:184:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":18831,"nodeType":"Block","src":"2196:175:59","statements":[{"expression":{"arguments":[{"arguments":[{"id":18825,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18812,"src":"2303:5:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":18826,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"2310:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":18827,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2326:23:59","memberName":"POOL_INITIALIZED_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18614,"src":"2310:39:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":18822,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18810,"src":"2284:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":18820,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"2262:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":18821,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2277:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"2262:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":18823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2262:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":18824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2292:10:59","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"2262:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":18828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2262:88:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":18818,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"2225:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":18819,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2240:4:59","memberName":"wrap","nodeType":"MemberAccess","src":"2225:19:59","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":18829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2225:139:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":18817,"id":18830,"nodeType":"Return","src":"2206:158:59"}]},"id":18832,"implemented":true,"kind":"function","modifiers":[],"name":"setPoolInitialized","nameLocation":"2103:18:59","nodeType":"FunctionDefinition","parameters":{"id":18813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18810,"mutability":"mutable","name":"config","nameLocation":"2137:6:59","nodeType":"VariableDeclaration","scope":18832,"src":"2122:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":18809,"nodeType":"UserDefinedTypeName","pathNode":{"id":18808,"name":"PoolConfigBits","nameLocations":["2122:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"2122:14:59"},"referencedDeclaration":2184,"src":"2122:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":18812,"mutability":"mutable","name":"value","nameLocation":"2150:5:59","nodeType":"VariableDeclaration","scope":18832,"src":"2145:10:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18811,"name":"bool","nodeType":"ElementaryTypeName","src":"2145:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2121:35:59"},"returnParameters":{"id":18817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18816,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18832,"src":"2180:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":18815,"nodeType":"UserDefinedTypeName","pathNode":{"id":18814,"name":"PoolConfigBits","nameLocations":["2180:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"2180:14:59"},"referencedDeclaration":2184,"src":"2180:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"2179:16:59"},"scope":19568,"src":"2094:277:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":18849,"nodeType":"Block","src":"2451:100:59","statements":[{"expression":{"arguments":[{"expression":{"id":18845,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"2509:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":18846,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2525:18:59","memberName":"POOL_PAUSED_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18619,"src":"2509:34:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":18842,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18835,"src":"2490:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":18840,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"2468:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":18841,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2483:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"2468:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":18843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2468:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":18844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2498:10:59","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"2468:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":18847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2468:76:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":18839,"id":18848,"nodeType":"Return","src":"2461:83:59"}]},"id":18850,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolPaused","nameLocation":"2386:12:59","nodeType":"FunctionDefinition","parameters":{"id":18836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18835,"mutability":"mutable","name":"config","nameLocation":"2414:6:59","nodeType":"VariableDeclaration","scope":18850,"src":"2399:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":18834,"nodeType":"UserDefinedTypeName","pathNode":{"id":18833,"name":"PoolConfigBits","nameLocations":["2399:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"2399:14:59"},"referencedDeclaration":2184,"src":"2399:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"2398:23:59"},"returnParameters":{"id":18839,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18838,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18850,"src":"2445:4:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18837,"name":"bool","nodeType":"ElementaryTypeName","src":"2445:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2444:6:59"},"scope":19568,"src":"2377:174:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":18874,"nodeType":"Block","src":"2654:128:59","statements":[{"expression":{"arguments":[{"arguments":[{"id":18868,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18855,"src":"2732:5:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":18869,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"2739:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":18870,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2755:18:59","memberName":"POOL_PAUSED_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18619,"src":"2739:34:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":18865,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18853,"src":"2713:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":18863,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"2691:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":18864,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2706:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"2691:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":18866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2691:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":18867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2721:10:59","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"2691:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":18871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2691:83:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":18861,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"2671:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":18862,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2686:4:59","memberName":"wrap","nodeType":"MemberAccess","src":"2671:19:59","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":18872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2671:104:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":18860,"id":18873,"nodeType":"Return","src":"2664:111:59"}]},"id":18875,"implemented":true,"kind":"function","modifiers":[],"name":"setPoolPaused","nameLocation":"2566:13:59","nodeType":"FunctionDefinition","parameters":{"id":18856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18853,"mutability":"mutable","name":"config","nameLocation":"2595:6:59","nodeType":"VariableDeclaration","scope":18875,"src":"2580:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":18852,"nodeType":"UserDefinedTypeName","pathNode":{"id":18851,"name":"PoolConfigBits","nameLocations":["2580:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"2580:14:59"},"referencedDeclaration":2184,"src":"2580:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":18855,"mutability":"mutable","name":"value","nameLocation":"2608:5:59","nodeType":"VariableDeclaration","scope":18875,"src":"2603:10:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18854,"name":"bool","nodeType":"ElementaryTypeName","src":"2603:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2579:35:59"},"returnParameters":{"id":18860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18859,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18875,"src":"2638:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":18858,"nodeType":"UserDefinedTypeName","pathNode":{"id":18857,"name":"PoolConfigBits","nameLocations":["2638:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"2638:14:59"},"referencedDeclaration":2184,"src":"2638:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"2637:16:59"},"scope":19568,"src":"2557:225:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":18892,"nodeType":"Block","src":"2870:107:59","statements":[{"expression":{"arguments":[{"expression":{"id":18888,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"2928:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":18889,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2944:25:59","memberName":"POOL_RECOVERY_MODE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18624,"src":"2928:41:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":18885,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18878,"src":"2909:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":18883,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"2887:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":18884,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2902:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"2887:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":18886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2887:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":18887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2917:10:59","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"2887:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":18890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2887:83:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":18882,"id":18891,"nodeType":"Return","src":"2880:90:59"}]},"id":18893,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolInRecoveryMode","nameLocation":"2797:20:59","nodeType":"FunctionDefinition","parameters":{"id":18879,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18878,"mutability":"mutable","name":"config","nameLocation":"2833:6:59","nodeType":"VariableDeclaration","scope":18893,"src":"2818:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":18877,"nodeType":"UserDefinedTypeName","pathNode":{"id":18876,"name":"PoolConfigBits","nameLocations":["2818:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"2818:14:59"},"referencedDeclaration":2184,"src":"2818:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"2817:23:59"},"returnParameters":{"id":18882,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18881,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18893,"src":"2864:4:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18880,"name":"bool","nodeType":"ElementaryTypeName","src":"2864:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2863:6:59"},"scope":19568,"src":"2788:189:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":18917,"nodeType":"Block","src":"3088:177:59","statements":[{"expression":{"arguments":[{"arguments":[{"id":18911,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18898,"src":"3195:5:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":18912,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"3202:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":18913,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3218:25:59","memberName":"POOL_RECOVERY_MODE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18624,"src":"3202:41:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":18908,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18896,"src":"3176:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":18906,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"3154:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":18907,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3169:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"3154:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":18909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3154:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":18910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3184:10:59","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"3154:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":18914,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3154:90:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":18904,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"3117:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":18905,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3132:4:59","memberName":"wrap","nodeType":"MemberAccess","src":"3117:19:59","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":18915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3117:141:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":18903,"id":18916,"nodeType":"Return","src":"3098:160:59"}]},"id":18918,"implemented":true,"kind":"function","modifiers":[],"name":"setPoolInRecoveryMode","nameLocation":"2992:21:59","nodeType":"FunctionDefinition","parameters":{"id":18899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18896,"mutability":"mutable","name":"config","nameLocation":"3029:6:59","nodeType":"VariableDeclaration","scope":18918,"src":"3014:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":18895,"nodeType":"UserDefinedTypeName","pathNode":{"id":18894,"name":"PoolConfigBits","nameLocations":["3014:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"3014:14:59"},"referencedDeclaration":2184,"src":"3014:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":18898,"mutability":"mutable","name":"value","nameLocation":"3042:5:59","nodeType":"VariableDeclaration","scope":18918,"src":"3037:10:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18897,"name":"bool","nodeType":"ElementaryTypeName","src":"3037:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3013:35:59"},"returnParameters":{"id":18903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18902,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18918,"src":"3072:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":18901,"nodeType":"UserDefinedTypeName","pathNode":{"id":18900,"name":"PoolConfigBits","nameLocations":["3072:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"3072:14:59"},"referencedDeclaration":2184,"src":"3072:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"3071:16:59"},"scope":19568,"src":"2983:282:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":18936,"nodeType":"Block","src":"3405:255:59","statements":[{"expression":{"id":18934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3567:86:59","subExpression":{"arguments":[{"expression":{"id":18931,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"3609:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":18932,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3625:27:59","memberName":"UNBALANCED_LIQUIDITY_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18629,"src":"3609:43:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":18928,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18921,"src":"3590:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":18926,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"3568:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":18927,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3583:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"3568:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":18929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3568:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":18930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3598:10:59","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"3568:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":18933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3568:85:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":18925,"id":18935,"nodeType":"Return","src":"3560:93:59"}]},"id":18937,"implemented":true,"kind":"function","modifiers":[],"name":"supportsUnbalancedLiquidity","nameLocation":"3325:27:59","nodeType":"FunctionDefinition","parameters":{"id":18922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18921,"mutability":"mutable","name":"config","nameLocation":"3368:6:59","nodeType":"VariableDeclaration","scope":18937,"src":"3353:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":18920,"nodeType":"UserDefinedTypeName","pathNode":{"id":18919,"name":"PoolConfigBits","nameLocations":["3353:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"3353:14:59"},"referencedDeclaration":2184,"src":"3353:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"3352:23:59"},"returnParameters":{"id":18925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18924,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18937,"src":"3399:4:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18923,"name":"bool","nodeType":"ElementaryTypeName","src":"3399:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3398:6:59"},"scope":19568,"src":"3316:344:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":18955,"nodeType":"Block","src":"3746:147:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18943,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18940,"src":"3760:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":18944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3767:27:59","memberName":"supportsUnbalancedLiquidity","nodeType":"MemberAccess","referencedDeclaration":18937,"src":"3760:34:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":18945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3760:36:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":18946,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3800:5:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"3760:45:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18954,"nodeType":"IfStatement","src":"3756:131:59","trueBody":{"id":18953,"nodeType":"Block","src":"3807:80:59","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18948,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"3828:12:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":18950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3841:33:59","memberName":"DoesNotSupportUnbalancedLiquidity","nodeType":"MemberAccess","referencedDeclaration":1351,"src":"3828:46:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3828:48:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18952,"nodeType":"RevertStatement","src":"3821:55:59"}]}}]},"id":18956,"implemented":true,"kind":"function","modifiers":[],"name":"requireUnbalancedLiquidityEnabled","nameLocation":"3675:33:59","nodeType":"FunctionDefinition","parameters":{"id":18941,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18940,"mutability":"mutable","name":"config","nameLocation":"3724:6:59","nodeType":"VariableDeclaration","scope":18956,"src":"3709:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":18939,"nodeType":"UserDefinedTypeName","pathNode":{"id":18938,"name":"PoolConfigBits","nameLocations":["3709:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"3709:14:59"},"referencedDeclaration":2184,"src":"3709:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"3708:23:59"},"returnParameters":{"id":18942,"nodeType":"ParameterList","parameters":[],"src":"3746:0:59"},"scope":19568,"src":"3666:227:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":18980,"nodeType":"Block","src":"4055:258:59","statements":[{"expression":{"arguments":[{"arguments":[{"id":18974,"name":"disableUnbalancedLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18961,"src":"4183:26:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":18975,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"4231:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":18976,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4247:27:59","memberName":"UNBALANCED_LIQUIDITY_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18629,"src":"4231:43:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":18971,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18959,"src":"4143:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":18969,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"4121:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":18970,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4136:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"4121:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":18972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4121:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":18973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4151:10:59","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"4121:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":18977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4121:171:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":18967,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"4084:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":18968,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4099:4:59","memberName":"wrap","nodeType":"MemberAccess","src":"4084:19:59","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":18978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4084:222:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":18966,"id":18979,"nodeType":"Return","src":"4065:241:59"}]},"id":18981,"implemented":true,"kind":"function","modifiers":[],"name":"setDisableUnbalancedLiquidity","nameLocation":"3908:29:59","nodeType":"FunctionDefinition","parameters":{"id":18962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18959,"mutability":"mutable","name":"config","nameLocation":"3962:6:59","nodeType":"VariableDeclaration","scope":18981,"src":"3947:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":18958,"nodeType":"UserDefinedTypeName","pathNode":{"id":18957,"name":"PoolConfigBits","nameLocations":["3947:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"3947:14:59"},"referencedDeclaration":2184,"src":"3947:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":18961,"mutability":"mutable","name":"disableUnbalancedLiquidity","nameLocation":"3983:26:59","nodeType":"VariableDeclaration","scope":18981,"src":"3978:31:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18960,"name":"bool","nodeType":"ElementaryTypeName","src":"3978:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3937:78:59"},"returnParameters":{"id":18966,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18965,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18981,"src":"4039:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":18964,"nodeType":"UserDefinedTypeName","pathNode":{"id":18963,"name":"PoolConfigBits","nameLocations":["4039:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"4039:14:59"},"referencedDeclaration":2184,"src":"4039:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"4038:16:59"},"scope":19568,"src":"3899:414:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":18998,"nodeType":"Block","src":"4407:109:59","statements":[{"expression":{"arguments":[{"expression":{"id":18994,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"4465:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":18995,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4481:27:59","memberName":"ADD_LIQUIDITY_CUSTOM_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18634,"src":"4465:43:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":18991,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18984,"src":"4446:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":18989,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"4424:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":18990,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4439:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"4424:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":18992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4424:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":18993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4454:10:59","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"4424:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":18996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4424:85:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":18988,"id":18997,"nodeType":"Return","src":"4417:92:59"}]},"id":18999,"implemented":true,"kind":"function","modifiers":[],"name":"supportsAddLiquidityCustom","nameLocation":"4328:26:59","nodeType":"FunctionDefinition","parameters":{"id":18985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18984,"mutability":"mutable","name":"config","nameLocation":"4370:6:59","nodeType":"VariableDeclaration","scope":18999,"src":"4355:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":18983,"nodeType":"UserDefinedTypeName","pathNode":{"id":18982,"name":"PoolConfigBits","nameLocations":["4355:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"4355:14:59"},"referencedDeclaration":2184,"src":"4355:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"4354:23:59"},"returnParameters":{"id":18988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18987,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18999,"src":"4401:4:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18986,"name":"bool","nodeType":"ElementaryTypeName","src":"4401:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4400:6:59"},"scope":19568,"src":"4319:197:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":19017,"nodeType":"Block","src":"4601:145:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19005,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19002,"src":"4615:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":19006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4622:26:59","memberName":"supportsAddLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":18999,"src":"4615:33:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":19007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4615:35:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":19008,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4654:5:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"4615:44:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19016,"nodeType":"IfStatement","src":"4611:129:59","trueBody":{"id":19015,"nodeType":"Block","src":"4661:79:59","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19010,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"4682:12:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":19012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4695:32:59","memberName":"DoesNotSupportAddLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":1170,"src":"4682:45:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4682:47:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19014,"nodeType":"RevertStatement","src":"4675:54:59"}]}}]},"id":19018,"implemented":true,"kind":"function","modifiers":[],"name":"requireAddLiquidityCustomEnabled","nameLocation":"4531:32:59","nodeType":"FunctionDefinition","parameters":{"id":19003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19002,"mutability":"mutable","name":"config","nameLocation":"4579:6:59","nodeType":"VariableDeclaration","scope":19018,"src":"4564:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19001,"nodeType":"UserDefinedTypeName","pathNode":{"id":19000,"name":"PoolConfigBits","nameLocations":["4564:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"4564:14:59"},"referencedDeclaration":2184,"src":"4564:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"4563:23:59"},"returnParameters":{"id":19004,"nodeType":"ParameterList","parameters":[],"src":"4601:0:59"},"scope":19568,"src":"4522:224:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":19042,"nodeType":"Block","src":"4898:256:59","statements":[{"expression":{"arguments":[{"arguments":[{"id":19036,"name":"enableAddLiquidityCustom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19023,"src":"5026:24:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19037,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"5072:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19038,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5088:27:59","memberName":"ADD_LIQUIDITY_CUSTOM_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18634,"src":"5072:43:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":19033,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19021,"src":"4986:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":19031,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"4964:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19032,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4979:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"4964:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":19034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4964:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4994:10:59","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"4964:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":19039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4964:169:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":19029,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"4927:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19030,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4942:4:59","memberName":"wrap","nodeType":"MemberAccess","src":"4927:19:59","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":19040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4927:220:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":19028,"id":19041,"nodeType":"Return","src":"4908:239:59"}]},"id":19043,"implemented":true,"kind":"function","modifiers":[],"name":"setAddLiquidityCustom","nameLocation":"4761:21:59","nodeType":"FunctionDefinition","parameters":{"id":19024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19021,"mutability":"mutable","name":"config","nameLocation":"4807:6:59","nodeType":"VariableDeclaration","scope":19043,"src":"4792:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19020,"nodeType":"UserDefinedTypeName","pathNode":{"id":19019,"name":"PoolConfigBits","nameLocations":["4792:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"4792:14:59"},"referencedDeclaration":2184,"src":"4792:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":19023,"mutability":"mutable","name":"enableAddLiquidityCustom","nameLocation":"4828:24:59","nodeType":"VariableDeclaration","scope":19043,"src":"4823:29:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19022,"name":"bool","nodeType":"ElementaryTypeName","src":"4823:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4782:76:59"},"returnParameters":{"id":19028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19027,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19043,"src":"4882:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19026,"nodeType":"UserDefinedTypeName","pathNode":{"id":19025,"name":"PoolConfigBits","nameLocations":["4882:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"4882:14:59"},"referencedDeclaration":2184,"src":"4882:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"4881:16:59"},"scope":19568,"src":"4752:402:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":19060,"nodeType":"Block","src":"5251:112:59","statements":[{"expression":{"arguments":[{"expression":{"id":19056,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"5309:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19057,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5325:30:59","memberName":"REMOVE_LIQUIDITY_CUSTOM_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18639,"src":"5309:46:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":19053,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19046,"src":"5290:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":19051,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"5268:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19052,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5283:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"5268:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":19054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5268:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5298:10:59","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"5268:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":19058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5268:88:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":19050,"id":19059,"nodeType":"Return","src":"5261:95:59"}]},"id":19061,"implemented":true,"kind":"function","modifiers":[],"name":"supportsRemoveLiquidityCustom","nameLocation":"5169:29:59","nodeType":"FunctionDefinition","parameters":{"id":19047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19046,"mutability":"mutable","name":"config","nameLocation":"5214:6:59","nodeType":"VariableDeclaration","scope":19061,"src":"5199:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19045,"nodeType":"UserDefinedTypeName","pathNode":{"id":19044,"name":"PoolConfigBits","nameLocations":["5199:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"5199:14:59"},"referencedDeclaration":2184,"src":"5199:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"5198:23:59"},"returnParameters":{"id":19050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19049,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19061,"src":"5245:4:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19048,"name":"bool","nodeType":"ElementaryTypeName","src":"5245:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5244:6:59"},"scope":19568,"src":"5160:203:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":19079,"nodeType":"Block","src":"5451:151:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19067,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19064,"src":"5465:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":19068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5472:29:59","memberName":"supportsRemoveLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":19061,"src":"5465:36:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":19069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5465:38:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":19070,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5507:5:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"5465:47:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19078,"nodeType":"IfStatement","src":"5461:135:59","trueBody":{"id":19077,"nodeType":"Block","src":"5514:82:59","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19072,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"5535:12:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":19074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5548:35:59","memberName":"DoesNotSupportRemoveLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":1206,"src":"5535:48:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5535:50:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19076,"nodeType":"RevertStatement","src":"5528:57:59"}]}}]},"id":19080,"implemented":true,"kind":"function","modifiers":[],"name":"requireRemoveLiquidityCustomEnabled","nameLocation":"5378:35:59","nodeType":"FunctionDefinition","parameters":{"id":19065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19064,"mutability":"mutable","name":"config","nameLocation":"5429:6:59","nodeType":"VariableDeclaration","scope":19080,"src":"5414:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19063,"nodeType":"UserDefinedTypeName","pathNode":{"id":19062,"name":"PoolConfigBits","nameLocations":["5414:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"5414:14:59"},"referencedDeclaration":2184,"src":"5414:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"5413:23:59"},"returnParameters":{"id":19066,"nodeType":"ParameterList","parameters":[],"src":"5451:0:59"},"scope":19568,"src":"5369:233:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":19104,"nodeType":"Block","src":"5760:262:59","statements":[{"expression":{"arguments":[{"arguments":[{"id":19098,"name":"enableRemoveLiquidityCustom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19085,"src":"5888:27:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19099,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"5937:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19100,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5953:30:59","memberName":"REMOVE_LIQUIDITY_CUSTOM_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18639,"src":"5937:46:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":19095,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19083,"src":"5848:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":19093,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"5826:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19094,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5841:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"5826:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":19096,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5826:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5856:10:59","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"5826:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":19101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5826:175:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":19091,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"5789:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19092,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5804:4:59","memberName":"wrap","nodeType":"MemberAccess","src":"5789:19:59","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":19102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5789:226:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":19090,"id":19103,"nodeType":"Return","src":"5770:245:59"}]},"id":19105,"implemented":true,"kind":"function","modifiers":[],"name":"setRemoveLiquidityCustom","nameLocation":"5617:24:59","nodeType":"FunctionDefinition","parameters":{"id":19086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19083,"mutability":"mutable","name":"config","nameLocation":"5666:6:59","nodeType":"VariableDeclaration","scope":19105,"src":"5651:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19082,"nodeType":"UserDefinedTypeName","pathNode":{"id":19081,"name":"PoolConfigBits","nameLocations":["5651:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"5651:14:59"},"referencedDeclaration":2184,"src":"5651:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":19085,"mutability":"mutable","name":"enableRemoveLiquidityCustom","nameLocation":"5687:27:59","nodeType":"VariableDeclaration","scope":19105,"src":"5682:32:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19084,"name":"bool","nodeType":"ElementaryTypeName","src":"5682:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5641:79:59"},"returnParameters":{"id":19090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19089,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19105,"src":"5744:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19088,"nodeType":"UserDefinedTypeName","pathNode":{"id":19087,"name":"PoolConfigBits","nameLocations":["5744:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"5744:14:59"},"referencedDeclaration":2184,"src":"5744:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"5743:16:59"},"scope":19568,"src":"5608:414:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":19122,"nodeType":"Block","src":"6106:97:59","statements":[{"expression":{"arguments":[{"expression":{"id":19118,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"6164:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19119,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6180:15:59","memberName":"DONATION_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18644,"src":"6164:31:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":19115,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19108,"src":"6145:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":19113,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"6123:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19114,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6138:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"6123:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":19116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6123:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6153:10:59","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"6123:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":19120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6123:73:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":19112,"id":19121,"nodeType":"Return","src":"6116:80:59"}]},"id":19123,"implemented":true,"kind":"function","modifiers":[],"name":"supportsDonation","nameLocation":"6037:16:59","nodeType":"FunctionDefinition","parameters":{"id":19109,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19108,"mutability":"mutable","name":"config","nameLocation":"6069:6:59","nodeType":"VariableDeclaration","scope":19123,"src":"6054:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19107,"nodeType":"UserDefinedTypeName","pathNode":{"id":19106,"name":"PoolConfigBits","nameLocations":["6054:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"6054:14:59"},"referencedDeclaration":2184,"src":"6054:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"6053:23:59"},"returnParameters":{"id":19112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19111,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19123,"src":"6100:4:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19110,"name":"bool","nodeType":"ElementaryTypeName","src":"6100:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6099:6:59"},"scope":19568,"src":"6028:175:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":19147,"nodeType":"Block","src":"6313:176:59","statements":[{"expression":{"arguments":[{"arguments":[{"id":19141,"name":"enableDonation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19128,"src":"6420:14:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19142,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"6436:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19143,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6452:15:59","memberName":"DONATION_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18644,"src":"6436:31:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":19138,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19126,"src":"6401:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":19136,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"6379:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19137,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6394:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"6379:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":19139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6379:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6409:10:59","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"6379:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":19144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6379:89:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":19134,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"6342:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19135,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6357:4:59","memberName":"wrap","nodeType":"MemberAccess","src":"6342:19:59","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":19145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6342:140:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":19133,"id":19146,"nodeType":"Return","src":"6323:159:59"}]},"id":19148,"implemented":true,"kind":"function","modifiers":[],"name":"setDonation","nameLocation":"6218:11:59","nodeType":"FunctionDefinition","parameters":{"id":19129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19126,"mutability":"mutable","name":"config","nameLocation":"6245:6:59","nodeType":"VariableDeclaration","scope":19148,"src":"6230:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19125,"nodeType":"UserDefinedTypeName","pathNode":{"id":19124,"name":"PoolConfigBits","nameLocations":["6230:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"6230:14:59"},"referencedDeclaration":2184,"src":"6230:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":19128,"mutability":"mutable","name":"enableDonation","nameLocation":"6258:14:59","nodeType":"VariableDeclaration","scope":19148,"src":"6253:19:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19127,"name":"bool","nodeType":"ElementaryTypeName","src":"6253:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6229:44:59"},"returnParameters":{"id":19133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19132,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19148,"src":"6297:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19131,"nodeType":"UserDefinedTypeName","pathNode":{"id":19130,"name":"PoolConfigBits","nameLocations":["6297:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"6297:14:59"},"referencedDeclaration":2184,"src":"6297:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"6296:16:59"},"scope":19568,"src":"6209:280:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":19166,"nodeType":"Block","src":"6564:125:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19154,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19151,"src":"6578:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":19155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6585:16:59","memberName":"supportsDonation","nodeType":"MemberAccess","referencedDeclaration":19123,"src":"6578:23:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":19156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6578:25:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":19157,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6607:5:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"6578:34:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19165,"nodeType":"IfStatement","src":"6574:109:59","trueBody":{"id":19164,"nodeType":"Block","src":"6614:69:59","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19159,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"6635:12:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":19161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6648:22:59","memberName":"DoesNotSupportDonation","nodeType":"MemberAccess","referencedDeclaration":1173,"src":"6635:35:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6635:37:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19163,"nodeType":"RevertStatement","src":"6628:44:59"}]}}]},"id":19167,"implemented":true,"kind":"function","modifiers":[],"name":"requireDonationEnabled","nameLocation":"6504:22:59","nodeType":"FunctionDefinition","parameters":{"id":19152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19151,"mutability":"mutable","name":"config","nameLocation":"6542:6:59","nodeType":"VariableDeclaration","scope":19167,"src":"6527:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19150,"nodeType":"UserDefinedTypeName","pathNode":{"id":19149,"name":"PoolConfigBits","nameLocations":["6527:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"6527:14:59"},"referencedDeclaration":2184,"src":"6527:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"6526:23:59"},"returnParameters":{"id":19153,"nodeType":"ParameterList","parameters":[],"src":"6564:0:59"},"scope":19568,"src":"6495:194:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":19187,"nodeType":"Block","src":"6822:164:59","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":19180,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"6892:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19181,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6908:22:59","memberName":"STATIC_SWAP_FEE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18699,"src":"6892:38:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":19182,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2467,"src":"6932:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":19177,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19170,"src":"6873:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":19175,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"6851:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19176,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6866:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"6851:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":19178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6851:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6881:10:59","memberName":"decodeUint","nodeType":"MemberAccess","referencedDeclaration":4253,"src":"6851:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256) pure returns (uint256)"}},"id":19183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6851:95:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":19184,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2470,"src":"6961:18:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6851:128:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19174,"id":19186,"nodeType":"Return","src":"6832:147:59"}]},"id":19188,"implemented":true,"kind":"function","modifiers":[],"name":"getStaticSwapFeePercentage","nameLocation":"6740:26:59","nodeType":"FunctionDefinition","parameters":{"id":19171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19170,"mutability":"mutable","name":"config","nameLocation":"6782:6:59","nodeType":"VariableDeclaration","scope":19188,"src":"6767:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19169,"nodeType":"UserDefinedTypeName","pathNode":{"id":19168,"name":"PoolConfigBits","nameLocations":["6767:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"6767:14:59"},"referencedDeclaration":2184,"src":"6767:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"6766:23:59"},"returnParameters":{"id":19174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19173,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19188,"src":"6813:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19172,"name":"uint256","nodeType":"ElementaryTypeName","src":"6813:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6812:9:59"},"scope":19568,"src":"6731:255:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":19227,"nodeType":"Block","src":"7105:506:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19199,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19193,"src":"7292:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":19200,"name":"MAX_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2473,"src":"7300:18:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7292:26:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19208,"nodeType":"IfStatement","src":"7288:97:59","trueBody":{"id":19207,"nodeType":"Block","src":"7320:65:59","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19202,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"7341:12:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":19204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7354:18:59","memberName":"PercentageAboveMax","nodeType":"MemberAccess","referencedDeclaration":1221,"src":"7341:31:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7341:33:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19206,"nodeType":"RevertStatement","src":"7334:40:59"}]}},{"expression":{"id":19211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19209,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19193,"src":"7394:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":19210,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2470,"src":"7403:18:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7394:27:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19212,"nodeType":"ExpressionStatement","src":"7394:27:59"},{"expression":{"arguments":[{"arguments":[{"id":19220,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19193,"src":"7529:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19221,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"7536:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19222,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7552:22:59","memberName":"STATIC_SWAP_FEE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18699,"src":"7536:38:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":19223,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2467,"src":"7576:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":19217,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19191,"src":"7510:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":19215,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"7488:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19216,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7503:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"7488:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":19218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7488:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7518:10:59","memberName":"insertUint","nodeType":"MemberAccess","referencedDeclaration":4081,"src":"7488:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256,uint256) pure returns (bytes32)"}},"id":19224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7488:102:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":19213,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"7451:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19214,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7466:4:59","memberName":"wrap","nodeType":"MemberAccess","src":"7451:19:59","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":19225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7451:153:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":19198,"id":19226,"nodeType":"Return","src":"7432:172:59"}]},"id":19228,"implemented":true,"kind":"function","modifiers":[],"name":"setStaticSwapFeePercentage","nameLocation":"7001:26:59","nodeType":"FunctionDefinition","parameters":{"id":19194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19191,"mutability":"mutable","name":"config","nameLocation":"7043:6:59","nodeType":"VariableDeclaration","scope":19228,"src":"7028:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19190,"nodeType":"UserDefinedTypeName","pathNode":{"id":19189,"name":"PoolConfigBits","nameLocations":["7028:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"7028:14:59"},"referencedDeclaration":2184,"src":"7028:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":19193,"mutability":"mutable","name":"value","nameLocation":"7059:5:59","nodeType":"VariableDeclaration","scope":19228,"src":"7051:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19192,"name":"uint256","nodeType":"ElementaryTypeName","src":"7051:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7027:38:59"},"returnParameters":{"id":19198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19197,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19228,"src":"7089:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19196,"nodeType":"UserDefinedTypeName","pathNode":{"id":19195,"name":"PoolConfigBits","nameLocations":["7089:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"7089:14:59"},"referencedDeclaration":2184,"src":"7089:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"7088:16:59"},"scope":19568,"src":"6992:619:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":19248,"nodeType":"Block","src":"7711:167:59","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":19241,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"7781:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19242,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7797:25:59","memberName":"AGGREGATE_SWAP_FEE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18704,"src":"7781:41:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19243,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2467,"src":"7824:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":19238,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19231,"src":"7762:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":19236,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"7740:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19237,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7755:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"7740:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":19239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7740:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7770:10:59","memberName":"decodeUint","nodeType":"MemberAccess","referencedDeclaration":4253,"src":"7740:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256) pure returns (uint256)"}},"id":19244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7740:98:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":19245,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2470,"src":"7853:18:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7740:131:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19235,"id":19247,"nodeType":"Return","src":"7721:150:59"}]},"id":19249,"implemented":true,"kind":"function","modifiers":[],"name":"getAggregateSwapFeePercentage","nameLocation":"7626:29:59","nodeType":"FunctionDefinition","parameters":{"id":19232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19231,"mutability":"mutable","name":"config","nameLocation":"7671:6:59","nodeType":"VariableDeclaration","scope":19249,"src":"7656:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19230,"nodeType":"UserDefinedTypeName","pathNode":{"id":19229,"name":"PoolConfigBits","nameLocations":["7656:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"7656:14:59"},"referencedDeclaration":2184,"src":"7656:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"7655:23:59"},"returnParameters":{"id":19235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19234,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19249,"src":"7702:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19233,"name":"uint256","nodeType":"ElementaryTypeName","src":"7702:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7701:9:59"},"scope":19568,"src":"7617:261:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":19288,"nodeType":"Block","src":"8022:414:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19260,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19254,"src":"8036:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":19261,"name":"MAX_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2473,"src":"8044:18:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8036:26:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19269,"nodeType":"IfStatement","src":"8032:97:59","trueBody":{"id":19268,"nodeType":"Block","src":"8064:65:59","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19263,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"8085:12:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":19265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8098:18:59","memberName":"PercentageAboveMax","nodeType":"MemberAccess","referencedDeclaration":1221,"src":"8085:31:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8085:33:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19267,"nodeType":"RevertStatement","src":"8078:40:59"}]}},{"expression":{"id":19272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19270,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19254,"src":"8138:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":19271,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2470,"src":"8147:18:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8138:27:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19273,"nodeType":"ExpressionStatement","src":"8138:27:59"},{"expression":{"arguments":[{"arguments":[{"id":19281,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19254,"src":"8294:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19282,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"8321:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19283,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8337:25:59","memberName":"AGGREGATE_SWAP_FEE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18704,"src":"8321:41:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19284,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2467,"src":"8384:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":19278,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19252,"src":"8254:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":19276,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"8232:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19277,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8247:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"8232:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":19279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8232:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8262:10:59","memberName":"insertUint","nodeType":"MemberAccess","referencedDeclaration":4081,"src":"8232:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256,uint256) pure returns (bytes32)"}},"id":19285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8232:183:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":19274,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"8195:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19275,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8210:4:59","memberName":"wrap","nodeType":"MemberAccess","src":"8195:19:59","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":19286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8195:234:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":19259,"id":19287,"nodeType":"Return","src":"8176:253:59"}]},"id":19289,"implemented":true,"kind":"function","modifiers":[],"name":"setAggregateSwapFeePercentage","nameLocation":"7893:29:59","nodeType":"FunctionDefinition","parameters":{"id":19255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19252,"mutability":"mutable","name":"config","nameLocation":"7947:6:59","nodeType":"VariableDeclaration","scope":19289,"src":"7932:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19251,"nodeType":"UserDefinedTypeName","pathNode":{"id":19250,"name":"PoolConfigBits","nameLocations":["7932:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"7932:14:59"},"referencedDeclaration":2184,"src":"7932:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":19254,"mutability":"mutable","name":"value","nameLocation":"7971:5:59","nodeType":"VariableDeclaration","scope":19289,"src":"7963:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19253,"name":"uint256","nodeType":"ElementaryTypeName","src":"7963:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7922:60:59"},"returnParameters":{"id":19259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19258,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19289,"src":"8006:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19257,"nodeType":"UserDefinedTypeName","pathNode":{"id":19256,"name":"PoolConfigBits","nameLocations":["8006:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"8006:14:59"},"referencedDeclaration":2184,"src":"8006:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"8005:16:59"},"scope":19568,"src":"7884:552:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":19309,"nodeType":"Block","src":"8537:168:59","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":19302,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"8607:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19303,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8623:26:59","memberName":"AGGREGATE_YIELD_FEE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18709,"src":"8607:42:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19304,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2467,"src":"8651:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":19299,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19292,"src":"8588:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":19297,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"8566:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19298,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8581:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"8566:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":19300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8566:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8596:10:59","memberName":"decodeUint","nodeType":"MemberAccess","referencedDeclaration":4253,"src":"8566:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256) pure returns (uint256)"}},"id":19305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8566:99:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":19306,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2470,"src":"8680:18:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8566:132:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19296,"id":19308,"nodeType":"Return","src":"8547:151:59"}]},"id":19310,"implemented":true,"kind":"function","modifiers":[],"name":"getAggregateYieldFeePercentage","nameLocation":"8451:30:59","nodeType":"FunctionDefinition","parameters":{"id":19293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19292,"mutability":"mutable","name":"config","nameLocation":"8497:6:59","nodeType":"VariableDeclaration","scope":19310,"src":"8482:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19291,"nodeType":"UserDefinedTypeName","pathNode":{"id":19290,"name":"PoolConfigBits","nameLocations":["8482:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"8482:14:59"},"referencedDeclaration":2184,"src":"8482:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"8481:23:59"},"returnParameters":{"id":19296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19295,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19310,"src":"8528:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19294,"name":"uint256","nodeType":"ElementaryTypeName","src":"8528:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8527:9:59"},"scope":19568,"src":"8442:263:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":19349,"nodeType":"Block","src":"8850:415:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19321,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19315,"src":"8864:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":19322,"name":"MAX_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2473,"src":"8872:18:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8864:26:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19330,"nodeType":"IfStatement","src":"8860:97:59","trueBody":{"id":19329,"nodeType":"Block","src":"8892:65:59","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19324,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"8913:12:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":19326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8926:18:59","memberName":"PercentageAboveMax","nodeType":"MemberAccess","referencedDeclaration":1221,"src":"8913:31:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8913:33:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19328,"nodeType":"RevertStatement","src":"8906:40:59"}]}},{"expression":{"id":19333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19331,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19315,"src":"8966:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":19332,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2470,"src":"8975:18:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8966:27:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19334,"nodeType":"ExpressionStatement","src":"8966:27:59"},{"expression":{"arguments":[{"arguments":[{"id":19342,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19315,"src":"9122:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19343,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"9149:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19344,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9165:26:59","memberName":"AGGREGATE_YIELD_FEE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18709,"src":"9149:42:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19345,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2467,"src":"9213:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":19339,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19313,"src":"9082:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":19337,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"9060:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19338,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9075:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"9060:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":19340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9060:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9090:10:59","memberName":"insertUint","nodeType":"MemberAccess","referencedDeclaration":4081,"src":"9060:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256,uint256) pure returns (bytes32)"}},"id":19346,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9060:184:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":19335,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"9023:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19336,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9038:4:59","memberName":"wrap","nodeType":"MemberAccess","src":"9023:19:59","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":19347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9023:235:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":19320,"id":19348,"nodeType":"Return","src":"9004:254:59"}]},"id":19350,"implemented":true,"kind":"function","modifiers":[],"name":"setAggregateYieldFeePercentage","nameLocation":"8720:30:59","nodeType":"FunctionDefinition","parameters":{"id":19316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19313,"mutability":"mutable","name":"config","nameLocation":"8775:6:59","nodeType":"VariableDeclaration","scope":19350,"src":"8760:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19312,"nodeType":"UserDefinedTypeName","pathNode":{"id":19311,"name":"PoolConfigBits","nameLocations":["8760:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"8760:14:59"},"referencedDeclaration":2184,"src":"8760:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":19315,"mutability":"mutable","name":"value","nameLocation":"8799:5:59","nodeType":"VariableDeclaration","scope":19350,"src":"8791:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19314,"name":"uint256","nodeType":"ElementaryTypeName","src":"8791:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8750:60:59"},"returnParameters":{"id":19320,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19319,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19350,"src":"8834:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19318,"nodeType":"UserDefinedTypeName","pathNode":{"id":19317,"name":"PoolConfigBits","nameLocations":["8834:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"8834:14:59"},"referencedDeclaration":2184,"src":"8834:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"8833:16:59"},"scope":19568,"src":"8711:554:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":19372,"nodeType":"Block","src":"9355:267:59","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":19365,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"9470:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19366,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9486:30:59","memberName":"DECIMAL_SCALING_FACTORS_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18714,"src":"9470:46:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19367,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"9538:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19368,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9554:29:59","memberName":"TOKEN_DECIMAL_DIFFS_BITLENGTH","nodeType":"MemberAccess","referencedDeclaration":18722,"src":"9538:45:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":19362,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19353,"src":"9430:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":19360,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"9408:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19361,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9423:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"9408:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":19363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9408:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9438:10:59","memberName":"decodeUint","nodeType":"MemberAccess","referencedDeclaration":4253,"src":"9408:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256) pure returns (uint256)"}},"id":19369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9408:193:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19359,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9384:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":19358,"name":"uint40","nodeType":"ElementaryTypeName","src":"9384:6:59","typeDescriptions":{}}},"id":19370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9384:231:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"functionReturnParameters":19357,"id":19371,"nodeType":"Return","src":"9365:250:59"}]},"id":19373,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenDecimalDiffs","nameLocation":"9280:20:59","nodeType":"FunctionDefinition","parameters":{"id":19354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19353,"mutability":"mutable","name":"config","nameLocation":"9316:6:59","nodeType":"VariableDeclaration","scope":19373,"src":"9301:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19352,"nodeType":"UserDefinedTypeName","pathNode":{"id":19351,"name":"PoolConfigBits","nameLocations":["9301:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"9301:14:59"},"referencedDeclaration":2184,"src":"9301:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"9300:23:59"},"returnParameters":{"id":19357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19356,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19373,"src":"9347:6:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":19355,"name":"uint40","nodeType":"ElementaryTypeName","src":"9347:6:59","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"9346:8:59"},"scope":19568,"src":"9271:351:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":19441,"nodeType":"Block","src":"9767:667:59","statements":[{"assignments":[19388],"declarations":[{"constant":false,"id":19388,"mutability":"mutable","name":"scalingFactors","nameLocation":"9794:14:59","nodeType":"VariableDeclaration","scope":19441,"src":"9777:31:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":19386,"name":"uint256","nodeType":"ElementaryTypeName","src":"9777:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19387,"nodeType":"ArrayTypeName","src":"9777:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":19394,"initialValue":{"arguments":[{"id":19392,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19378,"src":"9825:9:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19391,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"9811:13:59","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":19389,"name":"uint256","nodeType":"ElementaryTypeName","src":"9815:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19390,"nodeType":"ArrayTypeName","src":"9815:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":19393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9811:24:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"9777:58:59"},{"assignments":[19396],"declarations":[{"constant":false,"id":19396,"mutability":"mutable","name":"tokenDecimalDiffs","nameLocation":"9854:17:59","nodeType":"VariableDeclaration","scope":19441,"src":"9846:25:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19395,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9846:7:59","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":19406,"initialValue":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19401,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19376,"src":"9890:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":19402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9897:20:59","memberName":"getTokenDecimalDiffs","nodeType":"MemberAccess","referencedDeclaration":19373,"src":"9890:27:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_uint40_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (uint40)"}},"id":19403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9890:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint40","typeString":"uint40"}],"id":19400,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9882:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":19399,"name":"uint256","nodeType":"ElementaryTypeName","src":"9882:7:59","typeDescriptions":{}}},"id":19404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9882:38:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19398,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9874:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":19397,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9874:7:59","typeDescriptions":{}}},"id":19405,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9874:47:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9846:75:59"},{"body":{"id":19437,"nodeType":"Block","src":"9972:424:59","statements":[{"assignments":[19418],"declarations":[{"constant":false,"id":19418,"mutability":"mutable","name":"decimalDiff","nameLocation":"9994:11:59","nodeType":"VariableDeclaration","scope":19437,"src":"9986:19:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19417,"name":"uint256","nodeType":"ElementaryTypeName","src":"9986:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19428,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19421,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19408,"src":"10054:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":19422,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"10058:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19423,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10074:22:59","memberName":"DECIMAL_DIFF_BITLENGTH","nodeType":"MemberAccess","referencedDeclaration":18725,"src":"10058:38:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"10054:42:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19425,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"10114:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19426,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10130:22:59","memberName":"DECIMAL_DIFF_BITLENGTH","nodeType":"MemberAccess","referencedDeclaration":18725,"src":"10114:38:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":19419,"name":"tokenDecimalDiffs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19396,"src":"10008:17:59","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10026:10:59","memberName":"decodeUint","nodeType":"MemberAccess","referencedDeclaration":4253,"src":"10008:28:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256) pure returns (uint256)"}},"id":19427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10008:158:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9986:180:59"},{"expression":{"id":19435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":19429,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19388,"src":"10348:14:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":19431,"indexExpression":{"id":19430,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19408,"src":"10363:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10348:17:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":19432,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10368:2:59","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":19433,"name":"decimalDiff","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19418,"src":"10374:11:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10368:17:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10348:37:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19436,"nodeType":"ExpressionStatement","src":"10348:37:59"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19411,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19408,"src":"9952:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":19412,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19378,"src":"9956:9:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9952:13:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19438,"initializationExpression":{"assignments":[19408],"declarations":[{"constant":false,"id":19408,"mutability":"mutable","name":"i","nameLocation":"9945:1:59","nodeType":"VariableDeclaration","scope":19438,"src":"9937:9:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19407,"name":"uint256","nodeType":"ElementaryTypeName","src":"9937:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19410,"initialValue":{"hexValue":"30","id":19409,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9949:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9937:13:59"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":19415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"9967:3:59","subExpression":{"id":19414,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19408,"src":"9969:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19416,"nodeType":"ExpressionStatement","src":"9967:3:59"},"nodeType":"ForStatement","src":"9932:464:59"},{"expression":{"id":19439,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19388,"src":"10413:14:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":19383,"id":19440,"nodeType":"Return","src":"10406:21:59"}]},"id":19442,"implemented":true,"kind":"function","modifiers":[],"name":"getDecimalScalingFactors","nameLocation":"9637:24:59","nodeType":"FunctionDefinition","parameters":{"id":19379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19376,"mutability":"mutable","name":"config","nameLocation":"9686:6:59","nodeType":"VariableDeclaration","scope":19442,"src":"9671:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19375,"nodeType":"UserDefinedTypeName","pathNode":{"id":19374,"name":"PoolConfigBits","nameLocations":["9671:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"9671:14:59"},"referencedDeclaration":2184,"src":"9671:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":19378,"mutability":"mutable","name":"numTokens","nameLocation":"9710:9:59","nodeType":"VariableDeclaration","scope":19442,"src":"9702:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19377,"name":"uint256","nodeType":"ElementaryTypeName","src":"9702:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9661:64:59"},"returnParameters":{"id":19383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19382,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19442,"src":"9749:16:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":19380,"name":"uint256","nodeType":"ElementaryTypeName","src":"9749:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19381,"nodeType":"ArrayTypeName","src":"9749:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9748:18:59"},"scope":19568,"src":"9628:806:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":19468,"nodeType":"Block","src":"10546:307:59","statements":[{"expression":{"arguments":[{"arguments":[{"id":19460,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19447,"src":"10674:5:59","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},{"expression":{"id":19461,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"10701:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19462,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10717:30:59","memberName":"DECIMAL_SCALING_FACTORS_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18714,"src":"10701:46:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19463,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"10769:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19464,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10785:29:59","memberName":"TOKEN_DECIMAL_DIFFS_BITLENGTH","nodeType":"MemberAccess","referencedDeclaration":18722,"src":"10769:45:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint40","typeString":"uint40"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":19457,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19445,"src":"10634:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":19455,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"10612:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19456,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10627:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"10612:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":19458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10612:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10642:10:59","memberName":"insertUint","nodeType":"MemberAccess","referencedDeclaration":4081,"src":"10612:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256,uint256) pure returns (bytes32)"}},"id":19465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10612:220:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":19453,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"10575:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19454,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10590:4:59","memberName":"wrap","nodeType":"MemberAccess","src":"10575:19:59","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":19466,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10575:271:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":19452,"id":19467,"nodeType":"Return","src":"10556:290:59"}]},"id":19469,"implemented":true,"kind":"function","modifiers":[],"name":"setTokenDecimalDiffs","nameLocation":"10449:20:59","nodeType":"FunctionDefinition","parameters":{"id":19448,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19445,"mutability":"mutable","name":"config","nameLocation":"10485:6:59","nodeType":"VariableDeclaration","scope":19469,"src":"10470:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19444,"nodeType":"UserDefinedTypeName","pathNode":{"id":19443,"name":"PoolConfigBits","nameLocations":["10470:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"10470:14:59"},"referencedDeclaration":2184,"src":"10470:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":19447,"mutability":"mutable","name":"value","nameLocation":"10500:5:59","nodeType":"VariableDeclaration","scope":19469,"src":"10493:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":19446,"name":"uint40","nodeType":"ElementaryTypeName","src":"10493:6:59","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"10469:37:59"},"returnParameters":{"id":19452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19451,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19469,"src":"10530:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19450,"nodeType":"UserDefinedTypeName","pathNode":{"id":19449,"name":"PoolConfigBits","nameLocations":["10530:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"10530:14:59"},"referencedDeclaration":2184,"src":"10530:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"10529:16:59"},"scope":19568,"src":"10440:413:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":19491,"nodeType":"Block","src":"10944:255:59","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":19484,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"11059:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19485,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11075:28:59","memberName":"PAUSE_WINDOW_END_TIME_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18719,"src":"11059:44:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19486,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"11125:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19487,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11141:19:59","memberName":"TIMESTAMP_BITLENGTH","nodeType":"MemberAccess","referencedDeclaration":18728,"src":"11125:35:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":19481,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19472,"src":"11019:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":19479,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"10997:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19480,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11012:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"10997:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":19482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10997:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11027:10:59","memberName":"decodeUint","nodeType":"MemberAccess","referencedDeclaration":4253,"src":"10997:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256) pure returns (uint256)"}},"id":19488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10997:181:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19478,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10973:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":19477,"name":"uint32","nodeType":"ElementaryTypeName","src":"10973:6:59","typeDescriptions":{}}},"id":19489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10973:219:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":19476,"id":19490,"nodeType":"Return","src":"10954:238:59"}]},"id":19492,"implemented":true,"kind":"function","modifiers":[],"name":"getPauseWindowEndTime","nameLocation":"10868:21:59","nodeType":"FunctionDefinition","parameters":{"id":19473,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19472,"mutability":"mutable","name":"config","nameLocation":"10905:6:59","nodeType":"VariableDeclaration","scope":19492,"src":"10890:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19471,"nodeType":"UserDefinedTypeName","pathNode":{"id":19470,"name":"PoolConfigBits","nameLocations":["10890:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"10890:14:59"},"referencedDeclaration":2184,"src":"10890:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"10889:23:59"},"returnParameters":{"id":19476,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19475,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19492,"src":"10936:6:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19474,"name":"uint32","nodeType":"ElementaryTypeName","src":"10936:6:59","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"10935:8:59"},"scope":19568,"src":"10859:340:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":19518,"nodeType":"Block","src":"11312:295:59","statements":[{"expression":{"arguments":[{"arguments":[{"id":19510,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19497,"src":"11440:5:59","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"expression":{"id":19511,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"11467:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19512,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11483:28:59","memberName":"PAUSE_WINDOW_END_TIME_OFFSET","nodeType":"MemberAccess","referencedDeclaration":18719,"src":"11467:44:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19513,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"11533:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19514,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11549:19:59","memberName":"TIMESTAMP_BITLENGTH","nodeType":"MemberAccess","referencedDeclaration":18728,"src":"11533:35:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":19507,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19495,"src":"11400:6:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}],"expression":{"id":19505,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"11378:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19506,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11393:6:59","memberName":"unwrap","nodeType":"MemberAccess","src":"11378:21:59","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":19508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11378:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11408:10:59","memberName":"insertUint","nodeType":"MemberAccess","referencedDeclaration":4081,"src":"11378:40:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256,uint256) pure returns (bytes32)"}},"id":19515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11378:208:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":19503,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"11341:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"type(PoolConfigBits)"}},"id":19504,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11356:4:59","memberName":"wrap","nodeType":"MemberAccess","src":"11341:19:59","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":19516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11341:259:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"functionReturnParameters":19502,"id":19517,"nodeType":"Return","src":"11322:278:59"}]},"id":19519,"implemented":true,"kind":"function","modifiers":[],"name":"setPauseWindowEndTime","nameLocation":"11214:21:59","nodeType":"FunctionDefinition","parameters":{"id":19498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19495,"mutability":"mutable","name":"config","nameLocation":"11251:6:59","nodeType":"VariableDeclaration","scope":19519,"src":"11236:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19494,"nodeType":"UserDefinedTypeName","pathNode":{"id":19493,"name":"PoolConfigBits","nameLocations":["11236:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"11236:14:59"},"referencedDeclaration":2184,"src":"11236:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":19497,"mutability":"mutable","name":"value","nameLocation":"11266:5:59","nodeType":"VariableDeclaration","scope":19519,"src":"11259:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19496,"name":"uint32","nodeType":"ElementaryTypeName","src":"11259:6:59","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"11235:37:59"},"returnParameters":{"id":19502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19501,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19519,"src":"11296:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19500,"nodeType":"UserDefinedTypeName","pathNode":{"id":19499,"name":"PoolConfigBits","nameLocations":["11296:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"11296:14:59"},"referencedDeclaration":2184,"src":"11296:14:59","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"11295:16:59"},"scope":19568,"src":"11205:402:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":19566,"nodeType":"Block","src":"11815:352:59","statements":[{"assignments":[19528],"declarations":[{"constant":false,"id":19528,"mutability":"mutable","name":"value","nameLocation":"11833:5:59","nodeType":"VariableDeclaration","scope":19566,"src":"11825:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19527,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11825:7:59","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":19529,"nodeType":"VariableDeclarationStatement","src":"11825:13:59"},{"body":{"id":19556,"nodeType":"Block","src":"11904:217:59","statements":[{"expression":{"id":19554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19541,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19528,"src":"11918:5:59","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":19544,"name":"tokenDecimalDiffs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19522,"src":"11960:17:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[] memory"}},"id":19546,"indexExpression":{"id":19545,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19531,"src":"11978:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11960:20:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19547,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19531,"src":"11998:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":19548,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"12002:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19549,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12018:22:59","memberName":"DECIMAL_DIFF_BITLENGTH","nodeType":"MemberAccess","referencedDeclaration":18725,"src":"12002:38:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11998:42:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19551,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18729,"src":"12058:15:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$18729_$","typeString":"type(library PoolConfigConst)"}},"id":19552,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12074:22:59","memberName":"DECIMAL_DIFF_BITLENGTH","nodeType":"MemberAccess","referencedDeclaration":18725,"src":"12058:38:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":19542,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19528,"src":"11926:5:59","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11932:10:59","memberName":"insertUint","nodeType":"MemberAccess","referencedDeclaration":4081,"src":"11926:16:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256,uint256) pure returns (bytes32)"}},"id":19553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11926:184:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11918:192:59","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19555,"nodeType":"ExpressionStatement","src":"11918:192:59"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19534,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19531,"src":"11869:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":19535,"name":"tokenDecimalDiffs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19522,"src":"11873:17:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[] memory"}},"id":19536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11891:6:59","memberName":"length","nodeType":"MemberAccess","src":"11873:24:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11869:28:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19557,"initializationExpression":{"assignments":[19531],"declarations":[{"constant":false,"id":19531,"mutability":"mutable","name":"i","nameLocation":"11862:1:59","nodeType":"VariableDeclaration","scope":19557,"src":"11854:9:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19530,"name":"uint256","nodeType":"ElementaryTypeName","src":"11854:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19533,"initialValue":{"hexValue":"30","id":19532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11866:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11854:13:59"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":19539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11899:3:59","subExpression":{"id":19538,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19531,"src":"11901:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19540,"nodeType":"ExpressionStatement","src":"11899:3:59"},"nodeType":"ForStatement","src":"11849:272:59"},{"expression":{"arguments":[{"arguments":[{"id":19562,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19528,"src":"12153:5:59","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":19561,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12145:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":19560,"name":"uint256","nodeType":"ElementaryTypeName","src":"12145:7:59","typeDescriptions":{}}},"id":19563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12145:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19559,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12138:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":19558,"name":"uint40","nodeType":"ElementaryTypeName","src":"12138:6:59","typeDescriptions":{}}},"id":19564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12138:22:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"functionReturnParameters":19526,"id":19565,"nodeType":"Return","src":"12131:29:59"}]},"id":19567,"implemented":true,"kind":"function","modifiers":[],"name":"toTokenDecimalDiffs","nameLocation":"11730:19:59","nodeType":"FunctionDefinition","parameters":{"id":19523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19522,"mutability":"mutable","name":"tokenDecimalDiffs","nameLocation":"11765:17:59","nodeType":"VariableDeclaration","scope":19567,"src":"11750:32:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[]"},"typeName":{"baseType":{"id":19520,"name":"uint8","nodeType":"ElementaryTypeName","src":"11750:5:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":19521,"nodeType":"ArrayTypeName","src":"11750:7:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_storage_ptr","typeString":"uint8[]"}},"visibility":"internal"}],"src":"11749:34:59"},"returnParameters":{"id":19526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19525,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19567,"src":"11807:6:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":19524,"name":"uint40","nodeType":"ElementaryTypeName","src":"11807:6:59","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"11806:8:59"},"scope":19568,"src":"11721:446:59","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":19569,"src":"1279:10890:59","usedErrors":[],"usedEvents":[]}],"src":"46:12124:59"},"id":59},"contracts/lib/PoolDataLib.sol":{"ast":{"absolutePath":"contracts/lib/PoolDataLib.sol","exportedSymbols":{"FixedPoint":[4766],"IERC20":[6980],"IVaultErrors":[1370],"PackedTokenBalance":[3032],"PoolConfigBits":[2184],"PoolConfigLib":[19568],"PoolData":[2331],"PoolDataLib":[20158],"Rounding":[2334],"ScalingHelpers":[3446],"TokenInfo":[2306],"TokenType":[2283]},"id":20159,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":19570,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:60"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":19572,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20159,"sourceUnit":6981,"src":"72:72:60","symbolAliases":[{"foreign":{"id":19571,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"81:6:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":19577,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20159,"sourceUnit":2474,"src":"146:119:60","symbolAliases":[{"foreign":{"id":19573,"name":"PoolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2331,"src":"155:8:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":19574,"name":"TokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2306,"src":"165:9:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":19575,"name":"TokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2283,"src":"176:9:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":19576,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"187:8:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":19579,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20159,"sourceUnit":1371,"src":"266:93:60","symbolAliases":[{"foreign":{"id":19578,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"275:12:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":19581,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20159,"sourceUnit":4767,"src":"361:92:60","symbolAliases":[{"foreign":{"id":19580,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4766,"src":"370:10:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","id":19583,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20159,"sourceUnit":3447,"src":"454:103:60","symbolAliases":[{"foreign":{"id":19582,"name":"ScalingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"463:14:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","id":19585,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20159,"sourceUnit":3033,"src":"558:111:60","symbolAliases":[{"foreign":{"id":19584,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3032,"src":"567:18:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/lib/PoolConfigLib.sol","file":"./PoolConfigLib.sol","id":19588,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20159,"sourceUnit":19569,"src":"671:68:60","symbolAliases":[{"foreign":{"id":19586,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"680:14:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":19587,"name":"PoolConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19568,"src":"696:13:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"PoolDataLib","contractDependencies":[],"contractKind":"library","documentation":{"id":19589,"nodeType":"StructuredDocumentation","src":"741:579:60","text":" @notice Helper functions to read/write a `PoolData` struct.\n @dev Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot per pool).\n This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct. The layout (i.e.,\n offsets for each data field) is specified in `PoolConfigConst`.\n The `PoolData` struct contains the raw bitmap with the entire pool state (`PoolConfigBits`), plus the token\n configuration, scaling factors, and dynamic information such as current balances and rates."},"fullyImplemented":true,"id":20158,"linearizedBaseContracts":[20158],"name":"PoolDataLib","nameLocation":"1329:11:60","nodeType":"ContractDefinition","nodes":[{"global":false,"id":19592,"libraryName":{"id":19590,"name":"PackedTokenBalance","nameLocations":["1353:18:60"],"nodeType":"IdentifierPath","referencedDeclaration":3032,"src":"1353:18:60"},"nodeType":"UsingForDirective","src":"1347:37:60","typeName":{"id":19591,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1376:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"global":false,"id":19594,"libraryName":{"id":19593,"name":"FixedPoint","nameLocations":["1395:10:60"],"nodeType":"IdentifierPath","referencedDeclaration":4766,"src":"1395:10:60"},"nodeType":"UsingForDirective","src":"1389:23:60"},{"global":false,"id":19596,"libraryName":{"id":19595,"name":"ScalingHelpers","nameLocations":["1423:14:60"],"nodeType":"IdentifierPath","referencedDeclaration":3446,"src":"1423:14:60"},"nodeType":"UsingForDirective","src":"1417:27:60"},{"global":false,"id":19600,"libraryName":{"id":19597,"name":"PoolConfigLib","nameLocations":["1455:13:60"],"nodeType":"IdentifierPath","referencedDeclaration":19568,"src":"1455:13:60"},"nodeType":"UsingForDirective","src":"1449:39:60","typeName":{"id":19599,"nodeType":"UserDefinedTypeName","pathNode":{"id":19598,"name":"PoolConfigBits","nameLocations":["1473:14:60"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"1473:14:60"},"referencedDeclaration":2184,"src":"1473:14:60","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}}},{"body":{"id":19830,"nodeType":"Block","src":"1843:2810:60","statements":[{"assignments":[19627],"declarations":[{"constant":false,"id":19627,"mutability":"mutable","name":"numTokens","nameLocation":"1861:9:60","nodeType":"VariableDeclaration","scope":19830,"src":"1853:17:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19626,"name":"uint256","nodeType":"ElementaryTypeName","src":"1853:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19630,"initialValue":{"expression":{"id":19628,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19620,"src":"1873:6:60","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage_ptr","typeString":"contract IERC20[] storage pointer"}},"id":19629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1880:6:60","memberName":"length","nodeType":"MemberAccess","src":"1873:13:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1853:33:60"},{"expression":{"id":19635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19631,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19603,"src":"1897:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19633,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1906:14:60","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"1897:23:60","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19634,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19610,"src":"1923:14:60","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"src":"1897:40:60","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":19636,"nodeType":"ExpressionStatement","src":"1897:40:60"},{"expression":{"id":19641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19637,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19603,"src":"1947:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19639,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1956:6:60","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":2314,"src":"1947:15:60","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19640,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19620,"src":"1965:6:60","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage_ptr","typeString":"contract IERC20[] storage pointer"}},"src":"1947:24:60","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":19642,"nodeType":"ExpressionStatement","src":"1947:24:60"},{"expression":{"id":19652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19643,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19603,"src":"1981:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19645,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1990:9:60","memberName":"tokenInfo","nodeType":"MemberAccess","referencedDeclaration":2318,"src":"1981:18:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2306_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19650,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19627,"src":"2018:9:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19649,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2002:15:60","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_TokenInfo_$2306_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct TokenInfo memory[] memory)"},"typeName":{"baseType":{"id":19647,"nodeType":"UserDefinedTypeName","pathNode":{"id":19646,"name":"TokenInfo","nameLocations":["2006:9:60"],"nodeType":"IdentifierPath","referencedDeclaration":2306,"src":"2006:9:60"},"referencedDeclaration":2306,"src":"2006:9:60","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2306_storage_ptr","typeString":"struct TokenInfo"}},"id":19648,"nodeType":"ArrayTypeName","src":"2006:11:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2306_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}}},"id":19651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2002:26:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2306_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo memory[] memory"}},"src":"1981:47:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2306_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo memory[] memory"}},"id":19653,"nodeType":"ExpressionStatement","src":"1981:47:60"},{"expression":{"id":19662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19654,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19603,"src":"2038:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19656,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2047:11:60","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":2321,"src":"2038:20:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19660,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19627,"src":"2075:9:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19659,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2061:13:60","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":19657,"name":"uint256","nodeType":"ElementaryTypeName","src":"2065:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19658,"nodeType":"ArrayTypeName","src":"2065:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":19661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2061:24:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"2038:47:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":19663,"nodeType":"ExpressionStatement","src":"2038:47:60"},{"expression":{"id":19672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19664,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19603,"src":"2095:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19666,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2104:20:60","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"2095:29:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19670,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19627,"src":"2141:9:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19669,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2127:13:60","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":19667,"name":"uint256","nodeType":"ElementaryTypeName","src":"2131:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19668,"nodeType":"ArrayTypeName","src":"2131:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":19671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2127:24:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"2095:56:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":19673,"nodeType":"ExpressionStatement","src":"2095:56:60"},{"expression":{"id":19683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19674,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19603,"src":"2161:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19676,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2170:21:60","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":2330,"src":"2161:30:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":19679,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19603,"src":"2233:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19680,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2242:14:60","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"2233:23:60","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},{"id":19681,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19627,"src":"2258:9:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19677,"name":"PoolConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19568,"src":"2194:13:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigLib_$19568_$","typeString":"type(library PoolConfigLib)"}},"id":19678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2208:24:60","memberName":"getDecimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":19442,"src":"2194:38:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (PoolConfigBits,uint256) pure returns (uint256[] memory)"}},"id":19682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2194:74:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"2161:107:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":19684,"nodeType":"ExpressionStatement","src":"2161:107:60"},{"expression":{"id":19693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19685,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19603,"src":"2278:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19687,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2287:10:60","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":2327,"src":"2278:19:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19691,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19627,"src":"2314:9:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19690,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2300:13:60","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":19688,"name":"uint256","nodeType":"ElementaryTypeName","src":"2304:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19689,"nodeType":"ArrayTypeName","src":"2304:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":19692,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2300:24:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"2278:46:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":19694,"nodeType":"ExpressionStatement","src":"2278:46:60"},{"assignments":[19696],"declarations":[{"constant":false,"id":19696,"mutability":"mutable","name":"poolSubjectToYieldFees","nameLocation":"2340:22:60","nodeType":"VariableDeclaration","scope":19830,"src":"2335:27:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19695,"name":"bool","nodeType":"ElementaryTypeName","src":"2335:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":19715,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":19697,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19603,"src":"2365:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19698,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2374:14:60","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"2365:23:60","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":19699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2389:17:60","memberName":"isPoolInitialized","nodeType":"MemberAccess","referencedDeclaration":18807,"src":"2365:41:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":19700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2365:43:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":19701,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19603,"src":"2424:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19702,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2433:14:60","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"2424:23:60","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":19703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2448:30:60","memberName":"getAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":19310,"src":"2424:54:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":19704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2424:56:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":19705,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2483:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2424:60:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2365:119:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":19708,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19603,"src":"2500:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19709,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2509:14:60","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"2500:23:60","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":19710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2524:20:60","memberName":"isPoolInRecoveryMode","nodeType":"MemberAccess","referencedDeclaration":18893,"src":"2500:44:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":19711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2500:46:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":19712,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2550:5:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"2500:55:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2365:190:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"2335:220:60"},{"body":{"id":19828,"nodeType":"Block","src":"2606:2041:60","statements":[{"assignments":[19728],"declarations":[{"constant":false,"id":19728,"mutability":"mutable","name":"tokenInfo","nameLocation":"2637:9:60","nodeType":"VariableDeclaration","scope":19828,"src":"2620:26:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2306_memory_ptr","typeString":"struct TokenInfo"},"typeName":{"id":19727,"nodeType":"UserDefinedTypeName","pathNode":{"id":19726,"name":"TokenInfo","nameLocations":["2620:9:60"],"nodeType":"IdentifierPath","referencedDeclaration":2306,"src":"2620:9:60"},"referencedDeclaration":2306,"src":"2620:9:60","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2306_storage_ptr","typeString":"struct TokenInfo"}},"visibility":"internal"}],"id":19735,"initialValue":{"baseExpression":{"id":19729,"name":"poolTokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19616,"src":"2649:13:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_struct$_TokenInfo_$2306_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo storage ref)"}},"id":19734,"indexExpression":{"baseExpression":{"expression":{"id":19730,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19603,"src":"2663:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19731,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2672:6:60","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":2314,"src":"2663:15:60","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":19733,"indexExpression":{"id":19732,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19717,"src":"2679:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2663:18:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2649:33:60","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2306_storage","typeString":"struct TokenInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2620:62:60"},{"assignments":[19737],"declarations":[{"constant":false,"id":19737,"mutability":"mutable","name":"packedBalance","nameLocation":"2704:13:60","nodeType":"VariableDeclaration","scope":19828,"src":"2696:21:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19736,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2696:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":19741,"initialValue":{"baseExpression":{"id":19738,"name":"poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19607,"src":"2720:17:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":19740,"indexExpression":{"id":19739,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19717,"src":"2738:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2720:20:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2696:44:60"},{"expression":{"id":19748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":19742,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19603,"src":"2755:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19745,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2764:9:60","memberName":"tokenInfo","nodeType":"MemberAccess","referencedDeclaration":2318,"src":"2755:18:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2306_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo memory[] memory"}},"id":19746,"indexExpression":{"id":19744,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19717,"src":"2774:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2755:21:60","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2306_memory_ptr","typeString":"struct TokenInfo memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19747,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19728,"src":"2779:9:60","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2306_memory_ptr","typeString":"struct TokenInfo memory"}},"src":"2755:33:60","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2306_memory_ptr","typeString":"struct TokenInfo memory"}},"id":19749,"nodeType":"ExpressionStatement","src":"2755:33:60"},{"expression":{"id":19758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":19750,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19603,"src":"2802:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19753,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2811:10:60","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":2327,"src":"2802:19:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":19754,"indexExpression":{"id":19752,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19717,"src":"2822:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2802:22:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19756,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19728,"src":"2840:9:60","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2306_memory_ptr","typeString":"struct TokenInfo memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TokenInfo_$2306_memory_ptr","typeString":"struct TokenInfo memory"}],"id":19755,"name":"getTokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20043,"src":"2827:12:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_TokenInfo_$2306_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct TokenInfo memory) view returns (uint256)"}},"id":19757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2827:23:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2802:48:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19759,"nodeType":"ExpressionStatement","src":"2802:48:60"},{"expression":{"arguments":[{"id":19761,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19603,"src":"2888:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},{"id":19762,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19717,"src":"2898:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19763,"name":"packedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19737,"src":"2901:13:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2915:13:60","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":2910,"src":"2901:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":19765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2901:29:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19766,"name":"roundingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19623,"src":"2932:17:60","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"id":19760,"name":"updateRawAndLiveBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20105,"src":"2864:23:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_PoolData_$2331_memory_ptr_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$2334_$returns$__$","typeString":"function (struct PoolData memory,uint256,uint256,enum Rounding) pure"}},"id":19767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2864:86:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19768,"nodeType":"ExpressionStatement","src":"2864:86:60"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19769,"name":"poolSubjectToYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19696,"src":"3063:22:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":19770,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3089:5:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"3063:31:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19774,"nodeType":"IfStatement","src":"3059:78:60","trueBody":{"id":19773,"nodeType":"Block","src":"3096:41:60","statements":[{"id":19772,"nodeType":"Continue","src":"3114:8:60"}]}},{"assignments":[19776],"declarations":[{"constant":false,"id":19776,"mutability":"mutable","name":"tokenSubjectToYieldFees","nameLocation":"3774:23:60","nodeType":"VariableDeclaration","scope":19828,"src":"3769:28:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19775,"name":"bool","nodeType":"ElementaryTypeName","src":"3769:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":19785,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19777,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19728,"src":"3800:9:60","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2306_memory_ptr","typeString":"struct TokenInfo memory"}},"id":19778,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3810:13:60","memberName":"paysYieldFees","nodeType":"MemberAccess","referencedDeclaration":2305,"src":"3800:23:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_TokenType_$2283","typeString":"enum TokenType"},"id":19783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19779,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19728,"src":"3827:9:60","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2306_memory_ptr","typeString":"struct TokenInfo memory"}},"id":19780,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3837:9:60","memberName":"tokenType","nodeType":"MemberAccess","referencedDeclaration":2300,"src":"3827:19:60","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2283","typeString":"enum TokenType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":19781,"name":"TokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2283,"src":"3850:9:60","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_TokenType_$2283_$","typeString":"type(enum TokenType)"}},"id":19782,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3860:9:60","memberName":"WITH_RATE","nodeType":"MemberAccess","referencedDeclaration":2282,"src":"3850:19:60","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2283","typeString":"enum TokenType"}},"src":"3827:42:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3800:69:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3769:100:60"},{"condition":{"id":19786,"name":"tokenSubjectToYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19776,"src":"3981:23:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19827,"nodeType":"IfStatement","src":"3977:660:60","trueBody":{"id":19826,"nodeType":"Block","src":"4006:631:60","statements":[{"assignments":[19788],"declarations":[{"constant":false,"id":19788,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"4032:27:60","nodeType":"VariableDeclaration","scope":19826,"src":"4024:35:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19787,"name":"uint256","nodeType":"ElementaryTypeName","src":"4024:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19793,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":19789,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19603,"src":"4062:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19790,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4071:14:60","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":2310,"src":"4062:23:60","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"id":19791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4086:30:60","memberName":"getAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":19310,"src":"4062:54:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$2184_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$2184_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":19792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4062:56:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4024:94:60"},{"assignments":[19795],"declarations":[{"constant":false,"id":19795,"mutability":"mutable","name":"balanceRaw","nameLocation":"4144:10:60","nodeType":"VariableDeclaration","scope":19826,"src":"4136:18:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19794,"name":"uint256","nodeType":"ElementaryTypeName","src":"4136:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19800,"initialValue":{"baseExpression":{"expression":{"id":19796,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19603,"src":"4157:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19797,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4166:11:60","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":2321,"src":"4157:20:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":19799,"indexExpression":{"id":19798,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19717,"src":"4178:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4157:23:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4136:44:60"},{"assignments":[19802],"declarations":[{"constant":false,"id":19802,"mutability":"mutable","name":"aggregateYieldFeeAmountRaw","nameLocation":"4207:26:60","nodeType":"VariableDeclaration","scope":19826,"src":"4199:34:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19801,"name":"uint256","nodeType":"ElementaryTypeName","src":"4199:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19811,"initialValue":{"arguments":[{"id":19804,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19603,"src":"4278:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19805,"name":"packedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19737,"src":"4308:13:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4322:17:60","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":2927,"src":"4308:31:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":19807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4308:33:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19808,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19717,"src":"4363:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19809,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19788,"src":"4386:27:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19803,"name":"_computeYieldFeesDue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20157,"src":"4236:20:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_PoolData_$2331_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct PoolData memory,uint256,uint256,uint256) pure returns (uint256)"}},"id":19810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4236:195:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4199:232:60"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19812,"name":"aggregateYieldFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19802,"src":"4454:26:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":19813,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4483:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4454:30:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19825,"nodeType":"IfStatement","src":"4450:173:60","trueBody":{"id":19824,"nodeType":"Block","src":"4486:137:60","statements":[{"expression":{"arguments":[{"id":19816,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19603,"src":"4532:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},{"id":19817,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19717,"src":"4542:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19818,"name":"balanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19795,"src":"4545:10:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":19819,"name":"aggregateYieldFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19802,"src":"4558:26:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4545:39:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19821,"name":"roundingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19623,"src":"4586:17:60","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"id":19815,"name":"updateRawAndLiveBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20105,"src":"4508:23:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_PoolData_$2331_memory_ptr_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$2334_$returns$__$","typeString":"function (struct PoolData memory,uint256,uint256,enum Rounding) pure"}},"id":19822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4508:96:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19823,"nodeType":"ExpressionStatement","src":"4508:96:60"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19720,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19717,"src":"2586:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":19721,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19627,"src":"2590:9:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2586:13:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19829,"initializationExpression":{"assignments":[19717],"declarations":[{"constant":false,"id":19717,"mutability":"mutable","name":"i","nameLocation":"2579:1:60","nodeType":"VariableDeclaration","scope":19829,"src":"2571:9:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19716,"name":"uint256","nodeType":"ElementaryTypeName","src":"2571:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19719,"initialValue":{"hexValue":"30","id":19718,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2583:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2571:13:60"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":19724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2601:3:60","subExpression":{"id":19723,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19717,"src":"2603:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19725,"nodeType":"ExpressionStatement","src":"2601:3:60"},"nodeType":"ForStatement","src":"2566:2081:60"}]},"id":19831,"implemented":true,"kind":"function","modifiers":[],"name":"load","nameLocation":"1503:4:60","nodeType":"FunctionDefinition","parameters":{"id":19624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19603,"mutability":"mutable","name":"poolData","nameLocation":"1533:8:60","nodeType":"VariableDeclaration","scope":19831,"src":"1517:24:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":19602,"nodeType":"UserDefinedTypeName","pathNode":{"id":19601,"name":"PoolData","nameLocations":["1517:8:60"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"1517:8:60"},"referencedDeclaration":2331,"src":"1517:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":19607,"mutability":"mutable","name":"poolTokenBalances","nameLocation":"1617:17:60","nodeType":"VariableDeclaration","scope":19831,"src":"1551:83:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":19606,"keyName":"tokenIndex","keyNameLocation":"1567:10:60","keyType":{"id":19604,"name":"uint256","nodeType":"ElementaryTypeName","src":"1559:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"1551:57:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"1589:18:60","valueType":{"id":19605,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1581:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"},{"constant":false,"id":19610,"mutability":"mutable","name":"poolConfigBits","nameLocation":"1659:14:60","nodeType":"VariableDeclaration","scope":19831,"src":"1644:29:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"},"typeName":{"id":19609,"nodeType":"UserDefinedTypeName","pathNode":{"id":19608,"name":"PoolConfigBits","nameLocations":["1644:14:60"],"nodeType":"IdentifierPath","referencedDeclaration":2184,"src":"1644:14:60"},"referencedDeclaration":2184,"src":"1644:14:60","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2184","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":19616,"mutability":"mutable","name":"poolTokenInfo","nameLocation":"1740:13:60","nodeType":"VariableDeclaration","scope":19831,"src":"1683:70:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_struct$_TokenInfo_$2306_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo)"},"typeName":{"id":19615,"keyName":"poolToken","keyNameLocation":"1698:9:60","keyType":{"id":19612,"nodeType":"UserDefinedTypeName","pathNode":{"id":19611,"name":"IERC20","nameLocations":["1691:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"1691:6:60"},"referencedDeclaration":6980,"src":"1691:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"1683:48:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_struct$_TokenInfo_$2306_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo)"},"valueName":"tokenInfo","valueNameLocation":"1721:9:60","valueType":{"id":19614,"nodeType":"UserDefinedTypeName","pathNode":{"id":19613,"name":"TokenInfo","nameLocations":["1711:9:60"],"nodeType":"IdentifierPath","referencedDeclaration":2306,"src":"1711:9:60"},"referencedDeclaration":2306,"src":"1711:9:60","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2306_storage_ptr","typeString":"struct TokenInfo"}}},"visibility":"internal"},{"constant":false,"id":19620,"mutability":"mutable","name":"tokens","nameLocation":"1780:6:60","nodeType":"VariableDeclaration","scope":19831,"src":"1763:23:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":19618,"nodeType":"UserDefinedTypeName","pathNode":{"id":19617,"name":"IERC20","nameLocations":["1763:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"1763:6:60"},"referencedDeclaration":6980,"src":"1763:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"id":19619,"nodeType":"ArrayTypeName","src":"1763:8:60","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":19623,"mutability":"mutable","name":"roundingDirection","nameLocation":"1805:17:60","nodeType":"VariableDeclaration","scope":19831,"src":"1796:26:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"},"typeName":{"id":19622,"nodeType":"UserDefinedTypeName","pathNode":{"id":19621,"name":"Rounding","nameLocations":["1796:8:60"],"nodeType":"IdentifierPath","referencedDeclaration":2334,"src":"1796:8:60"},"referencedDeclaration":2334,"src":"1796:8:60","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"1507:321:60"},"returnParameters":{"id":19625,"nodeType":"ParameterList","parameters":[],"src":"1843:0:60"},"scope":20158,"src":"1494:3159:60","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":19933,"nodeType":"Block","src":"4933:1225:60","statements":[{"assignments":[19847],"declarations":[{"constant":false,"id":19847,"mutability":"mutable","name":"numTokens","nameLocation":"4951:9:60","nodeType":"VariableDeclaration","scope":19933,"src":"4943:17:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19846,"name":"uint256","nodeType":"ElementaryTypeName","src":"4943:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19851,"initialValue":{"expression":{"expression":{"id":19848,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19834,"src":"4963:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19849,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4972:11:60","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":2321,"src":"4963:20:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":19850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4984:6:60","memberName":"length","nodeType":"MemberAccess","src":"4963:27:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4943:47:60"},{"body":{"id":19931,"nodeType":"Block","src":"5041:1111:60","statements":[{"assignments":[19864],"declarations":[{"constant":false,"id":19864,"mutability":"mutable","name":"token","nameLocation":"5062:5:60","nodeType":"VariableDeclaration","scope":19931,"src":"5055:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"},"typeName":{"id":19863,"nodeType":"UserDefinedTypeName","pathNode":{"id":19862,"name":"IERC20","nameLocations":["5055:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"5055:6:60"},"referencedDeclaration":6980,"src":"5055:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"visibility":"internal"}],"id":19869,"initialValue":{"baseExpression":{"expression":{"id":19865,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19834,"src":"5070:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19866,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5079:6:60","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":2314,"src":"5070:15:60","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":19868,"indexExpression":{"id":19867,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19853,"src":"5086:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5070:18:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"5055:33:60"},{"assignments":[19871],"declarations":[{"constant":false,"id":19871,"mutability":"mutable","name":"packedBalances","nameLocation":"5110:14:60","nodeType":"VariableDeclaration","scope":19931,"src":"5102:22:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19870,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5102:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":19875,"initialValue":{"baseExpression":{"id":19872,"name":"poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19838,"src":"5127:17:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":19874,"indexExpression":{"id":19873,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19853,"src":"5145:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5127:20:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5102:45:60"},{"assignments":[19877],"declarations":[{"constant":false,"id":19877,"mutability":"mutable","name":"storedBalanceRaw","nameLocation":"5169:16:60","nodeType":"VariableDeclaration","scope":19931,"src":"5161:24:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19876,"name":"uint256","nodeType":"ElementaryTypeName","src":"5161:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19881,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19878,"name":"packedBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19871,"src":"5188:14:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5203:13:60","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":2910,"src":"5188:28:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":19880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5188:30:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5161:57:60"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19882,"name":"storedBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19877,"src":"5404:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"expression":{"id":19883,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19834,"src":"5423:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19884,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5432:11:60","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":2321,"src":"5423:20:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":19886,"indexExpression":{"id":19885,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19853,"src":"5444:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5423:23:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5404:42:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19914,"nodeType":"IfStatement","src":"5400:565:60","trueBody":{"id":19913,"nodeType":"Block","src":"5448:517:60","statements":[{"assignments":[19889],"declarations":[{"constant":false,"id":19889,"mutability":"mutable","name":"packedProtocolFeeAmounts","nameLocation":"5653:24:60","nodeType":"VariableDeclaration","scope":19913,"src":"5645:32:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19888,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5645:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":19893,"initialValue":{"baseExpression":{"id":19890,"name":"poolAggregateProtocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19843,"src":"5680:31:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}},"id":19892,"indexExpression":{"id":19891,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19864,"src":"5712:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5680:38:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5645:73:60"},{"expression":{"id":19911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":19894,"name":"poolAggregateProtocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19843,"src":"5736:31:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}},"id":19896,"indexExpression":{"id":19895,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19864,"src":"5768:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5736:38:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19899,"name":"packedProtocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19889,"src":"5841:24:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5866:17:60","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":2927,"src":"5841:42:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":19901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5841:44:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19902,"name":"storedBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19877,"src":"5889:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"expression":{"id":19903,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19834,"src":"5908:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19904,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5917:11:60","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":2321,"src":"5908:20:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":19906,"indexExpression":{"id":19905,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19853,"src":"5929:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5908:23:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5889:42:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19908,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5888:44:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5841:91:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19897,"name":"packedProtocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19889,"src":"5777:24:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5802:17:60","memberName":"setBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":2963,"src":"5777:42:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":19910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5777:173:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5736:214:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19912,"nodeType":"ExpressionStatement","src":"5736:214:60"}]}},{"expression":{"id":19929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":19915,"name":"poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19838,"src":"5979:17:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":19917,"indexExpression":{"id":19916,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19853,"src":"5997:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5979:20:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":19920,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19834,"src":"6054:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19921,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6063:11:60","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":2321,"src":"6054:20:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":19923,"indexExpression":{"id":19922,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19853,"src":"6075:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6054:23:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":19924,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19834,"src":"6095:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19925,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6104:20:60","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"6095:29:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":19927,"indexExpression":{"id":19926,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19853,"src":"6125:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6095:32:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19918,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3032,"src":"6002:18:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$3032_$","typeString":"type(library PackedTokenBalance)"}},"id":19919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6021:15:60","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":2991,"src":"6002:34:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":19928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6002:139:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5979:162:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19930,"nodeType":"ExpressionStatement","src":"5979:162:60"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19856,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19853,"src":"5021:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":19857,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19847,"src":"5025:9:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5021:13:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19932,"initializationExpression":{"assignments":[19853],"declarations":[{"constant":false,"id":19853,"mutability":"mutable","name":"i","nameLocation":"5014:1:60","nodeType":"VariableDeclaration","scope":19932,"src":"5006:9:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19852,"name":"uint256","nodeType":"ElementaryTypeName","src":"5006:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19855,"initialValue":{"hexValue":"30","id":19854,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5018:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5006:13:60"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":19860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5036:3:60","subExpression":{"id":19859,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19853,"src":"5038:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19861,"nodeType":"ExpressionStatement","src":"5036:3:60"},"nodeType":"ForStatement","src":"5001:1151:60"}]},"id":19934,"implemented":true,"kind":"function","modifiers":[],"name":"syncPoolBalancesAndFees","nameLocation":"4668:23:60","nodeType":"FunctionDefinition","parameters":{"id":19844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19834,"mutability":"mutable","name":"poolData","nameLocation":"4717:8:60","nodeType":"VariableDeclaration","scope":19934,"src":"4701:24:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":19833,"nodeType":"UserDefinedTypeName","pathNode":{"id":19832,"name":"PoolData","nameLocations":["4701:8:60"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"4701:8:60"},"referencedDeclaration":2331,"src":"4701:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":19838,"mutability":"mutable","name":"poolTokenBalances","nameLocation":"4801:17:60","nodeType":"VariableDeclaration","scope":19934,"src":"4735:83:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":19837,"keyName":"tokenIndex","keyNameLocation":"4751:10:60","keyType":{"id":19835,"name":"uint256","nodeType":"ElementaryTypeName","src":"4743:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"4735:57:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"4773:18:60","valueType":{"id":19836,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4765:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"},{"constant":false,"id":19843,"mutability":"mutable","name":"poolAggregateProtocolFeeAmounts","nameLocation":"4886:31:60","nodeType":"VariableDeclaration","scope":19934,"src":"4828:89:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"},"typeName":{"id":19842,"keyName":"token","keyNameLocation":"4843:5:60","keyType":{"id":19840,"nodeType":"UserDefinedTypeName","pathNode":{"id":19839,"name":"IERC20","nameLocations":["4836:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":6980,"src":"4836:6:60"},"referencedDeclaration":6980,"src":"4836:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6980","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"4828:49:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6980_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"},"valueName":"packedFeeAmounts","valueNameLocation":"4860:16:60","valueType":{"id":19841,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4852:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"}],"src":"4691:232:60"},"returnParameters":{"id":19845,"nodeType":"ParameterList","parameters":[],"src":"4933:0:60"},"scope":20158,"src":"4659:1499:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19997,"nodeType":"Block","src":"6789:641:60","statements":[{"assignments":[19949],"declarations":[{"constant":false,"id":19949,"mutability":"mutable","name":"numTokens","nameLocation":"6807:9:60","nodeType":"VariableDeclaration","scope":19997,"src":"6799:17:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19948,"name":"uint256","nodeType":"ElementaryTypeName","src":"6799:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19953,"initialValue":{"expression":{"expression":{"id":19950,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19938,"src":"6819:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19951,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6828:6:60","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":2314,"src":"6819:15:60","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6980_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":19952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6835:6:60","memberName":"length","nodeType":"MemberAccess","src":"6819:22:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6799:42:60"},{"assignments":[19955],"declarations":[{"constant":false,"id":19955,"mutability":"mutable","name":"packedBalance","nameLocation":"7004:13:60","nodeType":"VariableDeclaration","scope":19997,"src":"6996:21:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19954,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6996:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":19956,"nodeType":"VariableDeclarationStatement","src":"6996:21:60"},{"body":{"id":19995,"nodeType":"Block","src":"7068:356:60","statements":[{"expression":{"id":19978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":19967,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19938,"src":"7082:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19970,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7091:10:60","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":2327,"src":"7082:19:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":19971,"indexExpression":{"id":19969,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19958,"src":"7102:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7082:22:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":19973,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19938,"src":"7120:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":19974,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7129:9:60","memberName":"tokenInfo","nodeType":"MemberAccess","referencedDeclaration":2318,"src":"7120:18:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2306_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo memory[] memory"}},"id":19976,"indexExpression":{"id":19975,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19958,"src":"7139:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7120:21:60","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2306_memory_ptr","typeString":"struct TokenInfo memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TokenInfo_$2306_memory_ptr","typeString":"struct TokenInfo memory"}],"id":19972,"name":"getTokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20043,"src":"7107:12:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_TokenInfo_$2306_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct TokenInfo memory) view returns (uint256)"}},"id":19977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7107:35:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7082:60:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19979,"nodeType":"ExpressionStatement","src":"7082:60:60"},{"expression":{"id":19984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19980,"name":"packedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19955,"src":"7157:13:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":19981,"name":"poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19942,"src":"7173:17:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":19983,"indexExpression":{"id":19982,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19958,"src":"7191:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7173:20:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"7157:36:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19985,"nodeType":"ExpressionStatement","src":"7157:36:60"},{"expression":{"arguments":[{"id":19987,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19938,"src":"7351:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},{"id":19988,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19958,"src":"7361:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19989,"name":"packedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19955,"src":"7364:13:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7378:13:60","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":2910,"src":"7364:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":19991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7364:29:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19992,"name":"roundingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19945,"src":"7395:17:60","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}],"id":19986,"name":"updateRawAndLiveBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20105,"src":"7327:23:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_PoolData_$2331_memory_ptr_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$2334_$returns$__$","typeString":"function (struct PoolData memory,uint256,uint256,enum Rounding) pure"}},"id":19993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7327:86:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19994,"nodeType":"ExpressionStatement","src":"7327:86:60"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19961,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19958,"src":"7048:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":19962,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19949,"src":"7052:9:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7048:13:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19996,"initializationExpression":{"assignments":[19958],"declarations":[{"constant":false,"id":19958,"mutability":"mutable","name":"i","nameLocation":"7041:1:60","nodeType":"VariableDeclaration","scope":19996,"src":"7033:9:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19957,"name":"uint256","nodeType":"ElementaryTypeName","src":"7033:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19960,"initialValue":{"hexValue":"30","id":19959,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7045:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7033:13:60"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":19965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7063:3:60","subExpression":{"id":19964,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19958,"src":"7065:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19966,"nodeType":"ExpressionStatement","src":"7063:3:60"},"nodeType":"ForStatement","src":"7028:396:60"}]},"documentation":{"id":19935,"nodeType":"StructuredDocumentation","src":"6164:405:60","text":" @dev This is typically called after a reentrant callback (e.g., a \"before\" liquidity operation callback),\n to refresh the poolData struct with any balances (or rates) that might have changed.\n Preconditions: tokenConfig, balancesRaw, and decimalScalingFactors must be current in `poolData`.\n Side effects: mutates tokenRates, balancesLiveScaled18 in `poolData`."},"id":19998,"implemented":true,"kind":"function","modifiers":[],"name":"reloadBalancesAndRates","nameLocation":"6583:22:60","nodeType":"FunctionDefinition","parameters":{"id":19946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19938,"mutability":"mutable","name":"poolData","nameLocation":"6631:8:60","nodeType":"VariableDeclaration","scope":19998,"src":"6615:24:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":19937,"nodeType":"UserDefinedTypeName","pathNode":{"id":19936,"name":"PoolData","nameLocations":["6615:8:60"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"6615:8:60"},"referencedDeclaration":2331,"src":"6615:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":19942,"mutability":"mutable","name":"poolTokenBalances","nameLocation":"6715:17:60","nodeType":"VariableDeclaration","scope":19998,"src":"6649:83:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":19941,"keyName":"tokenIndex","keyNameLocation":"6665:10:60","keyType":{"id":19939,"name":"uint256","nodeType":"ElementaryTypeName","src":"6657:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"6649:57:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"6687:18:60","valueType":{"id":19940,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6679:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"},{"constant":false,"id":19945,"mutability":"mutable","name":"roundingDirection","nameLocation":"6751:17:60","nodeType":"VariableDeclaration","scope":19998,"src":"6742:26:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"},"typeName":{"id":19944,"nodeType":"UserDefinedTypeName","pathNode":{"id":19943,"name":"Rounding","nameLocations":["6742:8:60"],"nodeType":"IdentifierPath","referencedDeclaration":2334,"src":"6742:8:60"},"referencedDeclaration":2334,"src":"6742:8:60","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"6605:169:60"},"returnParameters":{"id":19947,"nodeType":"ParameterList","parameters":[],"src":"6789:0:60"},"scope":20158,"src":"6574:856:60","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":20042,"nodeType":"Block","src":"7523:337:60","statements":[{"assignments":[20008],"declarations":[{"constant":false,"id":20008,"mutability":"mutable","name":"tokenType","nameLocation":"7543:9:60","nodeType":"VariableDeclaration","scope":20042,"src":"7533:19:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2283","typeString":"enum TokenType"},"typeName":{"id":20007,"nodeType":"UserDefinedTypeName","pathNode":{"id":20006,"name":"TokenType","nameLocations":["7533:9:60"],"nodeType":"IdentifierPath","referencedDeclaration":2283,"src":"7533:9:60"},"referencedDeclaration":2283,"src":"7533:9:60","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2283","typeString":"enum TokenType"}},"visibility":"internal"}],"id":20011,"initialValue":{"expression":{"id":20009,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20001,"src":"7555:9:60","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2306_memory_ptr","typeString":"struct TokenInfo memory"}},"id":20010,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7565:9:60","memberName":"tokenType","nodeType":"MemberAccess","referencedDeclaration":2300,"src":"7555:19:60","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2283","typeString":"enum TokenType"}},"nodeType":"VariableDeclarationStatement","src":"7533:41:60"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_TokenType_$2283","typeString":"enum TokenType"},"id":20015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20012,"name":"tokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20008,"src":"7589:9:60","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2283","typeString":"enum TokenType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":20013,"name":"TokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2283,"src":"7602:9:60","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_TokenType_$2283_$","typeString":"type(enum TokenType)"}},"id":20014,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7612:8:60","memberName":"STANDARD","nodeType":"MemberAccess","referencedDeclaration":2281,"src":"7602:18:60","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2283","typeString":"enum TokenType"}},"src":"7589:31:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_TokenType_$2283","typeString":"enum TokenType"},"id":20025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20022,"name":"tokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20008,"src":"7678:9:60","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2283","typeString":"enum TokenType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":20023,"name":"TokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2283,"src":"7691:9:60","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_TokenType_$2283_$","typeString":"type(enum TokenType)"}},"id":20024,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7701:9:60","memberName":"WITH_RATE","nodeType":"MemberAccess","referencedDeclaration":2282,"src":"7691:19:60","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2283","typeString":"enum TokenType"}},"src":"7678:32:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":20039,"nodeType":"Block","src":"7782:72:60","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20034,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1370,"src":"7803:12:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1370_$","typeString":"type(contract IVaultErrors)"}},"id":20036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7816:25:60","memberName":"InvalidTokenConfiguration","nodeType":"MemberAccess","referencedDeclaration":1060,"src":"7803:38:60","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":20037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7803:40:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20038,"nodeType":"RevertStatement","src":"7796:47:60"}]},"id":20040,"nodeType":"IfStatement","src":"7674:180:60","trueBody":{"id":20033,"nodeType":"Block","src":"7712:64:60","statements":[{"expression":{"id":20031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20026,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20004,"src":"7726:4:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20027,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20001,"src":"7733:9:60","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2306_memory_ptr","typeString":"struct TokenInfo memory"}},"id":20028,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7743:12:60","memberName":"rateProvider","nodeType":"MemberAccess","referencedDeclaration":2303,"src":"7733:22:60","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"}},"id":20029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7756:7:60","memberName":"getRate","nodeType":"MemberAccess","referencedDeclaration":23,"src":"7733:30:60","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":20030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7733:32:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7726:39:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20032,"nodeType":"ExpressionStatement","src":"7726:39:60"}]}},"id":20041,"nodeType":"IfStatement","src":"7585:269:60","trueBody":{"id":20021,"nodeType":"Block","src":"7622:46:60","statements":[{"expression":{"id":20019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20016,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20004,"src":"7636:4:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":20017,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4766,"src":"7643:10:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4766_$","typeString":"type(library FixedPoint)"}},"id":20018,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7654:3:60","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4478,"src":"7643:14:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7636:21:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20020,"nodeType":"ExpressionStatement","src":"7636:21:60"}]}}]},"id":20043,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenRate","nameLocation":"7445:12:60","nodeType":"FunctionDefinition","parameters":{"id":20002,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20001,"mutability":"mutable","name":"tokenInfo","nameLocation":"7475:9:60","nodeType":"VariableDeclaration","scope":20043,"src":"7458:26:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2306_memory_ptr","typeString":"struct TokenInfo"},"typeName":{"id":20000,"nodeType":"UserDefinedTypeName","pathNode":{"id":19999,"name":"TokenInfo","nameLocations":["7458:9:60"],"nodeType":"IdentifierPath","referencedDeclaration":2306,"src":"7458:9:60"},"referencedDeclaration":2306,"src":"7458:9:60","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2306_storage_ptr","typeString":"struct TokenInfo"}},"visibility":"internal"}],"src":"7457:28:60"},"returnParameters":{"id":20005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20004,"mutability":"mutable","name":"rate","nameLocation":"7517:4:60","nodeType":"VariableDeclaration","scope":20043,"src":"7509:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20003,"name":"uint256","nodeType":"ElementaryTypeName","src":"7509:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7508:14:60"},"scope":20158,"src":"7436:424:60","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":20104,"nodeType":"Block","src":"8048:522:60","statements":[{"expression":{"id":20062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":20056,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20046,"src":"8058:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":20059,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8067:11:60","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":2321,"src":"8058:20:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20060,"indexExpression":{"id":20058,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20048,"src":"8079:10:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8058:32:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20061,"name":"newRawBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20050,"src":"8093:13:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8058:48:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20063,"nodeType":"ExpressionStatement","src":"8058:48:60"},{"assignments":[20075],"declarations":[{"constant":false,"id":20075,"mutability":"mutable","name":"_upOrDown","nameLocation":"8185:9:60","nodeType":"VariableDeclaration","scope":20104,"src":"8117:77:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"},"typeName":{"id":20074,"nodeType":"FunctionTypeName","parameterTypes":{"id":20070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20065,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20074,"src":"8126:7:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20064,"name":"uint256","nodeType":"ElementaryTypeName","src":"8126:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20067,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20074,"src":"8135:7:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20066,"name":"uint256","nodeType":"ElementaryTypeName","src":"8135:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20069,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20074,"src":"8144:7:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20068,"name":"uint256","nodeType":"ElementaryTypeName","src":"8144:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8125:27:60"},"returnParameterTypes":{"id":20073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20072,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20074,"src":"8176:7:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20071,"name":"uint256","nodeType":"ElementaryTypeName","src":"8176:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8175:9:60"},"src":"8117:77:60","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"},"visibility":"internal"},"visibility":"internal"}],"id":20085,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"},"id":20079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20076,"name":"roundingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20053,"src":"8197:17:60","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":20077,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"8230:8:60","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2334_$","typeString":"type(enum Rounding)"}},"id":20078,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8239:8:60","memberName":"ROUND_UP","nodeType":"MemberAccess","referencedDeclaration":2332,"src":"8230:17:60","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}},"src":"8197:50:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":20082,"name":"ScalingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"8318:14:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ScalingHelpers_$3446_$","typeString":"type(library ScalingHelpers)"}},"id":20083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8333:28:60","memberName":"toScaled18ApplyRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":3065,"src":"8318:43:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":20084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8197:164:60","trueExpression":{"expression":{"id":20080,"name":"ScalingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"8262:14:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ScalingHelpers_$3446_$","typeString":"type(library ScalingHelpers)"}},"id":20081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8277:26:60","memberName":"toScaled18ApplyRateRoundUp","nodeType":"MemberAccess","referencedDeclaration":3086,"src":"8262:41:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"nodeType":"VariableDeclarationStatement","src":"8117:244:60"},{"expression":{"id":20102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":20086,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20046,"src":"8372:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":20089,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8381:20:60","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"8372:29:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20090,"indexExpression":{"id":20088,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20048,"src":"8402:10:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8372:41:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":20092,"name":"newRawBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20050,"src":"8439:13:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":20093,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20046,"src":"8466:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":20094,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8475:21:60","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":2330,"src":"8466:30:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20096,"indexExpression":{"id":20095,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20048,"src":"8497:10:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8466:42:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":20097,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20046,"src":"8522:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":20098,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8531:10:60","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":2327,"src":"8522:19:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20100,"indexExpression":{"id":20099,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20048,"src":"8542:10:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8522:31:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20091,"name":"_upOrDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20075,"src":"8416:9:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":20101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8416:147:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8372:191:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20103,"nodeType":"ExpressionStatement","src":"8372:191:60"}]},"id":20105,"implemented":true,"kind":"function","modifiers":[],"name":"updateRawAndLiveBalance","nameLocation":"7875:23:60","nodeType":"FunctionDefinition","parameters":{"id":20054,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20046,"mutability":"mutable","name":"poolData","nameLocation":"7924:8:60","nodeType":"VariableDeclaration","scope":20105,"src":"7908:24:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":20045,"nodeType":"UserDefinedTypeName","pathNode":{"id":20044,"name":"PoolData","nameLocations":["7908:8:60"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"7908:8:60"},"referencedDeclaration":2331,"src":"7908:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":20048,"mutability":"mutable","name":"tokenIndex","nameLocation":"7950:10:60","nodeType":"VariableDeclaration","scope":20105,"src":"7942:18:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20047,"name":"uint256","nodeType":"ElementaryTypeName","src":"7942:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20050,"mutability":"mutable","name":"newRawBalance","nameLocation":"7978:13:60","nodeType":"VariableDeclaration","scope":20105,"src":"7970:21:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20049,"name":"uint256","nodeType":"ElementaryTypeName","src":"7970:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20053,"mutability":"mutable","name":"roundingDirection","nameLocation":"8010:17:60","nodeType":"VariableDeclaration","scope":20105,"src":"8001:26:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"},"typeName":{"id":20052,"nodeType":"UserDefinedTypeName","pathNode":{"id":20051,"name":"Rounding","nameLocations":["8001:8:60"],"nodeType":"IdentifierPath","referencedDeclaration":2334,"src":"8001:8:60"},"referencedDeclaration":2334,"src":"8001:8:60","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2334","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"7898:135:60"},"returnParameters":{"id":20055,"nodeType":"ParameterList","parameters":[],"src":"8048:0:60"},"scope":20158,"src":"7866:704:60","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":20156,"nodeType":"Block","src":"8876:1388:60","statements":[{"assignments":[20120],"declarations":[{"constant":false,"id":20120,"mutability":"mutable","name":"currentLiveBalance","nameLocation":"8894:18:60","nodeType":"VariableDeclaration","scope":20156,"src":"8886:26:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20119,"name":"uint256","nodeType":"ElementaryTypeName","src":"8886:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20125,"initialValue":{"baseExpression":{"expression":{"id":20121,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20108,"src":"8915:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":20122,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8924:20:60","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":2324,"src":"8915:29:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20124,"indexExpression":{"id":20123,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20112,"src":"8945:10:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8915:41:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8886:70:60"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20126,"name":"currentLiveBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20120,"src":"9458:18:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":20127,"name":"lastLiveBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20110,"src":"9479:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9458:36:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20155,"nodeType":"IfStatement","src":"9454:804:60","trueBody":{"id":20154,"nodeType":"Block","src":"9496:762:60","statements":[{"id":20153,"nodeType":"UncheckedBlock","src":"9510:738:60","statements":[{"assignments":[20130],"declarations":[{"constant":false,"id":20130,"mutability":"mutable","name":"aggregateYieldFeeAmountScaled18","nameLocation":"9635:31:60","nodeType":"VariableDeclaration","scope":20153,"src":"9627:39:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20129,"name":"uint256","nodeType":"ElementaryTypeName","src":"9627:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20138,"initialValue":{"arguments":[{"id":20136,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20114,"src":"9735:27:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20131,"name":"currentLiveBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20120,"src":"9670:18:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":20132,"name":"lastLiveBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20110,"src":"9691:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9670:36:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20134,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9669:38:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9708:5:60","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":4528,"src":"9669:44:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":20137,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9669:111:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9627:153:60"},{"expression":{"id":20151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20139,"name":"aggregateYieldFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20117,"src":"10015:26:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":20142,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20108,"src":"10120:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":20143,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10129:21:60","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":2330,"src":"10120:30:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20145,"indexExpression":{"id":20144,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20112,"src":"10151:10:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10120:42:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":20146,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20108,"src":"10184:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData memory"}},"id":20147,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10193:10:60","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":2327,"src":"10184:19:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20149,"indexExpression":{"id":20148,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20112,"src":"10204:10:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10184:31:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":20140,"name":"aggregateYieldFeeAmountScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"10044:31:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10076:22:60","memberName":"toRawUndoRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":3107,"src":"10044:54:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":20150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10044:189:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10015:218:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20152,"nodeType":"ExpressionStatement","src":"10015:218:60"}]}]}}]},"id":20157,"implemented":true,"kind":"function","modifiers":[],"name":"_computeYieldFeesDue","nameLocation":"8650:20:60","nodeType":"FunctionDefinition","parameters":{"id":20115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20108,"mutability":"mutable","name":"poolData","nameLocation":"8696:8:60","nodeType":"VariableDeclaration","scope":20157,"src":"8680:24:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":20107,"nodeType":"UserDefinedTypeName","pathNode":{"id":20106,"name":"PoolData","nameLocations":["8680:8:60"],"nodeType":"IdentifierPath","referencedDeclaration":2331,"src":"8680:8:60"},"referencedDeclaration":2331,"src":"8680:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2331_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":20110,"mutability":"mutable","name":"lastLiveBalance","nameLocation":"8722:15:60","nodeType":"VariableDeclaration","scope":20157,"src":"8714:23:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20109,"name":"uint256","nodeType":"ElementaryTypeName","src":"8714:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20112,"mutability":"mutable","name":"tokenIndex","nameLocation":"8755:10:60","nodeType":"VariableDeclaration","scope":20157,"src":"8747:18:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20111,"name":"uint256","nodeType":"ElementaryTypeName","src":"8747:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20114,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"8783:27:60","nodeType":"VariableDeclaration","scope":20157,"src":"8775:35:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20113,"name":"uint256","nodeType":"ElementaryTypeName","src":"8775:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8670:146:60"},"returnParameters":{"id":20118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20117,"mutability":"mutable","name":"aggregateYieldFeeAmountRaw","nameLocation":"8848:26:60","nodeType":"VariableDeclaration","scope":20157,"src":"8840:34:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20116,"name":"uint256","nodeType":"ElementaryTypeName","src":"8840:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8839:36:60"},"scope":20158,"src":"8641:1623:60","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":20159,"src":"1321:8945:60","usedErrors":[],"usedEvents":[]}],"src":"46:10221:60"},"id":60},"contracts/lib/VaultStateLib.sol":{"ast":{"absolutePath":"contracts/lib/VaultStateLib.sol","exportedSymbols":{"VaultStateBits":[20164],"VaultStateLib":[20305],"WordCodec":[4467]},"id":20306,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":20160,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:61"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol","id":20162,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20306,"sourceUnit":4468,"src":"72:93:61","symbolAliases":[{"foreign":{"id":20161,"name":"WordCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4467,"src":"81:9:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"VaultStateBits","id":20164,"name":"VaultStateBits","nameLocation":"229:14:61","nodeType":"UserDefinedValueTypeDefinition","src":"224:31:61","underlyingType":{"id":20163,"name":"bytes32","nodeType":"ElementaryTypeName","src":"247:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"abstract":false,"baseContracts":[],"canonicalName":"VaultStateLib","contractDependencies":[],"contractKind":"library","documentation":{"id":20165,"nodeType":"StructuredDocumentation","src":"257:78:61","text":"@notice Helper functions for reading and writing the `VaultState` struct."},"fullyImplemented":true,"id":20305,"linearizedBaseContracts":[20305],"name":"VaultStateLib","nameLocation":"343:13:61","nodeType":"ContractDefinition","nodes":[{"global":false,"id":20168,"libraryName":{"id":20166,"name":"WordCodec","nameLocations":["369:9:61"],"nodeType":"IdentifierPath","referencedDeclaration":4467,"src":"369:9:61"},"nodeType":"UsingForDirective","src":"363:28:61","typeName":{"id":20167,"name":"bytes32","nodeType":"ElementaryTypeName","src":"383:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"constant":true,"functionSelector":"434e60ca","id":20171,"mutability":"constant","name":"QUERY_DISABLED_OFFSET","nameLocation":"467:21:61","nodeType":"VariableDeclaration","scope":20305,"src":"443:49:61","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20169,"name":"uint256","nodeType":"ElementaryTypeName","src":"443:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":20170,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"491:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"public"},{"constant":true,"functionSelector":"2577aa90","id":20176,"mutability":"constant","name":"VAULT_PAUSED_OFFSET","nameLocation":"522:19:61","nodeType":"VariableDeclaration","scope":20305,"src":"498:71:61","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20172,"name":"uint256","nodeType":"ElementaryTypeName","src":"498:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20175,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":20173,"name":"QUERY_DISABLED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20171,"src":"544:21:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":20174,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"568:1:61","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"544:25:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":true,"functionSelector":"227e492d","id":20181,"mutability":"constant","name":"BUFFER_PAUSED_OFFSET","nameLocation":"599:20:61","nodeType":"VariableDeclaration","scope":20305,"src":"575:70:61","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20177,"name":"uint256","nodeType":"ElementaryTypeName","src":"575:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20180,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":20178,"name":"VAULT_PAUSED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20176,"src":"622:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":20179,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"644:1:61","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"622:23:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"body":{"id":20197,"nodeType":"Block","src":"729:87:61","statements":[{"expression":{"arguments":[{"id":20194,"name":"QUERY_DISABLED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20171,"src":"787:21:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":20191,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20184,"src":"768:6:61","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}],"expression":{"id":20189,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20164,"src":"746:14:61","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_VaultStateBits_$20164_$","typeString":"type(VaultStateBits)"}},"id":20190,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"761:6:61","memberName":"unwrap","nodeType":"MemberAccess","src":"746:21:61","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_VaultStateBits_$20164_$returns$_t_bytes32_$","typeString":"function (VaultStateBits) pure returns (bytes32)"}},"id":20192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"746:29:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":20193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"776:10:61","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"746:40:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":20195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"746:63:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":20188,"id":20196,"nodeType":"Return","src":"739:70:61"}]},"id":20198,"implemented":true,"kind":"function","modifiers":[],"name":"isQueryDisabled","nameLocation":"661:15:61","nodeType":"FunctionDefinition","parameters":{"id":20185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20184,"mutability":"mutable","name":"config","nameLocation":"692:6:61","nodeType":"VariableDeclaration","scope":20198,"src":"677:21:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"},"typeName":{"id":20183,"nodeType":"UserDefinedTypeName","pathNode":{"id":20182,"name":"VaultStateBits","nameLocations":["677:14:61"],"nodeType":"IdentifierPath","referencedDeclaration":20164,"src":"677:14:61"},"referencedDeclaration":20164,"src":"677:14:61","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}},"visibility":"internal"}],"src":"676:23:61"},"returnParameters":{"id":20188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20187,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20198,"src":"723:4:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20186,"name":"bool","nodeType":"ElementaryTypeName","src":"723:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"722:6:61"},"scope":20305,"src":"652:164:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":20221,"nodeType":"Block","src":"922:115:61","statements":[{"expression":{"arguments":[{"arguments":[{"id":20216,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20203,"src":"1000:5:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":20217,"name":"QUERY_DISABLED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20171,"src":"1007:21:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":20213,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20201,"src":"981:6:61","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}],"expression":{"id":20211,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20164,"src":"959:14:61","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_VaultStateBits_$20164_$","typeString":"type(VaultStateBits)"}},"id":20212,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"974:6:61","memberName":"unwrap","nodeType":"MemberAccess","src":"959:21:61","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_VaultStateBits_$20164_$returns$_t_bytes32_$","typeString":"function (VaultStateBits) pure returns (bytes32)"}},"id":20214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"959:29:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":20215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"989:10:61","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"959:40:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":20218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"959:70:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":20209,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20164,"src":"939:14:61","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_VaultStateBits_$20164_$","typeString":"type(VaultStateBits)"}},"id":20210,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"954:4:61","memberName":"wrap","nodeType":"MemberAccess","src":"939:19:61","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_VaultStateBits_$20164_$","typeString":"function (bytes32) pure returns (VaultStateBits)"}},"id":20219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"939:91:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}},"functionReturnParameters":20208,"id":20220,"nodeType":"Return","src":"932:98:61"}]},"id":20222,"implemented":true,"kind":"function","modifiers":[],"name":"setQueryDisabled","nameLocation":"831:16:61","nodeType":"FunctionDefinition","parameters":{"id":20204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20201,"mutability":"mutable","name":"config","nameLocation":"863:6:61","nodeType":"VariableDeclaration","scope":20222,"src":"848:21:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"},"typeName":{"id":20200,"nodeType":"UserDefinedTypeName","pathNode":{"id":20199,"name":"VaultStateBits","nameLocations":["848:14:61"],"nodeType":"IdentifierPath","referencedDeclaration":20164,"src":"848:14:61"},"referencedDeclaration":20164,"src":"848:14:61","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}},"visibility":"internal"},{"constant":false,"id":20203,"mutability":"mutable","name":"value","nameLocation":"876:5:61","nodeType":"VariableDeclaration","scope":20222,"src":"871:10:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20202,"name":"bool","nodeType":"ElementaryTypeName","src":"871:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"847:35:61"},"returnParameters":{"id":20208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20207,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20222,"src":"906:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"},"typeName":{"id":20206,"nodeType":"UserDefinedTypeName","pathNode":{"id":20205,"name":"VaultStateBits","nameLocations":["906:14:61"],"nodeType":"IdentifierPath","referencedDeclaration":20164,"src":"906:14:61"},"referencedDeclaration":20164,"src":"906:14:61","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}},"visibility":"internal"}],"src":"905:16:61"},"scope":20305,"src":"822:215:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":20238,"nodeType":"Block","src":"1118:85:61","statements":[{"expression":{"arguments":[{"id":20235,"name":"VAULT_PAUSED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20176,"src":"1176:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":20232,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20225,"src":"1157:6:61","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}],"expression":{"id":20230,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20164,"src":"1135:14:61","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_VaultStateBits_$20164_$","typeString":"type(VaultStateBits)"}},"id":20231,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1150:6:61","memberName":"unwrap","nodeType":"MemberAccess","src":"1135:21:61","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_VaultStateBits_$20164_$returns$_t_bytes32_$","typeString":"function (VaultStateBits) pure returns (bytes32)"}},"id":20233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1135:29:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":20234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1165:10:61","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"1135:40:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":20236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1135:61:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":20229,"id":20237,"nodeType":"Return","src":"1128:68:61"}]},"id":20239,"implemented":true,"kind":"function","modifiers":[],"name":"isVaultPaused","nameLocation":"1052:13:61","nodeType":"FunctionDefinition","parameters":{"id":20226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20225,"mutability":"mutable","name":"config","nameLocation":"1081:6:61","nodeType":"VariableDeclaration","scope":20239,"src":"1066:21:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"},"typeName":{"id":20224,"nodeType":"UserDefinedTypeName","pathNode":{"id":20223,"name":"VaultStateBits","nameLocations":["1066:14:61"],"nodeType":"IdentifierPath","referencedDeclaration":20164,"src":"1066:14:61"},"referencedDeclaration":20164,"src":"1066:14:61","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}},"visibility":"internal"}],"src":"1065:23:61"},"returnParameters":{"id":20229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20228,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20239,"src":"1112:4:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20227,"name":"bool","nodeType":"ElementaryTypeName","src":"1112:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1111:6:61"},"scope":20305,"src":"1043:160:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":20262,"nodeType":"Block","src":"1307:113:61","statements":[{"expression":{"arguments":[{"arguments":[{"id":20257,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20244,"src":"1385:5:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":20258,"name":"VAULT_PAUSED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20176,"src":"1392:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":20254,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20242,"src":"1366:6:61","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}],"expression":{"id":20252,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20164,"src":"1344:14:61","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_VaultStateBits_$20164_$","typeString":"type(VaultStateBits)"}},"id":20253,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1359:6:61","memberName":"unwrap","nodeType":"MemberAccess","src":"1344:21:61","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_VaultStateBits_$20164_$returns$_t_bytes32_$","typeString":"function (VaultStateBits) pure returns (bytes32)"}},"id":20255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1344:29:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":20256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1374:10:61","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"1344:40:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":20259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1344:68:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":20250,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20164,"src":"1324:14:61","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_VaultStateBits_$20164_$","typeString":"type(VaultStateBits)"}},"id":20251,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1339:4:61","memberName":"wrap","nodeType":"MemberAccess","src":"1324:19:61","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_VaultStateBits_$20164_$","typeString":"function (bytes32) pure returns (VaultStateBits)"}},"id":20260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1324:89:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}},"functionReturnParameters":20249,"id":20261,"nodeType":"Return","src":"1317:96:61"}]},"id":20263,"implemented":true,"kind":"function","modifiers":[],"name":"setVaultPaused","nameLocation":"1218:14:61","nodeType":"FunctionDefinition","parameters":{"id":20245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20242,"mutability":"mutable","name":"config","nameLocation":"1248:6:61","nodeType":"VariableDeclaration","scope":20263,"src":"1233:21:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"},"typeName":{"id":20241,"nodeType":"UserDefinedTypeName","pathNode":{"id":20240,"name":"VaultStateBits","nameLocations":["1233:14:61"],"nodeType":"IdentifierPath","referencedDeclaration":20164,"src":"1233:14:61"},"referencedDeclaration":20164,"src":"1233:14:61","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}},"visibility":"internal"},{"constant":false,"id":20244,"mutability":"mutable","name":"value","nameLocation":"1261:5:61","nodeType":"VariableDeclaration","scope":20263,"src":"1256:10:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20243,"name":"bool","nodeType":"ElementaryTypeName","src":"1256:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1232:35:61"},"returnParameters":{"id":20249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20248,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20263,"src":"1291:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"},"typeName":{"id":20247,"nodeType":"UserDefinedTypeName","pathNode":{"id":20246,"name":"VaultStateBits","nameLocations":["1291:14:61"],"nodeType":"IdentifierPath","referencedDeclaration":20164,"src":"1291:14:61"},"referencedDeclaration":20164,"src":"1291:14:61","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}},"visibility":"internal"}],"src":"1290:16:61"},"scope":20305,"src":"1209:211:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":20279,"nodeType":"Block","src":"1504:86:61","statements":[{"expression":{"arguments":[{"id":20276,"name":"BUFFER_PAUSED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20181,"src":"1562:20:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":20273,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20266,"src":"1543:6:61","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}],"expression":{"id":20271,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20164,"src":"1521:14:61","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_VaultStateBits_$20164_$","typeString":"type(VaultStateBits)"}},"id":20272,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1536:6:61","memberName":"unwrap","nodeType":"MemberAccess","src":"1521:21:61","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_VaultStateBits_$20164_$returns$_t_bytes32_$","typeString":"function (VaultStateBits) pure returns (bytes32)"}},"id":20274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1521:29:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":20275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1551:10:61","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":4329,"src":"1521:40:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":20277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1521:62:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":20270,"id":20278,"nodeType":"Return","src":"1514:69:61"}]},"id":20280,"implemented":true,"kind":"function","modifiers":[],"name":"areBuffersPaused","nameLocation":"1435:16:61","nodeType":"FunctionDefinition","parameters":{"id":20267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20266,"mutability":"mutable","name":"config","nameLocation":"1467:6:61","nodeType":"VariableDeclaration","scope":20280,"src":"1452:21:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"},"typeName":{"id":20265,"nodeType":"UserDefinedTypeName","pathNode":{"id":20264,"name":"VaultStateBits","nameLocations":["1452:14:61"],"nodeType":"IdentifierPath","referencedDeclaration":20164,"src":"1452:14:61"},"referencedDeclaration":20164,"src":"1452:14:61","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}},"visibility":"internal"}],"src":"1451:23:61"},"returnParameters":{"id":20270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20269,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20280,"src":"1498:4:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20268,"name":"bool","nodeType":"ElementaryTypeName","src":"1498:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1497:6:61"},"scope":20305,"src":"1426:164:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":20303,"nodeType":"Block","src":"1696:114:61","statements":[{"expression":{"arguments":[{"arguments":[{"id":20298,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20285,"src":"1774:5:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":20299,"name":"BUFFER_PAUSED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20181,"src":"1781:20:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":20295,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20283,"src":"1755:6:61","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}],"expression":{"id":20293,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20164,"src":"1733:14:61","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_VaultStateBits_$20164_$","typeString":"type(VaultStateBits)"}},"id":20294,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1748:6:61","memberName":"unwrap","nodeType":"MemberAccess","src":"1733:21:61","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_VaultStateBits_$20164_$returns$_t_bytes32_$","typeString":"function (VaultStateBits) pure returns (bytes32)"}},"id":20296,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1733:29:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":20297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1763:10:61","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":4343,"src":"1733:40:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":20300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1733:69:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":20291,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20164,"src":"1713:14:61","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_VaultStateBits_$20164_$","typeString":"type(VaultStateBits)"}},"id":20292,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1728:4:61","memberName":"wrap","nodeType":"MemberAccess","src":"1713:19:61","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_VaultStateBits_$20164_$","typeString":"function (bytes32) pure returns (VaultStateBits)"}},"id":20301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1713:90:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}},"functionReturnParameters":20290,"id":20302,"nodeType":"Return","src":"1706:97:61"}]},"id":20304,"implemented":true,"kind":"function","modifiers":[],"name":"setBuffersPaused","nameLocation":"1605:16:61","nodeType":"FunctionDefinition","parameters":{"id":20286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20283,"mutability":"mutable","name":"config","nameLocation":"1637:6:61","nodeType":"VariableDeclaration","scope":20304,"src":"1622:21:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"},"typeName":{"id":20282,"nodeType":"UserDefinedTypeName","pathNode":{"id":20281,"name":"VaultStateBits","nameLocations":["1622:14:61"],"nodeType":"IdentifierPath","referencedDeclaration":20164,"src":"1622:14:61"},"referencedDeclaration":20164,"src":"1622:14:61","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}},"visibility":"internal"},{"constant":false,"id":20285,"mutability":"mutable","name":"value","nameLocation":"1650:5:61","nodeType":"VariableDeclaration","scope":20304,"src":"1645:10:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20284,"name":"bool","nodeType":"ElementaryTypeName","src":"1645:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1621:35:61"},"returnParameters":{"id":20290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20289,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20304,"src":"1680:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"},"typeName":{"id":20288,"nodeType":"UserDefinedTypeName","pathNode":{"id":20287,"name":"VaultStateBits","nameLocations":["1680:14:61"],"nodeType":"IdentifierPath","referencedDeclaration":20164,"src":"1680:14:61"},"referencedDeclaration":20164,"src":"1680:14:61","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$20164","typeString":"VaultStateBits"}},"visibility":"internal"}],"src":"1679:16:61"},"scope":20305,"src":"1596:214:61","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":20306,"src":"335:1477:61","usedErrors":[],"usedEvents":[]}],"src":"46:1767:61"},"id":61},"contracts/token/ERC20MultiToken.sol":{"ast":{"absolutePath":"contracts/token/ERC20MultiToken.sol","exportedSymbols":{"BalancerPoolToken":[12247],"ERC20MultiToken":[20898],"EVMCallModeHelpers":[2639],"IERC20Errors":[6771],"IERC20MultiTokenErrors":[98]},"id":20899,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":20307,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:62"},{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","file":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","id":20309,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20899,"sourceUnit":6867,"src":"72:85:62","symbolAliases":[{"foreign":{"id":20308,"name":"IERC20Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6771,"src":"81:12:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol","id":20311,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20899,"sourceUnit":99,"src":"159:113:62","symbolAliases":[{"foreign":{"id":20310,"name":"IERC20MultiTokenErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98,"src":"168:22:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol","id":20313,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20899,"sourceUnit":2640,"src":"274:111:62","symbolAliases":[{"foreign":{"id":20312,"name":"EVMCallModeHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2639,"src":"283:18:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/BalancerPoolToken.sol","file":"../BalancerPoolToken.sol","id":20315,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20899,"sourceUnit":12248,"src":"387:61:62","symbolAliases":[{"foreign":{"id":20314,"name":"BalancerPoolToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12247,"src":"396:17:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":20317,"name":"IERC20Errors","nameLocations":["794:12:62"],"nodeType":"IdentifierPath","referencedDeclaration":6771,"src":"794:12:62"},"id":20318,"nodeType":"InheritanceSpecifier","src":"794:12:62"},{"baseName":{"id":20319,"name":"IERC20MultiTokenErrors","nameLocations":["808:22:62"],"nodeType":"IdentifierPath","referencedDeclaration":98,"src":"808:22:62"},"id":20320,"nodeType":"InheritanceSpecifier","src":"808:22:62"}],"canonicalName":"ERC20MultiToken","contractDependencies":[],"contractKind":"contract","documentation":{"id":20316,"nodeType":"StructuredDocumentation","src":"450:306:62","text":" @notice Store Token data and handle accounting for pool tokens in the Vault.\n @dev The ERC20MultiToken is an ERC20-focused multi-token implementation that is fully compatible with the ERC20 API\n on the token side. It also allows for the minting and burning of tokens on the multi-token side."},"fullyImplemented":true,"id":20898,"linearizedBaseContracts":[20898,98,6771],"name":"ERC20MultiToken","nameLocation":"775:15:62","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":20323,"mutability":"constant","name":"_POOL_MINIMUM_TOTAL_SUPPLY","nameLocation":"899:26:62","nodeType":"VariableDeclaration","scope":20898,"src":"873:58:62","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20321,"name":"uint256","nodeType":"ElementaryTypeName","src":"873:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"316536","id":20322,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"928:3:62","typeDescriptions":{"typeIdentifier":"t_rational_1000000_by_1","typeString":"int_const 1000000"},"value":"1e6"},"visibility":"internal"},{"anonymous":false,"documentation":{"id":20324,"nodeType":"StructuredDocumentation","src":"938:292:62","text":" @notice Pool tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\n @param pool The pool token being transferred\n @param from The token source\n @param to The token destination\n @param value The number of tokens"},"eventSelector":"d1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f","id":20334,"name":"Transfer","nameLocation":"1241:8:62","nodeType":"EventDefinition","parameters":{"id":20333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20326,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1266:4:62","nodeType":"VariableDeclaration","scope":20334,"src":"1250:20:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20325,"name":"address","nodeType":"ElementaryTypeName","src":"1250:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20328,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"1288:4:62","nodeType":"VariableDeclaration","scope":20334,"src":"1272:20:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20327,"name":"address","nodeType":"ElementaryTypeName","src":"1272:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20330,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"1310:2:62","nodeType":"VariableDeclaration","scope":20334,"src":"1294:18:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20329,"name":"address","nodeType":"ElementaryTypeName","src":"1294:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20332,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"1322:5:62","nodeType":"VariableDeclaration","scope":20334,"src":"1314:13:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20331,"name":"uint256","nodeType":"ElementaryTypeName","src":"1314:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1249:79:62"},"src":"1235:94:62"},{"anonymous":false,"documentation":{"id":20335,"nodeType":"StructuredDocumentation","src":"1335:400:62","text":" @notice The allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\n @param pool The pool token receiving the allowance\n @param owner The token holder\n @param spender The account being authorized to spend a given amount of the token\n @param value The number of tokens spender is authorized to transfer from owner"},"eventSelector":"a0175360a15bca328baf7ea85c7b784d58b222a50d0ce760b10dba336d226a61","id":20345,"name":"Approval","nameLocation":"1746:8:62","nodeType":"EventDefinition","parameters":{"id":20344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20337,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1771:4:62","nodeType":"VariableDeclaration","scope":20345,"src":"1755:20:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20336,"name":"address","nodeType":"ElementaryTypeName","src":"1755:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20339,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"1793:5:62","nodeType":"VariableDeclaration","scope":20345,"src":"1777:21:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20338,"name":"address","nodeType":"ElementaryTypeName","src":"1777:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20341,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"1816:7:62","nodeType":"VariableDeclaration","scope":20345,"src":"1800:23:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20340,"name":"address","nodeType":"ElementaryTypeName","src":"1800:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20343,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"1833:5:62","nodeType":"VariableDeclaration","scope":20345,"src":"1825:13:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20342,"name":"uint256","nodeType":"ElementaryTypeName","src":"1825:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1754:85:62"},"src":"1740:100:62"},{"constant":false,"id":20351,"mutability":"mutable","name":"_balances","nameLocation":"1963:9:62","nodeType":"VariableDeclaration","scope":20898,"src":"1887:85:62","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":20350,"keyName":"token","keyNameLocation":"1903:5:62","keyType":{"id":20346,"name":"address","nodeType":"ElementaryTypeName","src":"1895:7:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1887:67:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":20349,"keyName":"owner","keyNameLocation":"1928:5:62","keyType":{"id":20347,"name":"address","nodeType":"ElementaryTypeName","src":"1920:7:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1912:41:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"balance","valueNameLocation":"1945:7:62","valueType":{"id":20348,"name":"uint256","nodeType":"ElementaryTypeName","src":"1937:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"constant":false,"id":20359,"mutability":"mutable","name":"_allowances","nameLocation":"2136:11:62","nodeType":"VariableDeclaration","scope":20898,"src":"2022:125:62","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(address => mapping(address => uint256)))"},"typeName":{"id":20358,"keyName":"token","keyNameLocation":"2038:5:62","keyType":{"id":20352,"name":"address","nodeType":"ElementaryTypeName","src":"2030:7:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2022:97:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(address => mapping(address => uint256)))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":20357,"keyName":"owner","keyNameLocation":"2063:5:62","keyType":{"id":20353,"name":"address","nodeType":"ElementaryTypeName","src":"2055:7:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2047:71:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":20356,"keyName":"spender","keyNameLocation":"2088:7:62","keyType":{"id":20354,"name":"address","nodeType":"ElementaryTypeName","src":"2080:7:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2072:45:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"allowance","valueNameLocation":"2107:9:62","valueType":{"id":20355,"name":"uint256","nodeType":"ElementaryTypeName","src":"2099:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}}},"visibility":"private"},{"constant":false,"id":20363,"mutability":"mutable","name":"_totalSupplyOf","nameLocation":"2381:14:62","nodeType":"VariableDeclaration","scope":20898,"src":"2327:68:62","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":20362,"keyName":"token","keyNameLocation":"2343:5:62","keyType":{"id":20360,"name":"address","nodeType":"ElementaryTypeName","src":"2335:7:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2327:45:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"totalSupply","valueNameLocation":"2360:11:62","valueType":{"id":20361,"name":"uint256","nodeType":"ElementaryTypeName","src":"2352:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"body":{"id":20374,"nodeType":"Block","src":"2470:44:62","statements":[{"expression":{"baseExpression":{"id":20370,"name":"_totalSupplyOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20363,"src":"2487:14:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20372,"indexExpression":{"id":20371,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20365,"src":"2502:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2487:20:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20369,"id":20373,"nodeType":"Return","src":"2480:27:62"}]},"id":20375,"implemented":true,"kind":"function","modifiers":[],"name":"_totalSupply","nameLocation":"2411:12:62","nodeType":"FunctionDefinition","parameters":{"id":20366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20365,"mutability":"mutable","name":"pool","nameLocation":"2432:4:62","nodeType":"VariableDeclaration","scope":20375,"src":"2424:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20364,"name":"address","nodeType":"ElementaryTypeName","src":"2424:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2423:14:62"},"returnParameters":{"id":20369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20368,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20375,"src":"2461:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20367,"name":"uint256","nodeType":"ElementaryTypeName","src":"2461:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2460:9:62"},"scope":20898,"src":"2402:112:62","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":20390,"nodeType":"Block","src":"2603:48:62","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":20384,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20351,"src":"2620:9:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":20386,"indexExpression":{"id":20385,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20377,"src":"2630:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2620:15:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20388,"indexExpression":{"id":20387,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20379,"src":"2636:7:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2620:24:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20383,"id":20389,"nodeType":"Return","src":"2613:31:62"}]},"id":20391,"implemented":true,"kind":"function","modifiers":[],"name":"_balanceOf","nameLocation":"2529:10:62","nodeType":"FunctionDefinition","parameters":{"id":20380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20377,"mutability":"mutable","name":"pool","nameLocation":"2548:4:62","nodeType":"VariableDeclaration","scope":20391,"src":"2540:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20376,"name":"address","nodeType":"ElementaryTypeName","src":"2540:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20379,"mutability":"mutable","name":"account","nameLocation":"2562:7:62","nodeType":"VariableDeclaration","scope":20391,"src":"2554:15:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20378,"name":"address","nodeType":"ElementaryTypeName","src":"2554:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2539:31:62"},"returnParameters":{"id":20383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20382,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20391,"src":"2594:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20381,"name":"uint256","nodeType":"ElementaryTypeName","src":"2594:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2593:9:62"},"scope":20898,"src":"2520:131:62","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":20422,"nodeType":"Block","src":"2755:211:62","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20402,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20395,"src":"2822:5:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":20403,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20397,"src":"2831:7:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2822:16:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":20420,"nodeType":"Block","src":"2895:65:62","statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":20412,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20359,"src":"2916:11:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(address => mapping(address => uint256)))"}},"id":20414,"indexExpression":{"id":20413,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20393,"src":"2928:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2916:17:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":20416,"indexExpression":{"id":20415,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20395,"src":"2934:5:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2916:24:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20418,"indexExpression":{"id":20417,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20397,"src":"2941:7:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2916:33:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20401,"id":20419,"nodeType":"Return","src":"2909:40:62"}]},"id":20421,"nodeType":"IfStatement","src":"2818:142:62","trueBody":{"id":20411,"nodeType":"Block","src":"2840:49:62","statements":[{"expression":{"expression":{"arguments":[{"id":20407,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2866:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":20406,"name":"uint256","nodeType":"ElementaryTypeName","src":"2866:7:62","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":20405,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2861:4:62","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":20408,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2861:13:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":20409,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2875:3:62","memberName":"max","nodeType":"MemberAccess","src":"2861:17:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20401,"id":20410,"nodeType":"Return","src":"2854:24:62"}]}}]},"id":20423,"implemented":true,"kind":"function","modifiers":[],"name":"_allowance","nameLocation":"2666:10:62","nodeType":"FunctionDefinition","parameters":{"id":20398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20393,"mutability":"mutable","name":"pool","nameLocation":"2685:4:62","nodeType":"VariableDeclaration","scope":20423,"src":"2677:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20392,"name":"address","nodeType":"ElementaryTypeName","src":"2677:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20395,"mutability":"mutable","name":"owner","nameLocation":"2699:5:62","nodeType":"VariableDeclaration","scope":20423,"src":"2691:13:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20394,"name":"address","nodeType":"ElementaryTypeName","src":"2691:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20397,"mutability":"mutable","name":"spender","nameLocation":"2714:7:62","nodeType":"VariableDeclaration","scope":20423,"src":"2706:15:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20396,"name":"address","nodeType":"ElementaryTypeName","src":"2706:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2676:46:62"},"returnParameters":{"id":20401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20400,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20423,"src":"2746:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20399,"name":"uint256","nodeType":"ElementaryTypeName","src":"2746:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2745:9:62"},"scope":20898,"src":"2657:309:62","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":20456,"nodeType":"Block","src":"3248:342:62","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20433,"name":"EVMCallModeHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2639,"src":"3341:18:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_EVMCallModeHelpers_$2639_$","typeString":"type(library EVMCallModeHelpers)"}},"id":20434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3360:12:62","memberName":"isStaticCall","nodeType":"MemberAccess","referencedDeclaration":2638,"src":"3341:31:62","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":20435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3341:33:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":20436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3378:5:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"3341:42:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20444,"nodeType":"IfStatement","src":"3337:114:62","trueBody":{"id":20443,"nodeType":"Block","src":"3385:66:62","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20438,"name":"EVMCallModeHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2639,"src":"3406:18:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_EVMCallModeHelpers_$2639_$","typeString":"type(library EVMCallModeHelpers)"}},"id":20440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3425:13:62","memberName":"NotStaticCall","nodeType":"MemberAccess","referencedDeclaration":2623,"src":"3406:32:62","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":20441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3406:34:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20442,"nodeType":"RevertStatement","src":"3399:41:62"}]}},{"expression":{"id":20454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":20445,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20351,"src":"3545:9:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":20451,"indexExpression":{"arguments":[{"id":20448,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20426,"src":"3563:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20447,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3555:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20446,"name":"address","nodeType":"ElementaryTypeName","src":"3555:7:62","typeDescriptions":{}}},"id":20449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3555:13:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3545:24:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20452,"indexExpression":{"id":20450,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20428,"src":"3570:2:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3545:28:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":20453,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20430,"src":"3577:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3545:38:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20455,"nodeType":"ExpressionStatement","src":"3545:38:62"}]},"documentation":{"id":20424,"nodeType":"StructuredDocumentation","src":"2972:185:62","text":" @dev DO NOT CALL THIS METHOD!\n Only `removeLiquidity` in the Vault may call this - in a query context - to allow burning tokens the caller\n does not have."},"id":20457,"implemented":true,"kind":"function","modifiers":[],"name":"_queryModeBalanceIncrease","nameLocation":"3171:25:62","nodeType":"FunctionDefinition","parameters":{"id":20431,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20426,"mutability":"mutable","name":"pool","nameLocation":"3205:4:62","nodeType":"VariableDeclaration","scope":20457,"src":"3197:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20425,"name":"address","nodeType":"ElementaryTypeName","src":"3197:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20428,"mutability":"mutable","name":"to","nameLocation":"3219:2:62","nodeType":"VariableDeclaration","scope":20457,"src":"3211:10:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20427,"name":"address","nodeType":"ElementaryTypeName","src":"3211:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20430,"mutability":"mutable","name":"amount","nameLocation":"3231:6:62","nodeType":"VariableDeclaration","scope":20457,"src":"3223:14:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20429,"name":"uint256","nodeType":"ElementaryTypeName","src":"3223:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3196:42:62"},"returnParameters":{"id":20432,"nodeType":"ParameterList","parameters":[],"src":"3248:0:62"},"scope":20898,"src":"3162:428:62","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":20527,"nodeType":"Block","src":"3662:690:62","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20466,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20461,"src":"3676:2:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":20469,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3690:1:62","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":20468,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3682:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20467,"name":"address","nodeType":"ElementaryTypeName","src":"3682:7:62","typeDescriptions":{}}},"id":20470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3682:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3676:16:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20477,"nodeType":"IfStatement","src":"3672:78:62","trueBody":{"id":20476,"nodeType":"Block","src":"3694:56:62","statements":[{"errorCall":{"arguments":[{"id":20473,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20461,"src":"3736:2:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20472,"name":"ERC20InvalidReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6751,"src":"3715:20:62","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":20474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3715:24:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20475,"nodeType":"RevertStatement","src":"3708:31:62"}]}},{"assignments":[20479],"declarations":[{"constant":false,"id":20479,"mutability":"mutable","name":"newTotalSupply","nameLocation":"3768:14:62","nodeType":"VariableDeclaration","scope":20527,"src":"3760:22:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20478,"name":"uint256","nodeType":"ElementaryTypeName","src":"3760:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20485,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":20480,"name":"_totalSupplyOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20363,"src":"3785:14:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20482,"indexExpression":{"id":20481,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20459,"src":"3800:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3785:20:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":20483,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20463,"src":"3808:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3785:29:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3760:54:62"},{"id":20494,"nodeType":"UncheckedBlock","src":"3824:179:62","statements":[{"expression":{"id":20492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":20486,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20351,"src":"3963:9:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":20489,"indexExpression":{"id":20487,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20459,"src":"3973:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3963:15:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20490,"indexExpression":{"id":20488,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20461,"src":"3979:2:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3963:19:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":20491,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20463,"src":"3986:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3963:29:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20493,"nodeType":"ExpressionStatement","src":"3963:29:62"}]},{"expression":{"arguments":[{"id":20496,"name":"newTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20479,"src":"4043:14:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20495,"name":"_ensurePoolMinimumTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20543,"src":"4013:29:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":20497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4013:45:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20498,"nodeType":"ExpressionStatement","src":"4013:45:62"},{"expression":{"id":20503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20499,"name":"_totalSupplyOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20363,"src":"4069:14:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20501,"indexExpression":{"id":20500,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20459,"src":"4084:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4069:20:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20502,"name":"newTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20479,"src":"4092:14:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4069:37:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20504,"nodeType":"ExpressionStatement","src":"4069:37:62"},{"eventCall":{"arguments":[{"id":20506,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20459,"src":"4131:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":20509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4145:1:62","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":20508,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4137:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20507,"name":"address","nodeType":"ElementaryTypeName","src":"4137:7:62","typeDescriptions":{}}},"id":20510,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4137:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20511,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20461,"src":"4149:2:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20512,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20463,"src":"4153:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20505,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20334,"src":"4122:8:62","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":20513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4122:38:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20514,"nodeType":"EmitStatement","src":"4117:43:62"},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":20521,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4330:1:62","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":20520,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4322:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20519,"name":"address","nodeType":"ElementaryTypeName","src":"4322:7:62","typeDescriptions":{}}},"id":20522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4322:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20523,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20461,"src":"4334:2:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20524,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20463,"src":"4338:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":20516,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20459,"src":"4303:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20515,"name":"BalancerPoolToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12247,"src":"4285:17:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BalancerPoolToken_$12247_$","typeString":"type(contract BalancerPoolToken)"}},"id":20517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4285:23:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$12247","typeString":"contract BalancerPoolToken"}},"id":20518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4309:12:62","memberName":"emitTransfer","nodeType":"MemberAccess","referencedDeclaration":12098,"src":"4285:36:62","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":20525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4285:60:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20526,"nodeType":"ExpressionStatement","src":"4285:60:62"}]},"id":20528,"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"3605:5:62","nodeType":"FunctionDefinition","parameters":{"id":20464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20459,"mutability":"mutable","name":"pool","nameLocation":"3619:4:62","nodeType":"VariableDeclaration","scope":20528,"src":"3611:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20458,"name":"address","nodeType":"ElementaryTypeName","src":"3611:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20461,"mutability":"mutable","name":"to","nameLocation":"3633:2:62","nodeType":"VariableDeclaration","scope":20528,"src":"3625:10:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20460,"name":"address","nodeType":"ElementaryTypeName","src":"3625:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20463,"mutability":"mutable","name":"amount","nameLocation":"3645:6:62","nodeType":"VariableDeclaration","scope":20528,"src":"3637:14:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20462,"name":"uint256","nodeType":"ElementaryTypeName","src":"3637:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3610:42:62"},"returnParameters":{"id":20465,"nodeType":"ParameterList","parameters":[],"src":"3662:0:62"},"scope":20898,"src":"3596:756:62","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":20542,"nodeType":"Block","src":"4435:134:62","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20533,"name":"newTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20530,"src":"4449:14:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":20534,"name":"_POOL_MINIMUM_TOTAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20323,"src":"4466:26:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4449:43:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20541,"nodeType":"IfStatement","src":"4445:118:62","trueBody":{"id":20540,"nodeType":"Block","src":"4494:69:62","statements":[{"errorCall":{"arguments":[{"id":20537,"name":"newTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20530,"src":"4537:14:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20536,"name":"PoolTotalSupplyTooLow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97,"src":"4515:21:62","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":20538,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4515:37:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20539,"nodeType":"RevertStatement","src":"4508:44:62"}]}}]},"id":20543,"implemented":true,"kind":"function","modifiers":[],"name":"_ensurePoolMinimumTotalSupply","nameLocation":"4367:29:62","nodeType":"FunctionDefinition","parameters":{"id":20531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20530,"mutability":"mutable","name":"newTotalSupply","nameLocation":"4405:14:62","nodeType":"VariableDeclaration","scope":20543,"src":"4397:22:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20529,"name":"uint256","nodeType":"ElementaryTypeName","src":"4397:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4396:24:62"},"returnParameters":{"id":20532,"nodeType":"ParameterList","parameters":[],"src":"4435:0:62"},"scope":20898,"src":"4358:211:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":20594,"nodeType":"Block","src":"4633:577:62","statements":[{"expression":{"id":20552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20548,"name":"_totalSupplyOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20363,"src":"4643:14:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20550,"indexExpression":{"id":20549,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20545,"src":"4658:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4643:20:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":20551,"name":"_POOL_MINIMUM_TOTAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20323,"src":"4667:26:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4643:50:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20553,"nodeType":"ExpressionStatement","src":"4643:50:62"},{"id":20565,"nodeType":"UncheckedBlock","src":"4703:207:62","statements":[{"expression":{"id":20563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":20554,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20351,"src":"4842:9:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":20560,"indexExpression":{"id":20555,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20545,"src":"4852:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4842:15:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20561,"indexExpression":{"arguments":[{"hexValue":"30","id":20558,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4866:1:62","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":20557,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4858:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20556,"name":"address","nodeType":"ElementaryTypeName","src":"4858:7:62","typeDescriptions":{}}},"id":20559,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4858:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4842:27:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":20562,"name":"_POOL_MINIMUM_TOTAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20323,"src":"4873:26:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4842:57:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20564,"nodeType":"ExpressionStatement","src":"4842:57:62"}]},{"eventCall":{"arguments":[{"id":20567,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20545,"src":"4933:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":20570,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4947:1:62","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":20569,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4939:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20568,"name":"address","nodeType":"ElementaryTypeName","src":"4939:7:62","typeDescriptions":{}}},"id":20571,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4939:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":20574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4959:1:62","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":20573,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4951:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20572,"name":"address","nodeType":"ElementaryTypeName","src":"4951:7:62","typeDescriptions":{}}},"id":20575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4951:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20576,"name":"_POOL_MINIMUM_TOTAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20323,"src":"4963:26:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20566,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20334,"src":"4924:8:62","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":20577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4924:66:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20578,"nodeType":"EmitStatement","src":"4919:71:62"},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":20585,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5160:1:62","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":20584,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5152:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20583,"name":"address","nodeType":"ElementaryTypeName","src":"5152:7:62","typeDescriptions":{}}},"id":20586,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5152:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":20589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5172:1:62","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":20588,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5164:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20587,"name":"address","nodeType":"ElementaryTypeName","src":"5164:7:62","typeDescriptions":{}}},"id":20590,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5164:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20591,"name":"_POOL_MINIMUM_TOTAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20323,"src":"5176:26:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":20580,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20545,"src":"5133:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20579,"name":"BalancerPoolToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12247,"src":"5115:17:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BalancerPoolToken_$12247_$","typeString":"type(contract BalancerPoolToken)"}},"id":20581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5115:23:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$12247","typeString":"contract BalancerPoolToken"}},"id":20582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5139:12:62","memberName":"emitTransfer","nodeType":"MemberAccess","referencedDeclaration":12098,"src":"5115:36:62","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":20592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5115:88:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20593,"nodeType":"ExpressionStatement","src":"5115:88:62"}]},"id":20595,"implemented":true,"kind":"function","modifiers":[],"name":"_mintMinimumSupplyReserve","nameLocation":"4584:25:62","nodeType":"FunctionDefinition","parameters":{"id":20546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20545,"mutability":"mutable","name":"pool","nameLocation":"4618:4:62","nodeType":"VariableDeclaration","scope":20595,"src":"4610:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20544,"name":"address","nodeType":"ElementaryTypeName","src":"4610:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4609:14:62"},"returnParameters":{"id":20547,"nodeType":"ParameterList","parameters":[],"src":"4633:0:62"},"scope":20898,"src":"4575:635:62","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":20690,"nodeType":"Block","src":"5284:1112:62","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20604,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20599,"src":"5298:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":20607,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5314:1:62","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":20606,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5306:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20605,"name":"address","nodeType":"ElementaryTypeName","src":"5306:7:62","typeDescriptions":{}}},"id":20608,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5306:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5298:18:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20615,"nodeType":"IfStatement","src":"5294:80:62","trueBody":{"id":20614,"nodeType":"Block","src":"5318:56:62","statements":[{"errorCall":{"arguments":[{"id":20611,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20599,"src":"5358:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20610,"name":"ERC20InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6746,"src":"5339:18:62","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":20612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5339:24:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20613,"nodeType":"RevertStatement","src":"5332:31:62"}]}},{"assignments":[20617],"declarations":[{"constant":false,"id":20617,"mutability":"mutable","name":"accountBalance","nameLocation":"5392:14:62","nodeType":"VariableDeclaration","scope":20690,"src":"5384:22:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20616,"name":"uint256","nodeType":"ElementaryTypeName","src":"5384:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20623,"initialValue":{"baseExpression":{"baseExpression":{"id":20618,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20351,"src":"5409:9:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":20620,"indexExpression":{"id":20619,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20597,"src":"5419:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5409:15:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20622,"indexExpression":{"id":20621,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20599,"src":"5425:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5409:21:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5384:46:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20624,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20601,"src":"5444:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":20625,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20617,"src":"5453:14:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5444:23:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20634,"nodeType":"IfStatement","src":"5440:115:62","trueBody":{"id":20633,"nodeType":"Block","src":"5469:86:62","statements":[{"errorCall":{"arguments":[{"id":20628,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20599,"src":"5515:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20629,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20617,"src":"5521:14:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20630,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20601,"src":"5537:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20627,"name":"ERC20InsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6741,"src":"5490:24:62","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":20631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5490:54:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20632,"nodeType":"RevertStatement","src":"5483:61:62"}]}},{"id":20645,"nodeType":"UncheckedBlock","src":"5565:82:62","statements":[{"expression":{"id":20643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":20635,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20351,"src":"5589:9:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":20638,"indexExpression":{"id":20636,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20597,"src":"5599:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5589:15:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20639,"indexExpression":{"id":20637,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20599,"src":"5605:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5589:21:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20640,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20617,"src":"5613:14:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":20641,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20601,"src":"5630:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5613:23:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5589:47:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20644,"nodeType":"ExpressionStatement","src":"5589:47:62"}]},{"assignments":[20647],"declarations":[{"constant":false,"id":20647,"mutability":"mutable","name":"newTotalSupply","nameLocation":"5664:14:62","nodeType":"VariableDeclaration","scope":20690,"src":"5656:22:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20646,"name":"uint256","nodeType":"ElementaryTypeName","src":"5656:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20653,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":20648,"name":"_totalSupplyOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20363,"src":"5681:14:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20650,"indexExpression":{"id":20649,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20597,"src":"5696:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5681:20:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":20651,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20601,"src":"5704:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5681:29:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5656:54:62"},{"expression":{"arguments":[{"id":20655,"name":"newTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20647,"src":"5751:14:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20654,"name":"_ensurePoolMinimumTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20543,"src":"5721:29:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":20656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5721:45:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20657,"nodeType":"ExpressionStatement","src":"5721:45:62"},{"expression":{"id":20662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20658,"name":"_totalSupplyOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20363,"src":"5777:14:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20660,"indexExpression":{"id":20659,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20597,"src":"5792:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5777:20:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20661,"name":"newTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20647,"src":"5800:14:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5777:37:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20663,"nodeType":"ExpressionStatement","src":"5777:37:62"},{"clauses":[{"block":{"id":20675,"nodeType":"Block","src":"6176:2:62","statements":[]},"errorName":"","id":20676,"nodeType":"TryCatchClause","src":"6176:2:62"},{"block":{"id":20677,"nodeType":"Block","src":"6185:72:62","statements":[]},"errorName":"","id":20678,"nodeType":"TryCatchClause","src":"6179:78:62"}],"externalCall":{"arguments":[{"id":20668,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20599,"src":"6150:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":20671,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6164:1:62","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":20670,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6156:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20669,"name":"address","nodeType":"ElementaryTypeName","src":"6156:7:62","typeDescriptions":{}}},"id":20672,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6156:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20673,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20601,"src":"6168:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":20665,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20597,"src":"6131:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20664,"name":"BalancerPoolToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12247,"src":"6113:17:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BalancerPoolToken_$12247_$","typeString":"type(contract BalancerPoolToken)"}},"id":20666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6113:23:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$12247","typeString":"contract BalancerPoolToken"}},"id":20667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6137:12:62","memberName":"emitTransfer","nodeType":"MemberAccess","referencedDeclaration":12098,"src":"6113:36:62","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":20674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6113:62:62","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20679,"nodeType":"TryStatement","src":"6109:148:62"},{"eventCall":{"arguments":[{"id":20681,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20597,"src":"6358:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20682,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20599,"src":"6364:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":20685,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6378:1:62","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":20684,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6370:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20683,"name":"address","nodeType":"ElementaryTypeName","src":"6370:7:62","typeDescriptions":{}}},"id":20686,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6370:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20687,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20601,"src":"6382:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20680,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20334,"src":"6349:8:62","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":20688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6349:40:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20689,"nodeType":"EmitStatement","src":"6344:45:62"}]},"id":20691,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"5225:5:62","nodeType":"FunctionDefinition","parameters":{"id":20602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20597,"mutability":"mutable","name":"pool","nameLocation":"5239:4:62","nodeType":"VariableDeclaration","scope":20691,"src":"5231:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20596,"name":"address","nodeType":"ElementaryTypeName","src":"5231:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20599,"mutability":"mutable","name":"from","nameLocation":"5253:4:62","nodeType":"VariableDeclaration","scope":20691,"src":"5245:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20598,"name":"address","nodeType":"ElementaryTypeName","src":"5245:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20601,"mutability":"mutable","name":"amount","nameLocation":"5267:6:62","nodeType":"VariableDeclaration","scope":20691,"src":"5259:14:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20600,"name":"uint256","nodeType":"ElementaryTypeName","src":"5259:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5230:44:62"},"returnParameters":{"id":20603,"nodeType":"ParameterList","parameters":[],"src":"5284:0:62"},"scope":20898,"src":"5216:1180:62","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":20780,"nodeType":"Block","src":"6486:882:62","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20702,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20695,"src":"6500:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":20705,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6516:1:62","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":20704,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6508:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20703,"name":"address","nodeType":"ElementaryTypeName","src":"6508:7:62","typeDescriptions":{}}},"id":20706,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6508:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6500:18:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20713,"nodeType":"IfStatement","src":"6496:80:62","trueBody":{"id":20712,"nodeType":"Block","src":"6520:56:62","statements":[{"errorCall":{"arguments":[{"id":20709,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20695,"src":"6560:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20708,"name":"ERC20InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6746,"src":"6541:18:62","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":20710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6541:24:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20711,"nodeType":"RevertStatement","src":"6534:31:62"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20714,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20697,"src":"6590:2:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":20717,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6604:1:62","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":20716,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6596:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20715,"name":"address","nodeType":"ElementaryTypeName","src":"6596:7:62","typeDescriptions":{}}},"id":20718,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6596:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6590:16:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20725,"nodeType":"IfStatement","src":"6586:78:62","trueBody":{"id":20724,"nodeType":"Block","src":"6608:56:62","statements":[{"errorCall":{"arguments":[{"id":20721,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20697,"src":"6650:2:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20720,"name":"ERC20InvalidReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6751,"src":"6629:20:62","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":20722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6629:24:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20723,"nodeType":"RevertStatement","src":"6622:31:62"}]}},{"assignments":[20727],"declarations":[{"constant":false,"id":20727,"mutability":"mutable","name":"fromBalance","nameLocation":"6682:11:62","nodeType":"VariableDeclaration","scope":20780,"src":"6674:19:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20726,"name":"uint256","nodeType":"ElementaryTypeName","src":"6674:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20733,"initialValue":{"baseExpression":{"baseExpression":{"id":20728,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20351,"src":"6696:9:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":20730,"indexExpression":{"id":20729,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20693,"src":"6706:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6696:15:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20732,"indexExpression":{"id":20731,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20695,"src":"6712:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6696:21:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6674:43:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20734,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20699,"src":"6731:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":20735,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20727,"src":"6740:11:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6731:20:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20744,"nodeType":"IfStatement","src":"6727:109:62","trueBody":{"id":20743,"nodeType":"Block","src":"6753:83:62","statements":[{"errorCall":{"arguments":[{"id":20738,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20695,"src":"6799:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20739,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20727,"src":"6805:11:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20740,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20699,"src":"6818:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20737,"name":"ERC20InsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6741,"src":"6774:24:62","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":20741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6774:51:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20742,"nodeType":"RevertStatement","src":"6767:58:62"}]}},{"id":20763,"nodeType":"UncheckedBlock","src":"6846:289:62","statements":[{"expression":{"id":20753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":20745,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20351,"src":"6870:9:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":20748,"indexExpression":{"id":20746,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20693,"src":"6880:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6870:15:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20749,"indexExpression":{"id":20747,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20695,"src":"6886:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6870:21:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20750,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20727,"src":"6894:11:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":20751,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20699,"src":"6908:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6894:20:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6870:44:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20754,"nodeType":"ExpressionStatement","src":"6870:44:62"},{"expression":{"id":20761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":20755,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20351,"src":"7095:9:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":20758,"indexExpression":{"id":20756,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20693,"src":"7105:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7095:15:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20759,"indexExpression":{"id":20757,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20697,"src":"7111:2:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7095:19:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":20760,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20699,"src":"7118:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7095:29:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20762,"nodeType":"ExpressionStatement","src":"7095:29:62"}]},{"eventCall":{"arguments":[{"id":20765,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20693,"src":"7159:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20766,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20695,"src":"7165:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20767,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20697,"src":"7171:2:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20768,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20699,"src":"7175:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20764,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20334,"src":"7150:8:62","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":20769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7150:32:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20770,"nodeType":"EmitStatement","src":"7145:37:62"},{"expression":{"arguments":[{"id":20775,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20695,"src":"7344:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20776,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20697,"src":"7350:2:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20777,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20699,"src":"7354:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":20772,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20693,"src":"7325:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20771,"name":"BalancerPoolToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12247,"src":"7307:17:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BalancerPoolToken_$12247_$","typeString":"type(contract BalancerPoolToken)"}},"id":20773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7307:23:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$12247","typeString":"contract BalancerPoolToken"}},"id":20774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7331:12:62","memberName":"emitTransfer","nodeType":"MemberAccess","referencedDeclaration":12098,"src":"7307:36:62","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":20778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7307:54:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20779,"nodeType":"ExpressionStatement","src":"7307:54:62"}]},"id":20781,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"6411:9:62","nodeType":"FunctionDefinition","parameters":{"id":20700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20693,"mutability":"mutable","name":"pool","nameLocation":"6429:4:62","nodeType":"VariableDeclaration","scope":20781,"src":"6421:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20692,"name":"address","nodeType":"ElementaryTypeName","src":"6421:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20695,"mutability":"mutable","name":"from","nameLocation":"6443:4:62","nodeType":"VariableDeclaration","scope":20781,"src":"6435:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20694,"name":"address","nodeType":"ElementaryTypeName","src":"6435:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20697,"mutability":"mutable","name":"to","nameLocation":"6457:2:62","nodeType":"VariableDeclaration","scope":20781,"src":"6449:10:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20696,"name":"address","nodeType":"ElementaryTypeName","src":"6449:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20699,"mutability":"mutable","name":"amount","nameLocation":"6469:6:62","nodeType":"VariableDeclaration","scope":20781,"src":"6461:14:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20698,"name":"uint256","nodeType":"ElementaryTypeName","src":"6461:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6420:56:62"},"returnParameters":{"id":20701,"nodeType":"ParameterList","parameters":[],"src":"6486:0:62"},"scope":20898,"src":"6402:966:62","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":20846,"nodeType":"Block","src":"7463:820:62","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20792,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20785,"src":"7477:5:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":20795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7494:1:62","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":20794,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7486:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20793,"name":"address","nodeType":"ElementaryTypeName","src":"7486:7:62","typeDescriptions":{}}},"id":20796,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7486:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7477:19:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20803,"nodeType":"IfStatement","src":"7473:84:62","trueBody":{"id":20802,"nodeType":"Block","src":"7498:59:62","statements":[{"errorCall":{"arguments":[{"id":20799,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20785,"src":"7540:5:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20798,"name":"ERC20InvalidApprover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6765,"src":"7519:20:62","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":20800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7519:27:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20801,"nodeType":"RevertStatement","src":"7512:34:62"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20804,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20787,"src":"7571:7:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":20807,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7590:1:62","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":20806,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7582:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20805,"name":"address","nodeType":"ElementaryTypeName","src":"7582:7:62","typeDescriptions":{}}},"id":20808,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7582:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7571:21:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20815,"nodeType":"IfStatement","src":"7567:87:62","trueBody":{"id":20814,"nodeType":"Block","src":"7594:60:62","statements":[{"errorCall":{"arguments":[{"id":20811,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20787,"src":"7635:7:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20810,"name":"ERC20InvalidSpender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6770,"src":"7615:19:62","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":20812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7615:28:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20813,"nodeType":"RevertStatement","src":"7608:35:62"}]}},{"expression":{"id":20824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":20816,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20359,"src":"7664:11:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(address => mapping(address => uint256)))"}},"id":20820,"indexExpression":{"id":20817,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20783,"src":"7676:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7664:17:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":20821,"indexExpression":{"id":20818,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20785,"src":"7682:5:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7664:24:62","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20822,"indexExpression":{"id":20819,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20787,"src":"7689:7:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7664:33:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20823,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20789,"src":"7700:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7664:42:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20825,"nodeType":"ExpressionStatement","src":"7664:42:62"},{"clauses":[{"block":{"id":20834,"nodeType":"Block","src":"8065:2:62","statements":[]},"errorName":"","id":20835,"nodeType":"TryCatchClause","src":"8065:2:62"},{"block":{"id":20836,"nodeType":"Block","src":"8074:72:62","statements":[]},"errorName":"","id":20837,"nodeType":"TryCatchClause","src":"8068:78:62"}],"externalCall":{"arguments":[{"id":20830,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20785,"src":"8041:5:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20831,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20787,"src":"8048:7:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20832,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20789,"src":"8057:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":20827,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20783,"src":"8022:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20826,"name":"BalancerPoolToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12247,"src":"8004:17:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BalancerPoolToken_$12247_$","typeString":"type(contract BalancerPoolToken)"}},"id":20828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8004:23:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$12247","typeString":"contract BalancerPoolToken"}},"id":20829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8028:12:62","memberName":"emitApproval","nodeType":"MemberAccess","referencedDeclaration":12117,"src":"8004:36:62","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":20833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8004:60:62","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20838,"nodeType":"TryStatement","src":"8000:146:62"},{"eventCall":{"arguments":[{"id":20840,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20783,"src":"8247:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20841,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20785,"src":"8253:5:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20842,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20787,"src":"8260:7:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20843,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20789,"src":"8269:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20839,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20345,"src":"8238:8:62","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":20844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8238:38:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20845,"nodeType":"EmitStatement","src":"8233:43:62"}]},"id":20847,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"7383:8:62","nodeType":"FunctionDefinition","parameters":{"id":20790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20783,"mutability":"mutable","name":"pool","nameLocation":"7400:4:62","nodeType":"VariableDeclaration","scope":20847,"src":"7392:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20782,"name":"address","nodeType":"ElementaryTypeName","src":"7392:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20785,"mutability":"mutable","name":"owner","nameLocation":"7414:5:62","nodeType":"VariableDeclaration","scope":20847,"src":"7406:13:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20784,"name":"address","nodeType":"ElementaryTypeName","src":"7406:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20787,"mutability":"mutable","name":"spender","nameLocation":"7429:7:62","nodeType":"VariableDeclaration","scope":20847,"src":"7421:15:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20786,"name":"address","nodeType":"ElementaryTypeName","src":"7421:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20789,"mutability":"mutable","name":"amount","nameLocation":"7446:6:62","nodeType":"VariableDeclaration","scope":20847,"src":"7438:14:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20788,"name":"uint256","nodeType":"ElementaryTypeName","src":"7438:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7391:62:62"},"returnParameters":{"id":20791,"nodeType":"ParameterList","parameters":[],"src":"7463:0:62"},"scope":20898,"src":"7374:909:62","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":20896,"nodeType":"Block","src":"8385:398:62","statements":[{"assignments":[20859],"declarations":[{"constant":false,"id":20859,"mutability":"mutable","name":"currentAllowance","nameLocation":"8403:16:62","nodeType":"VariableDeclaration","scope":20896,"src":"8395:24:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20858,"name":"uint256","nodeType":"ElementaryTypeName","src":"8395:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20865,"initialValue":{"arguments":[{"id":20861,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20849,"src":"8433:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20862,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20851,"src":"8439:5:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20863,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20853,"src":"8446:7:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20860,"name":"_allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20423,"src":"8422:10:62","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address,address) view returns (uint256)"}},"id":20864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8422:32:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8395:59:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20866,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20859,"src":"8468:16:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"arguments":[{"id":20869,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8493:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":20868,"name":"uint256","nodeType":"ElementaryTypeName","src":"8493:7:62","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":20867,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8488:4:62","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":20870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8488:13:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":20871,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8502:3:62","memberName":"max","nodeType":"MemberAccess","src":"8488:17:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8468:37:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20895,"nodeType":"IfStatement","src":"8464:313:62","trueBody":{"id":20894,"nodeType":"Block","src":"8507:270:62","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20873,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20855,"src":"8525:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":20874,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20859,"src":"8534:16:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8525:25:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20883,"nodeType":"IfStatement","src":"8521:132:62","trueBody":{"id":20882,"nodeType":"Block","src":"8552:101:62","statements":[{"errorCall":{"arguments":[{"id":20877,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20853,"src":"8604:7:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20878,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20859,"src":"8613:16:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20879,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20855,"src":"8631:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20876,"name":"ERC20InsufficientAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6760,"src":"8577:26:62","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":20880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8577:61:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20881,"nodeType":"RevertStatement","src":"8570:68:62"}]}},{"id":20893,"nodeType":"UncheckedBlock","src":"8667:100:62","statements":[{"expression":{"arguments":[{"id":20885,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20849,"src":"8704:4:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20886,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20851,"src":"8710:5:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20887,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20853,"src":"8717:7:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20888,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20859,"src":"8726:16:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":20889,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20855,"src":"8745:6:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8726:25:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20884,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20847,"src":"8695:8:62","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":20891,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8695:57:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20892,"nodeType":"ExpressionStatement","src":"8695:57:62"}]}]}}]},"id":20897,"implemented":true,"kind":"function","modifiers":[],"name":"_spendAllowance","nameLocation":"8298:15:62","nodeType":"FunctionDefinition","parameters":{"id":20856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20849,"mutability":"mutable","name":"pool","nameLocation":"8322:4:62","nodeType":"VariableDeclaration","scope":20897,"src":"8314:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20848,"name":"address","nodeType":"ElementaryTypeName","src":"8314:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20851,"mutability":"mutable","name":"owner","nameLocation":"8336:5:62","nodeType":"VariableDeclaration","scope":20897,"src":"8328:13:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20850,"name":"address","nodeType":"ElementaryTypeName","src":"8328:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20853,"mutability":"mutable","name":"spender","nameLocation":"8351:7:62","nodeType":"VariableDeclaration","scope":20897,"src":"8343:15:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20852,"name":"address","nodeType":"ElementaryTypeName","src":"8343:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20855,"mutability":"mutable","name":"amount","nameLocation":"8368:6:62","nodeType":"VariableDeclaration","scope":20897,"src":"8360:14:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20854,"name":"uint256","nodeType":"ElementaryTypeName","src":"8360:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8313:62:62"},"returnParameters":{"id":20857,"nodeType":"ParameterList","parameters":[],"src":"8385:0:62"},"scope":20898,"src":"8289:494:62","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":20899,"src":"757:8028:62","usedErrors":[97,6741,6746,6751,6760,6765,6770],"usedEvents":[20334,20345]}],"src":"46:8740:62"},"id":62}},"contracts":{"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"IAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Simple interface for permissioned calling of external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":\"IAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"IRateProvider":{"abi":[{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getRate()":"679aefce"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"rate\":\"The current token rate\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"}},\"notice\":\"General interface for token exchange rates.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":\"IRateProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"IAuthorizer":{"abi":[{"inputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"canPerform(bytes32,address,address)":"9be2a884"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"success\":\"True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"notice\":\"Interface to the Vault's permission system.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":\"IAuthorizer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol":{"IBasePool":{"abi":[{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256","name":"tokenInIndex","type":"uint256"},{"internalType":"uint256","name":"invariantRatio","type":"uint256"}],"name":"computeBalance","outputs":[{"internalType":"uint256","name":"newBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"enum Rounding","name":"rounding","type":"uint8"}],"name":"computeInvariant","outputs":[{"internalType":"uint256","name":"invariant","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumInvariantRatio","outputs":[{"internalType":"uint256","name":"maximumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"maximumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumInvariantRatio","outputs":[{"internalType":"uint256","name":"minimumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"minimumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"}],"name":"onSwap","outputs":[{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"computeBalance(uint256[],uint256,uint256)":"16a0b3e0","computeInvariant(uint256[],uint8)":"984de9e8","getMaximumInvariantRatio()":"273c1adf","getMaximumSwapFeePercentage()":"654cf15d","getMinimumInvariantRatio()":"b677fa56","getMinimumSwapFeePercentage()":"ce20ece7","onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))":"72c98186"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenInIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"}],\"name\":\"computeBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"enum Rounding\",\"name\":\"rounding\",\"type\":\"uint8\"}],\"name\":\"computeInvariant\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"invariant\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"All pool types should implement this interface. Note that it also requires implementation of: - `ISwapFeePercentageBounds` to specify the minimum and maximum swap fee percentages. - `IUnbalancedLiquidityInvariantRatioBounds` to specify how much the invariant can change during an unbalanced liquidity operation.\",\"kind\":\"dev\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"details\":\"Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath. The pool must round up for the Vault to round in the protocol's favor when calling this function.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"tokenInIndex\":\"The index of the token we're computing the balance for, sorted in token registration order\"},\"returns\":{\"newBalance\":\"The new balance of the selected token, after the operation\"}},\"computeInvariant(uint256[],uint8)\":{\"details\":\"This function computes the invariant based on current balances (and potentially other pool state). The rounding direction must be respected for the Vault to round in the pool's favor when calling this function. If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be returned for both rounding directions. You can think of the invariant as a measure of the \\\"value\\\" of the pool, which is related to the total liquidity (i.e., the \\\"BPT rate\\\" is `invariant` / `totalSupply`). Two critical properties must hold: 1) The invariant should not change due to a swap. In practice, it can *increase* due to swap fees, which effectively add liquidity after the swap - but it should never decrease. 2) The invariant must be \\\"linear\\\"; i.e., increasing the balances proportionally must increase the invariant in the same proportion: inv(a * n, b * n, c * n) = inv(a, b, c) * n Property #1 is required to prevent \\\"round trip\\\" paths that drain value from the pool (and all LP shareholders). Intuitively, an accurate pricing algorithm ensures the user gets an equal value of token out given token in, so the total value should not change. Property #2 is essential for the \\\"fungibility\\\" of LP shares. If it did not hold, then different users depositing the same total value would get a different number of LP shares. In that case, LP shares would not be interchangeable, as they must be in a fair DEX.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"rounding\":\"Rounding direction to consider when computing the invariant\"},\"returns\":{\"invariant\":\"The calculated invariant of the pool, represented as a uint256\"}},\"getMaximumInvariantRatio()\":{\"returns\":{\"maximumInvariantRatio\":\"The maximum invariant ratio for a pool during unbalanced add liquidity\"}},\"getMaximumSwapFeePercentage()\":{\"returns\":{\"maximumSwapFeePercentage\":\"The maximum swap fee percentage for a pool\"}},\"getMinimumInvariantRatio()\":{\"returns\":{\"minimumInvariantRatio\":\"The minimum invariant ratio for a pool during unbalanced remove liquidity\"}},\"getMinimumSwapFeePercentage()\":{\"returns\":{\"minimumSwapFeePercentage\":\"The minimum swap fee percentage for a pool\"}},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"amountCalculatedScaled18\":\"Calculated amount for the swap operation\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"notice\":\"Computes a new token balance, given the invariant growth ratio and all other balances.\"},\"computeInvariant(uint256[],uint8)\":{\"notice\":\"Computes the pool's invariant.\"},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Execute a swap in the pool.\"}},\"notice\":\"Base interface for a Balancer Pool.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":\"IBasePool\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol":{"IERC20MultiTokenErrors":{"abi":[{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"PoolTotalSupplyTooLow","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"PoolTotalSupplyTooLow\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"PoolTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"PoolTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a pool token can't be lower than the absolute minimum.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol\":\"IERC20MultiTokenErrors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol\":{\"keccak256\":\"0x4994bc0f8e5905640876a9411dadb73221ea2b7b1168d22cf5fe44ee1ca16960\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69a0a6ab9c2622426ccfcb7263deb5615e589e98b3b31ea9fcd21595bb42a13d\",\"dweb:/ipfs/QmVW6GVXGTHnVo8MGk7zdLMASR8uN7khPsrEMXwgy4NBrQ\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"IHooks":{"abi":[{"inputs":[],"name":"getHookFlags","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"}],"internalType":"struct HookFlags","name":"hookFlags","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"amountsInScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsInRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsOutRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountInScaled18","type":"uint256"},{"internalType":"uint256","name":"amountOutScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenInBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenOutBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AfterSwapParams","name":"params","type":"tuple"}],"name":"onAfterSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"hookAdjustedAmountCalculatedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"}],"name":"onBeforeSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"}],"name":"onComputeDynamicSwapFeePercentage","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"onRegister","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getHookFlags()":"d77153a7","onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)":"976907cc","onAfterInitialize(uint256[],uint256,bytes)":"38be241d","onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)":"2754888d","onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))":"18b6eb55","onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)":"45421ec7","onBeforeInitialize(uint256[],bytes)":"1c149e28","onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)":"ba5f9f40","onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)":"5211fa77","onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)":"a0e8f5ac","onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))":"0b89f182"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"hookFlags\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsInRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsOutRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"hookAdjustedAmountCalculatedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that they are called in the correct order, and with the correct arguments. To maintain this security, these functions should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`, then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\",\"kind\":\"dev\",\"methods\":{\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"hookFlags\":\"Flags indicating which hooks the contract supports\"}},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsInRaw\":\"New amountsInRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsOutRaw\":\"New amountsOutRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"hookAdjustedAmountCalculatedRaw\":\"New amount calculated, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"maxAmountsInScaled18\":\"Maximum amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with initialization\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"dynamicSwapFeePercentage\":\"Value of the swap fee percentage, as an 18-decimal FP value\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.\",\"params\":{\"factory\":\"Address of the pool factory (contract deploying the pool)\",\"liquidityManagement\":\"Liquidity management flags indicating which functions are enabled\",\"pool\":\"Address of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"},\"returns\":{\"success\":\"True if the hook allowed the registration, false otherwise\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed before adding liquidity.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed before removing liquidity.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook executed when a pool is registered with a non-zero hooks contract.\"}},\"notice\":\"Interface for pool hooks.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":\"IHooks\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol":{"IPoolLiquidity":{"abi":[{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAddLiquidityCustom","outputs":[{"internalType":"uint256[]","name":"amountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"swapFeeAmountsScaled18","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onRemoveLiquidityCustom","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"swapFeeAmountsScaled18","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"onAddLiquidityCustom(address,uint256[],uint256,uint256[],bytes)":"e4c43663","onRemoveLiquidityCustom(address,uint256,uint256[],uint256[],bytes)":"ab68e28c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAddLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onRemoveLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"onAddLiquidityCustom(address,uint256[],uint256,uint256[],bytes)\":{\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"maxAmountsInScaled18\":\"Maximum input amounts, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"router\":\"The address (usually a router contract) that initiated a swap operation on the Vault\",\"userData\":\"Arbitrary data sent with the encoded request\"},\"returns\":{\"amountsInScaled18\":\"Input token amounts, sorted in token registration order\",\"bptAmountOut\":\"Calculated pool token amount to receive\",\"returnData\":\"Arbitrary data with an encoded response from the pool\",\"swapFeeAmountsScaled18\":\"The amount of swap fees charged for each token\"}},\"onRemoveLiquidityCustom(address,uint256,uint256[],uint256[],bytes)\":{\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"router\":\"The address (usually a router contract) that initiated a swap operation on the Vault\",\"userData\":\"Arbitrary data sent with the encoded request\"},\"returns\":{\"amountsOutScaled18\":\"Amount of tokens to receive, sorted in token registration order\",\"bptAmountIn\":\"Calculated pool token amount to burn\",\"returnData\":\"Arbitrary data with an encoded response from the pool\",\"swapFeeAmountsScaled18\":\"The amount of swap fees charged for each token\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"onAddLiquidityCustom(address,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Add liquidity to the pool with a custom hook.\"},\"onRemoveLiquidityCustom(address,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Remove liquidity from the pool with a custom hook.\"}},\"notice\":\"Interface for custom liquidity operations.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol\":\"IPoolLiquidity\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol\":{\"keccak256\":\"0x0cdc0d3817887d0439c3c6f4c811bd37091ef75a855dd8b14c0e8f337e2799dd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4ffd05df90ccdf19a35177fd6c6f78edc61ca2a37df7d0934932a3ad5a96f1e6\",\"dweb:/ipfs/QmaCmKktnMy4XXZn2FaKTjwQBGUhuXKikbxCbPX6K5PPgi\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"IProtocolFeeController":{"abi":[{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"aggregateFeePercentage","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"collectAggregateFees(address)":"8f4ab9ca","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"aggregateFeePercentage\":\"The computed aggregate percentage\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"protocolSwapFeePercentage\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"protocolYieldFeePercentage\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolSwapFeePercentage\":\"The global protocol swap fee percentage\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolYieldFeePercentage\":\"The global protocol yield fee percentage\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Contract that handles protocol and pool creator fees for the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":\"IProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x743734d3d3503d705f0a778c4b0dd61fdb067e89a07481ddbead0654e6808318\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6198f27b2d01f346fdd3d1302e9a6ddd543d2f06afd675d84919c2242bd26d8d\",\"dweb:/ipfs/QmYntQih5MwxxdGnVu2BPVLeqFuJEH761cByAesjwE6JKT\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol":{"ISwapFeePercentageBounds":{"abi":[{"inputs":[],"name":"getMaximumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"maximumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"minimumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getMaximumSwapFeePercentage()":"654cf15d","getMinimumSwapFeePercentage()":"ce20ece7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getMaximumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The Vault does not enforce bounds on swap fee percentages; `IBasePool` implements this interface to ensure that new pool developers think about and set these bounds according to their specific pool type. A minimum swap fee might be necessary to ensure mathematical soundness (e.g., Weighted Pools, which use the power function in the invariant). A maximum swap fee is general protection for users. With no limits at the Vault level, a pool could specify a near 100% swap fee, effectively disabling trading. Though there are some use cases, such as LVR/MEV strategies, where a very high fee makes sense. Note that the Vault does ensure that dynamic and aggregate fees are less than 100% to prevent attempting to allocate more fees than were collected by the operation. The true `MAX_FEE_PERCENTAGE` is defined in VaultTypes.sol, and is the highest value below 100% that satisfies the precision requirements.\",\"kind\":\"dev\",\"methods\":{\"getMaximumSwapFeePercentage()\":{\"returns\":{\"maximumSwapFeePercentage\":\"The maximum swap fee percentage for a pool\"}},\"getMinimumSwapFeePercentage()\":{\"returns\":{\"minimumSwapFeePercentage\":\"The minimum swap fee percentage for a pool\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Return the minimum/maximum swap fee percentages for a pool.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":\"ISwapFeePercentageBounds\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol":{"IUnbalancedLiquidityInvariantRatioBounds":{"abi":[{"inputs":[],"name":"getMaximumInvariantRatio","outputs":[{"internalType":"uint256","name":"maximumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumInvariantRatio","outputs":[{"internalType":"uint256","name":"minimumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getMaximumInvariantRatio()":"273c1adf","getMinimumInvariantRatio()":"b677fa56"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getMaximumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The Vault does not enforce any \\\"baseline\\\" bounds on invariant ratios, since such bounds are highly specific and dependent on the math of each pool type. Instead, the Vault reads invariant ratio bounds from the pools. `IBasePool` implements this interface to ensure that new pool developers think about and set these bounds according to their pool type's math. For instance, Balancer Weighted Pool math involves exponentiation (the `pow` function), which uses natural logarithms and a discrete Taylor series expansion to compute x^y values for the 18-decimal floating point numbers used in all Vault computations. See `LogExpMath` and `WeightedMath` for a derivation of the bounds for these pools.\",\"kind\":\"dev\",\"methods\":{\"getMaximumInvariantRatio()\":{\"returns\":{\"maximumInvariantRatio\":\"The maximum invariant ratio for a pool during unbalanced add liquidity\"}},\"getMinimumInvariantRatio()\":{\"returns\":{\"minimumInvariantRatio\":\"The minimum invariant ratio for a pool during unbalanced remove liquidity\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Return the minimum/maximum invariant ratios allowed during an unbalanced liquidity operation.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":\"IUnbalancedLiquidityInvariantRatioBounds\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"IVault":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","areBuffersPaused()":"55cba7fe","balanceOf(address,address)":"f7888aec","collectAggregateFees(address)":"8f4ab9ca","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getActionId(bytes4)":"851c1bb3","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getNonzeroDeltaCount()":"db817187","getPauseWindowEndTime()":"8a8d123a","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolMinimumTotalSupply()":"d0965a6b","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","getVaultExtension()":"b9a8effa","getVaultPausedState()":"85c8c015","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","sendTo(address,address,uint256)":"ae639329","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","totalSupply(address)":"e4dc2aa4","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The main Vault address.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"}},\"notice\":\"Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":\"IVault\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x743734d3d3503d705f0a778c4b0dd61fdb067e89a07481ddbead0654e6808318\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6198f27b2d01f346fdd3d1302e9a6ddd543d2f06afd675d84919c2242bd26d8d\",\"dweb:/ipfs/QmYntQih5MwxxdGnVu2BPVLeqFuJEH761cByAesjwE6JKT\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"IVaultAdmin":{"abi":[{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","areBuffersPaused()":"55cba7fe","collectAggregateFees(address)":"8f4ab9ca","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getPauseWindowEndTime()":"8a8d123a","getPoolMinimumTotalSupply()":"d0965a6b","getVaultPausedState()":"85c8c015","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations, as two delegate calls add gas to each call. Most of the permissioned calls are here.\",\"kind\":\"dev\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultAdmin` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":\"IVaultAdmin\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x743734d3d3503d705f0a778c4b0dd61fdb067e89a07481ddbead0654e6808318\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6198f27b2d01f346fdd3d1302e9a6ddd543d2f06afd675d84919c2242bd26d8d\",\"dweb:/ipfs/QmYntQih5MwxxdGnVu2BPVLeqFuJEH761cByAesjwE6JKT\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"IVaultErrors":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Errors are declared inside an interface (namespace) to improve DX with Typechain.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":\"IVaultErrors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"IVaultEvents":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Events are declared inside an interface (namespace) to improve DX with Typechain.\",\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":\"IVaultEvents\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x743734d3d3503d705f0a778c4b0dd61fdb067e89a07481ddbead0654e6808318\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6198f27b2d01f346fdd3d1302e9a6ddd543d2f06afd675d84919c2242bd26d8d\",\"dweb:/ipfs/QmYntQih5MwxxdGnVu2BPVLeqFuJEH761cByAesjwE6JKT\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"IVaultExtension":{"abi":[{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","balanceOf(address,address)":"f7888aec","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getNonzeroDeltaCount()":"db817187","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","totalSupply(address)":"e4dc2aa4","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultExtension` handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and liquidity operations.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultExtension` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":\"IVaultExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x743734d3d3503d705f0a778c4b0dd61fdb067e89a07481ddbead0654e6808318\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6198f27b2d01f346fdd3d1302e9a6ddd543d2f06afd675d84919c2242bd26d8d\",\"dweb:/ipfs/QmYntQih5MwxxdGnVu2BPVLeqFuJEH761cByAesjwE6JKT\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"IVaultMain":{"abi":[{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getVaultExtension()":"b9a8effa","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","sendTo(address,address,uint256)":"ae639329","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These are generally \\\"critical path\\\" functions (swap, add/remove liquidity) that are in the main contract for technical or performance reasons.\",\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"}},\"notice\":\"Interface for functions defined on the main Vault contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":\"IVaultMain\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol":{"BufferHelpers":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220f7b76207315161aff588d014e28c60ee70296cc6d485d5dd31b695237a8e6ee464736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xB7 PUSH3 0x73151 PUSH2 0xAFF5 DUP9 0xD0 EQ 0xE2 DUP13 PUSH1 0xEE PUSH17 0x296CC6D485D5DD31B695237A8E6EE46473 PUSH16 0x6C634300081A00330000000000000000 ","sourceMap":"289:4401:17:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220f7b76207315161aff588d014e28c60ee70296cc6d485d5dd31b695237a8e6ee464736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xB7 PUSH3 0x73151 PUSH2 0xAFF5 DUP9 0xD0 EQ 0xE2 DUP13 PUSH1 0xEE PUSH17 0x296CC6D485D5DD31B695237A8E6EE46473 PUSH16 0x6C634300081A00330000000000000000 ","sourceMap":"289:4401:17:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol\":\"BufferHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol\":{\"keccak256\":\"0x528ef10b3f14bb2b1d64043ec8c7d732a502147fe9d4e4bd3339f57e40fe3ce7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9a71bd94d0c5ba098b04b2bc65a7842c1bb3b96d91dd6a95756efc468cd6dbc5\",\"dweb:/ipfs/QmPrHPMmrdpJjvny8UjWbWFJo5nWpBtmjxWGbX1zDbNx6Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"CastingHelpers":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220c09c3d21301104fd17a78e960aa0f908ed6b3fa31b9fffd5e835ce06a878d18664736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 SWAP13 RETURNDATASIZE 0x21 ADDRESS GT DIV REVERT OR 0xA7 DUP15 SWAP7 EXP LOG0 0xF9 ADDMOD 0xED PUSH12 0x3FA31B9FFFD5E835CE06A878 0xD1 DUP7 PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"217:637:18:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220c09c3d21301104fd17a78e960aa0f908ed6b3fa31b9fffd5e835ce06a878d18664736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 SWAP13 RETURNDATASIZE 0x21 ADDRESS GT DIV REVERT OR 0xA7 DUP15 SWAP7 EXP LOG0 0xF9 ADDMOD 0xED PUSH12 0x3FA31B9FFFD5E835CE06A878 0xD1 DUP7 PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"217:637:18:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library of helper functions related to typecasting arrays.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":\"CastingHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol":{"EVMCallModeHelpers":{"abi":[{"inputs":[],"name":"NotStaticCall","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122006ec0a351218f129aef09853927497f08f92dcc5a966514f71ce8560df94132664736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MOD 0xEC EXP CALLDATALOAD SLT XOR CALL 0x29 0xAE CREATE SWAP9 MSTORE8 SWAP3 PUSH21 0x97F08F92DCC5A966514F71CE8560DF94132664736F PUSH13 0x634300081A0033000000000000 ","sourceMap":"173:775:19:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122006ec0a351218f129aef09853927497f08f92dcc5a966514f71ce8560df94132664736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MOD 0xEC EXP CALLDATALOAD SLT XOR CALL 0x29 0xAE CREATE SWAP9 MSTORE8 SWAP3 PUSH21 0x97F08F92DCC5A966514F71CE8560DF94132664736F PUSH13 0x634300081A0033000000000000 ","sourceMap":"173:775:19:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"NotStaticCall\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"NotStaticCall()\":[{\"notice\":\"A state-changing transaction was initiated in a context that only allows static calls.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Library used to check whether the current operation was initiated through a static call.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\":\"EVMCallModeHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\":{\"keccak256\":\"0x9dc4c8d6dd5dbc108dd377dab73a3e6c84e8c104713d2afb3cba8acc9ddf4c63\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2ef7c65fe356144f8cd720109b818e1ec6cc495ca35b55ca273ef9db45c6ae00\",\"dweb:/ipfs/QmREJgnfgoqemnYKvfYjTFJBAMsV9VAKA5AY5Woprpc1vs\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"InputHelpers":{"abi":[{"inputs":[],"name":"AllZeroInputs","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"MultipleNonZeroInputs","type":"error"},{"inputs":[],"name":"TokensNotSorted","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220e7c134396ea90e946ca35778fc91868fb8b082628d53a804763c38c43083e40764736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE7 0xC1 CALLVALUE CODECOPY PUSH15 0xA90E946CA35778FC91868FB8B08262 DUP14 MSTORE8 0xA8 DIV PUSH23 0x3C38C43083E40764736F6C634300081A00330000000000 ","sourceMap":"202:3763:20:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220e7c134396ea90e946ca35778fc91868fb8b082628d53a804763c38c43083e40764736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE7 0xC1 CALLVALUE CODECOPY PUSH15 0xA90E946CA35778FC91868FB8B08262 DUP14 MSTORE8 0xA8 DIV PUSH23 0x3C38C43083E40764736F6C634300081A00330000000000 ","sourceMap":"202:3763:20:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AllZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MultipleNonZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokensNotSorted\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AllZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have one non-zero value, corresponding to the token being added or removed. This error results if all entries are zero.\"}],\"MultipleNonZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value, corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\"}],\"TokensNotSorted()\":[{\"details\":\"Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AllZeroInputs()\":[{\"notice\":\"No valid input was given for a single token operation.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"MultipleNonZeroInputs()\":[{\"notice\":\"More than one non-zero value was given for a single token operation.\"}],\"TokensNotSorted()\":[{\"notice\":\"The tokens supplied to an array argument were not sorted in numerical order.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":\"InputHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe54f620633826cf7842c91606512a0d20414e5ce77a0b0cf5d44d10179cd7f6a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e86b797bc566f3e92392220564e457a9290e28e6af9566ec6d71bc9f3fc1548c\",\"dweb:/ipfs/QmewUN2ZTCQxuv8AqWfKNMn7joCtMmXg4wyAK3QqPtjPAw\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol":{"PackedTokenBalance":{"abi":[{"inputs":[],"name":"BalanceOverflow","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122083359f7ed3ce98a761ef54b7826a73fa061cbe49d13276bd89a49ebe8feb5b1864736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP4 CALLDATALOAD SWAP16 PUSH31 0xD3CE98A761EF54B7826A73FA061CBE49D13276BD89A49EBE8FEB5B1864736F PUSH13 0x634300081A0033000000000000 ","sourceMap":"982:2131:21:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122083359f7ed3ce98a761ef54b7826a73fa061cbe49d13276bd89a49ebe8feb5b1864736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP4 CALLDATALOAD SWAP16 PUSH31 0xD3CE98A761EF54B7826A73FA061CBE49D13276BD89A49EBE8FEB5B1864736F PUSH13 0x634300081A0033000000000000 ","sourceMap":"982:2131:21:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BalanceOverflow\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"We could use a Solidity struct to pack balance values together in a single storage slot, but unfortunately Solidity only allows for structs to live in either storage, calldata or memory. Because a memory struct still takes up a slot in the stack (to store its memory location), and because the entire balance fits in a single stack slot (two 128 bit values), using memory is strictly less gas performant. Therefore, we do manual packing and unpacking. We could also use custom types now, but given the simplicity here, and the existing EnumerableMap type, it seemed easier to leave it as a bytes32.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"BalanceOverflow()\":[{\"notice\":\"One of the balances is above the maximum value that can be stored.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"This library represents a data structure for packing a token's current raw and derived balances. A derived balance can be the \\\"last\\\" live balance scaled18 of the raw token, or the balance of the wrapped version of the token in a vault buffer, among others.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":\"PackedTokenBalance\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol":{"ScalingHelpers":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122073ece27ebfd274865663805691232732df94d3a82ff56b5b7669daf0cb917d4864736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH20 0xECE27EBFD274865663805691232732DF94D3A82F CREATE2 PUSH12 0x5B7669DAF0CB917D4864736F PUSH13 0x634300081A0033000000000000 ","sourceMap":"938:9455:22:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122073ece27ebfd274865663805691232732df94d3a82ff56b5b7669daf0cb917d4864736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH20 0xECE27EBFD274865663805691232732DF94D3A82F CREATE2 PUSH12 0x5B7669DAF0CB917D4864736F PUSH13 0x634300081A0033000000000000 ","sourceMap":"938:9455:22:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"To simplify Pool logic, all token balances and amounts are normalized to behave as if the token had 18 decimals. When comparing DAI (18 decimals) and USDC (6 decimals), 1 USDC and 1 DAI would both be represented as 1e18. This allows us to not consider differences in token decimals in the internal Pool math, simplifying it greatly. The Vault does not support tokens with more than 18 decimals (see `_MAX_TOKEN_DECIMALS` in `VaultStorage`), or tokens that do not implement `IERC20Metadata.decimals`. These helpers can also be used to scale amounts by other 18-decimal floating point values, such as rates.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Helper functions to apply/undo token decimal and rate adjustments, rounding in the direction indicated.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\":\"ScalingHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe54f620633826cf7842c91606512a0d20414e5ce77a0b0cf5d44d10179cd7f6a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e86b797bc566f3e92392220564e457a9290e28e6af9566ec6d71bc9f3fc1548c\",\"dweb:/ipfs/QmewUN2ZTCQxuv8AqWfKNMn7joCtMmXg4wyAK3QqPtjPAw\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\":{\"keccak256\":\"0xf98fec19a1516432d7540f0cde2e967b627afbc5a361835766d57be8ba10b4e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://94b49929bff77d1fdaab8916350356fc9816317beef4f33c3af0e6a40493d01c\",\"dweb:/ipfs/QmPPhtmpPvgedbtQaJZz7JQCmiGKKTHmfh7EGhJS1yUCia\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol":{"TransientStorageHelpers":{"abi":[{"inputs":[],"name":"TransientIndexOutOfBounds","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122083442f1b405298b8c3958b1835f848dad86d8e59ccb947887e3b8cf6b7c5479d64736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP4 PREVRANDAO 0x2F SHL BLOCKHASH MSTORE SWAP9 0xB8 0xC3 SWAP6 DUP12 XOR CALLDATALOAD 0xF8 BASEFEE 0xDA 0xD8 PUSH14 0x8E59CCB947887E3B8CF6B7C5479D PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"991:5950:23:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122083442f1b405298b8c3958b1835f848dad86d8e59ccb947887e3b8cf6b7c5479d64736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP4 PREVRANDAO 0x2F SHL BLOCKHASH MSTORE SWAP9 0xB8 0xC3 SWAP6 DUP12 XOR CALLDATALOAD 0xF8 BASEFEE 0xDA 0xD8 PUSH14 0x8E59CCB947887E3B8CF6B7C5479D PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"991:5950:23:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"TransientIndexOutOfBounds\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"This is temporary, based on Open Zeppelin's partially released library. When the final version is published, we should be able to remove our copies and import directly from OZ. When Solidity catches up and puts direct support for transient storage in the language, we should be able to get rid of this altogether. This only works on networks where EIP-1153 is supported.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"TransientIndexOutOfBounds()\":[{\"notice\":\"An index is out of bounds on an array operation (e.g., at).\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Helper functions to read and write values from transient storage, including support for arrays and mappings.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":\"TransientStorageHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol":{"WordCodec":{"abi":[{"inputs":[],"name":"CodecOverflow","type":"error"},{"inputs":[],"name":"OutOfBounds","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220d3bb261d45fac5f61508a4fd9699c7c4e88336adcab38785b8439af6b50e8bfb64736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 0xBB 0x26 SAR GASLIMIT STATICCALL 0xC5 0xF6 ISZERO ADDMOD LOG4 REVERT SWAP7 SWAP10 0xC7 0xC4 0xE8 DUP4 CALLDATASIZE 0xAD 0xCA 0xB3 DUP8 DUP6 0xB8 NUMBER SWAP11 0xF6 0xB5 0xE DUP12 0xFB PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"1408:9257:24:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220d3bb261d45fac5f61508a4fd9699c7c4e88336adcab38785b8439af6b50e8bfb64736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 0xBB 0x26 SAR GASLIMIT STATICCALL 0xC5 0xF6 ISZERO ADDMOD LOG4 REVERT SWAP7 SWAP10 0xC7 0xC4 0xE8 DUP4 CALLDATASIZE 0xAD 0xCA 0xB3 DUP8 DUP6 0xB8 NUMBER SWAP11 0xF6 0xB5 0xE DUP12 0xFB PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"1408:9257:24:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"CodecOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBounds\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Typically used to pack multiple values in a single slot, saving gas by performing fewer storage accesses. Each value is defined by its size and the least significant bit in the word, also known as offset. For example, two 128 bit values may be encoded in a word by assigning one an offset of 0, and the other an offset of 128. We could use Solidity structs to pack values together in a single storage slot instead of relying on a custom and error-prone library, but unfortunately Solidity only allows for structs to live in either storage, calldata or memory. Because a memory struct uses not just memory but also a slot in the stack (to store its memory location), using memory for word-sized values (i.e. of 256 bits or less) is strictly less gas performant, and doesn't even prevent stack-too-deep issues. This is compounded by the fact that Balancer contracts typically are memory- intensive, and the cost of accessing memory increases quadratically with the number of allocated words. Manual packing and unpacking is therefore the preferred approach.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"CodecOverflow()\":[{\"notice\":\"Function called with an invalid value.\"}],\"OutOfBounds()\":[{\"notice\":\"Function called with an invalid bitLength or offset.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for encoding and decoding values stored inside a 256 bit word.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":\"WordCodec\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"FixedPoint":{"abi":[{"inputs":[],"name":"ZeroDivision","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220de17559621249ddeb5280c5d4ee41fd1c29ded7a7fa9ae57df27ea2e7822e02a64736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDE OR SSTORE SWAP7 0x21 0x24 SWAP14 0xDE 0xB5 0x28 0xC TSTORE 0x4E 0xE4 0x1F 0xD1 0xC2 SWAP14 0xED PUSH27 0x7FA9AE57DF27EA2E7822E02A64736F6C634300081A003300000000 ","sourceMap":"239:5688:25:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220de17559621249ddeb5280c5d4ee41fd1c29ded7a7fa9ae57df27ea2e7822e02a64736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDE OR SSTORE SWAP7 0x21 0x24 SWAP14 0xDE 0xB5 0x28 0xC TSTORE 0x4E 0xE4 0x1F 0xD1 0xC2 SWAP14 0xED PUSH27 0x7FA9AE57DF27EA2E7822E02A64736F6C634300081A003300000000 ","sourceMap":"239:5688:25:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":\"FixedPoint\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"LogExpMath":{"abi":[{"inputs":[],"name":"BaseOutOfBounds","type":"error"},{"inputs":[],"name":"ExponentOutOfBounds","type":"error"},{"inputs":[],"name":"InvalidExponent","type":"error"},{"inputs":[],"name":"OutOfBounds","type":"error"},{"inputs":[],"name":"ProductOutOfBounds","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212202f0805e43698dbd1bce27c765771b632cd98790222de399bda5d88e3b3a0271c64736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2F ADDMOD SDIV 0xE4 CALLDATASIZE SWAP9 0xDB 0xD1 0xBC 0xE2 PUSH29 0x765771B632CD98790222DE399BDA5D88E3B3A0271C64736F6C63430008 BYTE STOP CALLER ","sourceMap":"595:21889:26:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212202f0805e43698dbd1bce27c765771b632cd98790222de399bda5d88e3b3a0271c64736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2F ADDMOD SDIV 0xE4 CALLDATASIZE SWAP9 0xDB 0xD1 0xBC 0xE2 PUSH29 0x765771B632CD98790222DE399BDA5D88E3B3A0271C64736F6C63430008 BYTE STOP CALLER ","sourceMap":"595:21889:26:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BaseOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExponentOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExponent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProductOutOfBounds\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Fernando Martinelli - @fernandomartinelliSergio Yuhjtman - @sergioyuhjtmanDaniel Fernandez - @dmf7z\",\"details\":\"Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument). Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural exponentiation and logarithm (where the base is Euler's number). All math operations are unchecked in order to save gas.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"BaseOutOfBounds()\":[{\"notice\":\"This error is thrown when a base is not within an acceptable range.\"}],\"ExponentOutOfBounds()\":[{\"notice\":\"This error is thrown when a exponent is not within an acceptable range.\"}],\"InvalidExponent()\":[{\"notice\":\"This error is thrown when an exponent used in the exp function is not within an acceptable range.\"}],\"OutOfBounds()\":[{\"notice\":\"This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\"}],\"ProductOutOfBounds()\":[{\"notice\":\"This error is thrown when the exponent * ln(base) is not within an acceptable range.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":\"LogExpMath\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"ReentrancyGuardTransient":{"abi":[{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"NOTE: This variant only works on networks where EIP-1153 is available.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Variant of {ReentrancyGuard} that uses transient storage.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":\"ReentrancyGuardTransient\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol":{"SlotDerivation":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220601996351ab7e61998b1158fe51bc17fcdcf6d09c5e245156a663cf4ea9c037e64736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH1 0x19 SWAP7 CALLDATALOAD BYTE 0xB7 0xE6 NOT SWAP9 0xB1 ISZERO DUP16 0xE5 SHL 0xC1 PUSH32 0xCDCF6D09C5E245156A663CF4EA9C037E64736F6C634300081A00330000000000 ","sourceMap":"1652:3778:28:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220601996351ab7e61998b1158fe51bc17fcdcf6d09c5e245156a663cf4ea9c037e64736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH1 0x19 SWAP7 CALLDATALOAD BYTE 0xB7 0xE6 NOT SWAP9 0xB1 ISZERO DUP16 0xE5 SHL 0xC1 PUSH32 0xCDCF6D09C5E245156A663CF4EA9C037E64736F6C634300081A00330000000000 ","sourceMap":"1652:3778:28:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"The derivation method for array and mapping matches the storage layout used by the solidity language/compiler. See https://docs.soliditylang.org/en/v0.8.20/internals/layout_in_storage.html#mappings-and-dynamic-arrays[Solidity docs for mappings and dynamic arrays.]. Example usage: ```solidity contract Example { // Add the library methods using StorageSlot for bytes32; using SlotDerivation for bytes32; // Declare a namespace string private constant _NAMESPACE = \\\"\\\" // eg. OpenZeppelin.Slot function setValueInNamespace(uint256 key, address newValue) internal { _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value = newValue; } function getValueInNamespace(uint256 key) internal view returns (address) { return _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value; } } ``` TIP: Consider using this library along with {StorageSlot}. NOTE: This library provides a way to manipulate storage locations in a non-standard way. Tooling for checking upgrade safety will ignore the slots accessed through this library.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for computing storage (and transient storage) locations from namespaces and deriving slots corresponding to standard patterns.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":\"SlotDerivation\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"StorageSlotExtension":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212202cfcfed1ae9f829725d481e74f01518c269702176750e0fc42c330bc693cd46a64736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2C 0xFC INVALID 0xD1 0xAE SWAP16 DUP3 SWAP8 0x25 0xD4 DUP2 0xE7 0x4F ADD MLOAD DUP13 0x26 SWAP8 MUL OR PUSH8 0x50E0FC42C330BC69 EXTCODECOPY 0xD4 PUSH11 0x64736F6C634300081A0033 ","sourceMap":"278:4371:29:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212202cfcfed1ae9f829725d481e74f01518c269702176750e0fc42c330bc693cd46a64736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2C 0xFC INVALID 0xD1 0xAE SWAP16 DUP3 SWAP8 0x25 0xD4 DUP2 0xE7 0x4F ADD MLOAD DUP13 0x26 SWAP8 MUL OR PUSH8 0x50E0FC42C330BC69 EXTCODECOPY 0xD4 PUSH11 0x64736F6C634300081A0033 ","sourceMap":"278:4371:29:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"TIP: Consider using this library along with {SlotDerivation}.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":\"StorageSlotExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"IERC4626":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"assetTokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"totalManagedAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","asset()":"38d52e0f","balanceOf(address)":"70a08231","convertToAssets(uint256)":"07a2d13a","convertToShares(uint256)":"c6e6f592","decimals()":"313ce567","deposit(uint256,address)":"6e553f65","maxDeposit(address)":"402d267d","maxMint(address)":"c63d75b6","maxRedeem(address)":"d905777e","maxWithdraw(address)":"ce96cb77","mint(uint256,address)":"94bf804d","name()":"06fdde03","previewDeposit(uint256)":"ef8b30f7","previewMint(uint256)":"b3d7f6b9","previewRedeem(uint256)":"4cdad506","previewWithdraw(uint256)":"0a28a477","redeem(uint256,address,address)":"ba087652","symbol()":"95d89b41","totalAssets()":"01e1d114","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256,address,address)":"b460af94"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"assetTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"convertToAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"convertToShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalManagedAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC4626 \\\"Tokenized Vault Standard\\\", as defined in https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"asset()\":{\"details\":\"Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"convertToAssets(uint256)\":{\"details\":\"Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"convertToShares(uint256)\":{\"details\":\"Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"deposit(uint256,address)\":{\"details\":\"Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"maxDeposit(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert.\"},\"maxMint(address)\":{\"details\":\"Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert.\"},\"maxRedeem(address)\":{\"details\":\"Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert.\"},\"maxWithdraw(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert.\"},\"mint(uint256,address)\":{\"details\":\"Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"previewDeposit(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"previewMint(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting.\"},\"previewRedeem(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming.\"},\"previewWithdraw(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if called in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"redeem(uint256,address,address)\":{\"details\":\"Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalAssets()\":{\"details\":\"Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"withdraw(uint256,address,address)\":{\"details\":\"Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":\"IERC4626\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC5267.sol":{"IERC5267":{"abi":[{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"eip712Domain()":"84b0196e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"}},\"kind\":\"dev\",\"methods\":{\"eip712Domain()\":{\"details\":\"returns the fields and values that describe the domain separator used by this contract for EIP-712 signature.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC5267.sol\":\"IERC5267\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"IERC1155Errors":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC1155InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC1155InvalidApprover","type":"error"},{"inputs":[{"internalType":"uint256","name":"idsLength","type":"uint256"},{"internalType":"uint256","name":"valuesLength","type":"uint256"}],"name":"ERC1155InvalidArrayLength","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC1155InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC1155InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC1155InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC1155MissingApprovalForAll","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC1155InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valuesLength\",\"type\":\"uint256\"}],\"name\":\"ERC1155InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC1155MissingApprovalForAll\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC1155 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.\",\"errors\":{\"ERC1155InsufficientBalance(address,uint256,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC1155InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC1155InvalidArrayLength(uint256,uint256)\":[{\"details\":\"Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. Used in batch transfers.\",\"params\":{\"idsLength\":\"Length of the array of token identifiers\",\"valuesLength\":\"Length of the array of token amounts\"}}],\"ERC1155InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC1155InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC1155InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC1155MissingApprovalForAll(address,address)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"owner\":\"Address of the current owner of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC1155Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]}},\"version\":1}"},"IERC20Errors":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC20 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC20Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]}},\"version\":1}"},"IERC721Errors":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721IncorrectOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721InsufficientApproval","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC721InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC721InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721InvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC721InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC721InvalidSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC721 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.\",\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC721Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]}},\"version\":1}"}},"@openzeppelin/contracts/proxy/Proxy.sol":{"Proxy":{"abi":[{"stateMutability":"payable","type":"fallback"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"This abstract contract provides a fallback function that delegates all calls to another contract using the EVM instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to be specified by overriding the virtual {_implementation} function. Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a different contract through the {_delegate} function. The success and return data of the delegated call will be returned back to the caller of the proxy.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/Proxy.sol\":\"Proxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"IERC20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"IERC20Metadata":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC20 standard.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"IERC20Permit":{"abi":[{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all. ==== Security Considerations There are two important considerations concerning the use of `permit`. The first is that a valid permit signature expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be considered as an intention to spend the allowance in any specific way. The second is that because permits have built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be generally recommended is: ```solidity function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public { try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {} doThing(..., value); } function doThing(..., uint256 value) public { token.safeTransferFrom(msg.sender, address(this), value); ... } ``` Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also {SafeERC20-safeTransferFrom}). Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so contracts should have entry points that don't rely on permit.\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":\"IERC20Permit\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"SafeERC20":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"currentAllowance","type":"uint256"},{"internalType":"uint256","name":"requestedDecrease","type":"uint256"}],"name":"SafeERC20FailedDecreaseAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220a9b786b3cfad30e9577f89c2255634127c86204cc11999fb7705a8e3520dc6be64736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA9 0xB7 DUP7 0xB3 0xCF 0xAD ADDRESS 0xE9 JUMPI PUSH32 0x89C2255634127C86204CC11999FB7705A8E3520DC6BE64736F6C634300081A00 CALLER ","sourceMap":"751:5018:37:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220a9b786b3cfad30e9577f89c2255634127c86204cc11999fb7705a8e3520dc6be64736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA9 0xB7 DUP7 0xB3 0xCF 0xAD ADDRESS 0xE9 JUMPI PUSH32 0x89C2255634127C86204CC11999FB7705A8E3520DC6BE64736F6C634300081A00 CALLER ","sourceMap":"751:5018:37:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentAllowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestedDecrease\",\"type\":\"uint256\"}],\"name\":\"SafeERC20FailedDecreaseAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers around ERC20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"errors\":{\"SafeERC20FailedDecreaseAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failed `decreaseAllowance` request.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Address.sol":{"Address":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212201c9716041383ad091b166a9c644a7a157664ca1d9a8bd7cf1989948edbb89f0964736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHR SWAP8 AND DIV SGT DUP4 0xAD MULMOD SHL AND PUSH11 0x9C644A7A157664CA1D9A8B 0xD7 0xCF NOT DUP10 SWAP5 DUP15 0xDB 0xB8 SWAP16 MULMOD PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"195:6066:38:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212201c9716041383ad091b166a9c644a7a157664ca1d9a8bd7cf1989948edbb89f0964736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHR SWAP8 AND DIV SGT DUP4 0xAD MULMOD SHL AND PUSH11 0x9C644A7A157664CA1D9A8B 0xD7 0xCF NOT DUP10 SWAP5 DUP15 0xDB 0xB8 SWAP16 MULMOD PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"195:6066:38:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Nonces.sol":{"Nonces":{"abi":[{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"name":"InvalidAccountNonce","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"nonces(address)":"7ecebe00"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Provides tracking nonces for addresses. Nonces will only increment.\",\"errors\":{\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}]},\"kind\":\"dev\",\"methods\":{\"nonces(address)\":{\"details\":\"Returns the next unused nonce for an address.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Nonces.sol\":\"Nonces\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/ShortStrings.sol":{"ShortStrings":{"abi":[{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220623a63fa30ad336e02cb593896e34b6a51b9d5408f55a91fd6fbec8880f8d6b264736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH3 0x3A63FA ADDRESS 0xAD CALLER PUSH15 0x2CB593896E34B6A51B9D5408F55A9 0x1F 0xD6 0xFB 0xEC DUP9 DUP1 0xF8 0xD6 0xB2 PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"1255:3053:40:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220623a63fa30ad336e02cb593896e34b6a51b9d5408f55a91fd6fbec8880f8d6b264736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH3 0x3A63FA ADDRESS 0xAD CALLER PUSH15 0x2CB593896E34B6A51B9D5408F55A9 0x1F 0xD6 0xFB 0xEC DUP9 DUP1 0xF8 0xD6 0xB2 PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"1255:3053:40:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"This library provides functions to convert short memory strings into a `ShortString` type that can be used as an immutable variable. Strings of arbitrary length can be optimized using this library if they are short enough (up to 31 bytes) by packing them with their length (1 byte) in a single EVM word (32 bytes). Additionally, a fallback mechanism can be used for every other case. Usage example: ```solidity contract Named { using ShortStrings for *; ShortString private immutable _name; string private _nameFallback; constructor(string memory contractName) { _name = contractName.toShortStringWithFallback(_nameFallback); } function name() external view returns (string memory) { return _name.toStringWithFallback(_nameFallback); } } ```\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/ShortStrings.sol\":\"ShortStrings\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/StorageSlot.sol":{"StorageSlot":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122007d99e5db8fb7049fedd76141835d85f72b17a8f5aa652b7c1e29ef03f7d95a664736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SMOD 0xD9 SWAP15 TSTORE 0xB8 0xFB PUSH17 0x49FEDD76141835D85F72B17A8F5AA652B7 0xC1 0xE2 SWAP15 CREATE EXTCODEHASH PUSH30 0x95A664736F6C634300081A00330000000000000000000000000000000000 ","sourceMap":"1245:2685:41:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122007d99e5db8fb7049fedd76141835d85f72b17a8f5aa652b7c1e29ef03f7d95a664736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SMOD 0xD9 SWAP15 TSTORE 0xB8 0xFB PUSH17 0x49FEDD76141835D85F72B17A8F5AA652B7 0xC1 0xE2 SWAP15 CREATE EXTCODEHASH PUSH30 0x95A664736F6C634300081A00330000000000000000000000000000000000 ","sourceMap":"1245:2685:41:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC1967 implementation slot: ```solidity contract ERC1967 { bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; function _getImplementation() internal view returns (address) { return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; } function _setImplementation(address newImplementation) internal { require(newImplementation.code.length > 0); StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } } ```\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":\"StorageSlot\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Strings.sol":{"Strings":{"abi":[{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"StringsInsufficientHexLength","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220885f1bab91b7bdf5daf34e23dffb1e265783e6bff72f775de274f92d023ae59264736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP9 PUSH0 SHL 0xAB SWAP2 0xB7 0xBD CREATE2 0xDA RETURN 0x4E 0x23 0xDF 0xFB 0x1E 0x26 JUMPI DUP4 0xE6 0xBF 0xF7 0x2F PUSH24 0x5DE274F92D023AE59264736F6C634300081A003300000000 ","sourceMap":"251:2847:42:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220885f1bab91b7bdf5daf34e23dffb1e265783e6bff72f775de274f92d023ae59264736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP9 PUSH0 SHL 0xAB SWAP2 0xB7 0xBD CREATE2 0xDA RETURN 0x4E 0x23 0xDF 0xFB 0x1E 0x26 JUMPI DUP4 0xE6 0xBF 0xF7 0x2F PUSH24 0x5DE274F92D023AE59264736F6C634300081A003300000000 ","sourceMap":"251:2847:42:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"StringsInsufficientHexLength\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"String operations.\",\"errors\":{\"StringsInsufficientHexLength(uint256,uint256)\":[{\"details\":\"The `value` string doesn't fit in the specified `length`.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Strings.sol\":\"Strings\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/cryptography/ECDSA.sol":{"ECDSA":{"abi":[{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220981ff0779836239bd18b2e2af6442b1958a28636e5b624f9942d9d29edc06c2764736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP9 0x1F CREATE PUSH24 0x9836239BD18B2E2AF6442B1958A28636E5B624F9942D9D29 0xED 0xC0 PUSH13 0x2764736F6C634300081A003300 ","sourceMap":"344:7386:43:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220981ff0779836239bd18b2e2af6442b1958a28636e5b624f9942d9d29edc06c2764736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP9 0x1F CREATE PUSH24 0x9836239BD18B2E2AF6442B1958A28636E5B624F9942D9D29 0xED 0xC0 PUSH13 0x2764736F6C634300081A003300 ","sourceMap":"344:7386:43:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Elliptic Curve Digital Signature Algorithm (ECDSA) operations. These functions can be used to verify that a message was signed by the holder of the private keys of a given address.\",\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":\"ECDSA\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/cryptography/EIP712.sol":{"EIP712":{"abi":[{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","type":"error"},{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"eip712Domain()":"84b0196e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"state-variable-immutable\",\"details\":\"https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data. The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to produce the hash of their typed data using a combination of `abi.encode` and `keccak256`. This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA ({_hashTypedDataV4}). The implementation of the domain separator was designed to be as efficient as possible while still properly updating the chain id to protect against replay attacks on an eventual fork of the chain. NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask]. NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\",\"events\":{\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the domain separator and parameter caches. The meaning of `name` and `version` is specified in https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]: - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol. - `version`: the current major version of the signing domain. NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart contract upgrade].\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":\"EIP712\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol":{"MessageHashUtils":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212206771f816d4553d55d28911f396dae873ad20e38bcaf7b7ad3cd2ac4603bedc4e64736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH8 0x71F816D4553D55D2 DUP10 GT RETURN SWAP7 0xDA 0xE8 PUSH20 0xAD20E38BCAF7B7AD3CD2AC4603BEDC4E64736F6C PUSH4 0x4300081A STOP CALLER ","sourceMap":"521:3235:45:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212206771f816d4553d55d28911f396dae873ad20e38bcaf7b7ad3cd2ac4603bedc4e64736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH8 0x71F816D4553D55D2 DUP10 GT RETURN SWAP7 0xDA 0xE8 PUSH20 0xAD20E38BCAF7B7AD3CD2AC4603BEDC4E64736F6C PUSH4 0x4300081A STOP CALLER ","sourceMap":"521:3235:45:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing. The library provides methods for generating a hash of a message that conforms to the https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712] specifications.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":\"MessageHashUtils\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/introspection/ERC165.sol":{"ERC165":{"abi":[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC165} interface. Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check for the additional interface id that will be supported. For example: ```solidity function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); } ```\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":\"ERC165\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"IERC165":{"abi":[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[EIP]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/math/Math.sol":{"Math":{"abi":[{"inputs":[],"name":"MathOverflowedMulDiv","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220094488d578ee8adcaedba7b590b21c6f168d7610b212a9dbdf986d632c569fbf64736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MULMOD PREVRANDAO DUP9 0xD5 PUSH25 0xEE8ADCAEDBA7B590B21C6F168D7610B212A9DBDF986D632C56 SWAP16 0xBF PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"203:14914:48:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220094488d578ee8adcaedba7b590b21c6f168d7610b212a9dbdf986d632c569fbf64736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MULMOD PREVRANDAO DUP9 0xD5 PUSH25 0xEE8ADCAEDBA7B590B21C6F168D7610B212A9DBDF986D632C56 SWAP16 0xBF PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"203:14914:48:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"MathOverflowedMulDiv\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard math utilities missing in the Solidity language.\",\"errors\":{\"MathOverflowedMulDiv()\":[{\"details\":\"Muldiv operation overflow.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/Math.sol\":\"Math\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"SafeCast":{"abi":[{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntDowncast","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212207ac690adc8c2cd984d01ff2a6fb4ebd5fc1007d061e78fc11b65539812f4988d64736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH27 0xC690ADC8C2CD984D01FF2A6FB4EBD5FC1007D061E78FC11B655398 SLT DELEGATECALL SWAP9 DUP14 PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"764:33927:49:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212207ac690adc8c2cd984d01ff2a6fb4ebd5fc1007d061e78fc11b65539812f4988d64736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH27 0xC690ADC8C2CD984D01FF2A6FB4EBD5FC1007D061E78FC11B655398 SLT DELEGATECALL SWAP9 DUP14 PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"764:33927:49:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"errors\":{\"SafeCastOverflowedIntDowncast(uint8,int256)\":[{\"details\":\"Value doesn't fit in an int of `bits` size.\"}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/math/SignedMath.sol":{"SignedMath":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220ee6255c12b012bae73a70a26a61b448f9ef124c94209906281f062cd3a0bd34264736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEE PUSH3 0x55C12B ADD 0x2B 0xAE PUSH20 0xA70A26A61B448F9EF124C94209906281F062CD3A SIGNEXTEND 0xD3 TIMESTAMP PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"216:1047:50:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220ee6255c12b012bae73a70a26a61b448f9ef124c94209906281f062cd3a0bd34264736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEE PUSH3 0x55C12B ADD 0x2B 0xAE PUSH20 0xA70A26A61B448F9EF124C94209906281F062CD3A SIGNEXTEND 0xD3 TIMESTAMP PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"216:1047:50:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard signed math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SignedMath.sol\":\"SignedMath\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"contracts/BalancerPoolToken.sol":{"BalancerPoolToken":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault_","type":"address"},{"internalType":"string","name":"bptName","type":"string"},{"internalType":"string","name":"bptSymbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"ERC2612ExpiredSignature","type":"error"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC2612InvalidSigner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"name":"InvalidAccountNonce","type":"error"},{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitApproval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementNonce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_string_fromMemory":{"entryPoint":1104,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":1069,"id":null,"parameterSlots":2,"returnSlots":0},"fun_toShortStringWithFallback":{"entryPoint":1576,"id":7811,"parameterSlots":1,"returnSlots":1},"fun_toShortStringWithFallback_3774":{"entryPoint":1189,"id":7811,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"61018060408181523461042957611882803803809161001e828661042d565b8439820190606083830312610429578251906001600160a01b0382168203610429576020848101516001600160401b0395919291908681116104295785610066918301610450565b94828201518781116104295761007c9201610450565b918151958287018781108282111761034057835260019081885282880194603160f81b86526100aa886104a5565b976101209889526100ba8a610628565b966101409788528151868301209a8b60e052519020996101009a808c524660a052875190878201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f84528983015260608201524660808201523060a082015260a0815260c08101818110868211176103405788525190206080523060c052610160978852805191838311610340576003928354928684811c9416801561041f575b8885101461040b578190601f948581116103bd575b50889085831160011461035f575f92610354575b50505f1982861b1c191690861b1783555b80519384116103405760049586548681811c91168015610336575b82821014610323578381116102e0575b508092851160011461027b57509383949184925f95610270575b50501b925f19911b1c19161790555b5192611123948561075f863960805185610d3f015260a05185610e0b015260c05185610d10015260e05185610d8e01525184610db4015251836105d0015251826105fa015251818181610150015281816103350152818161042c0152818161059501528181610756015281816107ef0152818161099801528181610a030152610ccb0152f35b015193505f806101db565b92919084601f198116885f52855f20955f905b898383106102c657505050106102ad575b50505050811b0190556101ea565b01519060f8845f19921b161c191690555f80808061029f565b85870151895590970196948501948893509081019061028e565b875f52815f208480880160051c82019284891061031a575b0160051c019087905b82811061030f5750506101c1565b5f8155018790610301565b925081926102f8565b602288634e487b7160e01b5f525260245ffd5b90607f16906101b1565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610185565b90889350601f19831691875f528a5f20925f5b8c8282106103a75750508411610390575b505050811b018355610196565b01515f1983881b60f8161c191690555f8080610383565b8385015186558c97909501949384019301610372565b909150855f52885f208580850160051c8201928b8610610402575b918a91869594930160051c01915b8281106103f4575050610171565b5f81558594508a91016103e6565b925081926103d8565b634e487b7160e01b5f52602260045260245ffd5b93607f169361015c565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761034057604052565b81601f82011215610429578051906001600160401b0382116103405760405192610484601f8401601f19166020018561042d565b8284526020838301011161042957815f9260208093018386015e8301015290565b80516020908181101561051b5750601f8251116104dd57808251920151908083106104cf57501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b038211610340575f54926001938481811c9116801561061e575b8382101461040b57601f81116105eb575b5081601f841160011461058957509282939183925f9461057e575b50501b915f199060031b1c1916175f5560ff90565b015192505f80610569565b919083601f1981165f8052845f20945f905b888383106105d157505050106105b9575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f80806105ac565b85870151885590960195948501948793509081019061059b565b5f805284601f845f20920160051c820191601f860160051c015b82811061061357505061054e565b5f8155018590610605565b90607f169061053d565b8051602090818110156106525750601f8251116104dd57808251920151908083106104cf57501790565b9192916001600160401b0381116103405760019182548381811c91168015610754575b8282101461040b57601f8111610721575b5080601f83116001146106c15750819293945f926106b6575b50505f19600383901b1c191690821b17905560ff90565b015190505f8061069f565b90601f19831695845f52825f20925f905b88821061070a57505083859697106106f2575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f80806106e5565b8087859682949686015181550195019301906106d2565b835f5283601f835f20920160051c820191601f850160051c015b828110610749575050610686565b5f815501849061073b565b90607f169061067556fe6080604081815260049182361015610015575f80fd5b5f3560e01c90816301ffc9a714610b655750806306fdde0314610a93578063095ea7b314610a3c57806318160ddd146109d057806323b872dd1461094d57806323de66511461091b57806330adf81f146108e1578063313ce567146108c65780633644e515146108a35780635687f2b814610851578063627cdcb914610828578063679aefce146107bc57806370a082311461070e5780637ecebe00146106d757806384b0196e146105b95780638d928af81461057657806395d89b411461048a578063a9059cbb146103c8578063d505accf146101cc5763dd62ed3e146100fb575f80fd5b346101b757806003193601126101b7576020610115610bbe565b606461011f610bd4565b845163927da10560e01b815230968101969096526001600160a01b03928316602487015282166044860152849182907f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101c3575f9161018a575b6020925051908152f35b90506020823d6020116101bb575b816101a560209383610c87565b810103126101b7576020915190610180565b5f80fd5b3d9150610198565b513d5f823e3d90fd5b50346101b75760e03660031901126101b7576101e6610bbe565b906101ef610bd4565b604435926064359060843560ff811681036101b7578242116103b65761022f826001600160a01b03165f52600260205260405f2080549060018201905590565b90855160208101907f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c982526001600160a01b039586861694858a84015287891660608401528a608084015260a083015260c082015260c0815260e0810181811067ffffffffffffffff8211176103a357926102e6926102dd9288958b525190206102b7610d06565b908a519161190160f01b83526002830152602282015260c43591604260a4359220610fec565b90929192611079565b1681810361038f5750505f849596610331602096519889968795869463e1f21c6760e01b865285016040919493929460608201956001600160a01b0380921683521660208201520152565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156101c3575061036557005b6103869060203d602011610388575b61037e8183610c87565b810190610ca9565b005b503d610374565b876325c0072360e11b5f525260245260445ffd5b60418b634e487b7160e01b5f525260245ffd5b828763313c898160e11b5f525260245ffd5b50346101b757806003193601126101b757602061041f926103e7610bbe565b83516317d5759960e31b8152339281019283526001600160a01b03909116602083015260243560408301529384918291606090910190565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af191821561048057602092610465575b505160018152f35b61047b90833d85116103885761037e8183610c87565b61045d565b50513d5f823e3d90fd5b5090346101b7575f3660031901126101b757815191825f83546104ac81610c1f565b90818452602095600191876001821691825f1461054f5750506001146104f3575b5050506104ef92916104e0910385610c87565b51928284938452830190610b9a565b0390f35b5f90815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82841061053757505050820101816104e06104ef6104cd565b8054848a01860152889550879490930192810161051e565b60ff19168782015293151560051b860190930193508492506104e091506104ef90506104cd565b50346101b7575f3660031901126101b757602090516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5090346101b7575f3660031901126101b7576105f47f0000000000000000000000000000000000000000000000000000000000000000610e31565b9161061e7f0000000000000000000000000000000000000000000000000000000000000000610f2e565b815191602091602084019484861067ffffffffffffffff8711176106c45750610679826020928761066c99989795525f85528151988998600f60f81b8a5260e0868b015260e08a0190610b9a565b9188830390890152610b9a565b914660608701523060808701525f60a087015285830360c087015251918281520192915f5b8281106106ad57505050500390f35b83518552869550938101939281019260010161069e565b604190634e487b7160e01b5f525260245ffd5b50346101b75760203660031901126101b7576020906001600160a01b036106fc610bbe565b165f5260028252805f20549051908152f35b5090346101b757602091826003193601126101b7578261072c610bbe565b60446001600160a01b03948585519687948593633de222bb60e21b855230908501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610480575f9261078d575b5051908152f35b9091508281813d83116107b5575b6107a58183610c87565b810103126101b75751905f610786565b503d61079b565b50346101b7575f3660031901126101b757805191634f037ee760e01b835230908301526020826024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101c3575f9161018a576020925051908152f35b346101b7575f3660031901126101b757335f908152600260205260409020805460018101909155005b50346101b75760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92561088336610bea565b93919461088e610cc1565b519384526001600160a01b03908116941692a3005b50346101b7575f3660031901126101b7576020906108bf610d06565b9051908152f35b50346101b7575f3660031901126101b7576020905160128152f35b50346101b7575f3660031901126101b757602090517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b50346101b75760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61088336610bea565b50346101b75760205f608461096136610bea565b8651630aed65f560e11b815233988101989098526001600160a01b03928316602489015290821660448801526064870152859283917f0000000000000000000000000000000000000000000000000000000000000000165af19182156104805760209261046557505160018152f35b50346101b7575f3660031901126101b7578051916339370aa960e21b835230908301526020826024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101c3575f9161018a576020925051908152f35b50346101b757806003193601126101b757602061041f92610a5b610bbe565b835163e1f21c6760e01b8152339281019283526001600160a01b03909116602083015260243560408301529384918291606090910190565b50346101b7575f3660031901126101b75780516003549091825f610ab684610c1f565b808352602094600190866001821691825f14610b43575050600114610ae8575b50506104ef92916104e0910385610c87565b9085925060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f925b828410610b2b57505050820101816104e0610ad6565b8054848a018601528895508794909301928101610b15565b60ff19168682015292151560051b850190920192508391506104e09050610ad6565b83346101b75760203660031901126101b757359063ffffffff60e01b82168092036101b7576020916301ffc9a760e01b148152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036101b757565b602435906001600160a01b03821682036101b757565b60609060031901126101b7576001600160a01b039060043582811681036101b7579160243590811681036101b7579060443590565b90600182811c92168015610c4d575b6020831014610c3957565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610c2e565b6040810190811067ffffffffffffffff821117610c7357604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff821117610c7357604052565b908160209103126101b7575180151581036101b75790565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303610cf357565b63089676d560e01b5f523360045260245ffd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016301480610e08575b15610d61577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff821117610c735760405251902090565b507f00000000000000000000000000000000000000000000000000000000000000004614610d38565b60ff8114610e6c5760ff811690601f8211610e5d5760405191610e5383610c57565b8252602082015290565b632cd44ac360e21b5f5260045ffd5b506040515f815f5491610e7e83610c1f565b80835292602090600190818116908115610f0a5750600114610eac575b5050610ea992500382610c87565b90565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b828410610ef25750610ea99450505081016020015f80610e9b565b85548785018301529485019486945092810192610ed7565b91505060209250610ea994915060ff191682840152151560051b8201015f80610e9b565b60ff8114610f505760ff811690601f8211610e5d5760405191610e5383610c57565b506040515f81600191600154610f6581610c1f565b8084529360209160018116908115610f0a5750600114610f8d575050610ea992500382610c87565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b828410610fd45750610ea99450505081016020015f80610e9b565b85548785018301529485019486945092810192610fb9565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161106e579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611063575f516001600160a01b0381161561105957905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b60048110156110d9578061108b575050565b600181036110a25763f645eedf60e01b5f5260045ffd5b600281036110bd575063fce698f760e01b5f5260045260245ffd5b6003146110c75750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea26469706673582212206c08c920e4d4f538c7578746879f6231fba5c89e71c71178e26f02698de5dd7a64736f6c634300081a0033","opcodes":"PUSH2 0x180 PUSH1 0x40 DUP2 DUP2 MSTORE CALLVALUE PUSH2 0x429 JUMPI PUSH2 0x1882 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1E DUP3 DUP7 PUSH2 0x42D JUMP JUMPDEST DUP5 CODECOPY DUP3 ADD SWAP1 PUSH1 0x60 DUP4 DUP4 SUB SLT PUSH2 0x429 JUMPI DUP3 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x429 JUMPI PUSH1 0x20 DUP5 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP6 SWAP2 SWAP3 SWAP2 SWAP1 DUP7 DUP2 GT PUSH2 0x429 JUMPI DUP6 PUSH2 0x66 SWAP2 DUP4 ADD PUSH2 0x450 JUMP JUMPDEST SWAP5 DUP3 DUP3 ADD MLOAD DUP8 DUP2 GT PUSH2 0x429 JUMPI PUSH2 0x7C SWAP3 ADD PUSH2 0x450 JUMP JUMPDEST SWAP2 DUP2 MLOAD SWAP6 DUP3 DUP8 ADD DUP8 DUP2 LT DUP3 DUP3 GT OR PUSH2 0x340 JUMPI DUP4 MSTORE PUSH1 0x1 SWAP1 DUP2 DUP9 MSTORE DUP3 DUP9 ADD SWAP5 PUSH1 0x31 PUSH1 0xF8 SHL DUP7 MSTORE PUSH2 0xAA DUP9 PUSH2 0x4A5 JUMP JUMPDEST SWAP8 PUSH2 0x120 SWAP9 DUP10 MSTORE PUSH2 0xBA DUP11 PUSH2 0x628 JUMP JUMPDEST SWAP7 PUSH2 0x140 SWAP8 DUP9 MSTORE DUP2 MLOAD DUP7 DUP4 ADD KECCAK256 SWAP11 DUP12 PUSH1 0xE0 MSTORE MLOAD SWAP1 KECCAK256 SWAP10 PUSH2 0x100 SWAP11 DUP1 DUP13 MSTORE CHAINID PUSH1 0xA0 MSTORE DUP8 MLOAD SWAP1 DUP8 DUP3 ADD SWAP3 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP5 MSTORE DUP10 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT DUP7 DUP3 GT OR PUSH2 0x340 JUMPI DUP9 MSTORE MLOAD SWAP1 KECCAK256 PUSH1 0x80 MSTORE ADDRESS PUSH1 0xC0 MSTORE PUSH2 0x160 SWAP8 DUP9 MSTORE DUP1 MLOAD SWAP2 DUP4 DUP4 GT PUSH2 0x340 JUMPI PUSH1 0x3 SWAP3 DUP4 SLOAD SWAP3 DUP7 DUP5 DUP2 SHR SWAP5 AND DUP1 ISZERO PUSH2 0x41F JUMPI JUMPDEST DUP9 DUP6 LT EQ PUSH2 0x40B JUMPI DUP2 SWAP1 PUSH1 0x1F SWAP5 DUP6 DUP2 GT PUSH2 0x3BD JUMPI JUMPDEST POP DUP9 SWAP1 DUP6 DUP4 GT PUSH1 0x1 EQ PUSH2 0x35F JUMPI PUSH0 SWAP3 PUSH2 0x354 JUMPI JUMPDEST POP POP PUSH0 NOT DUP3 DUP7 SHL SHR NOT AND SWAP1 DUP7 SHL OR DUP4 SSTORE JUMPDEST DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x340 JUMPI PUSH1 0x4 SWAP6 DUP7 SLOAD DUP7 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x336 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x323 JUMPI DUP4 DUP2 GT PUSH2 0x2E0 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x27B JUMPI POP SWAP4 DUP4 SWAP5 SWAP2 DUP5 SWAP3 PUSH0 SWAP6 PUSH2 0x270 JUMPI JUMPDEST POP POP SHL SWAP3 PUSH0 NOT SWAP2 SHL SHR NOT AND OR SWAP1 SSTORE JUMPDEST MLOAD SWAP3 PUSH2 0x1123 SWAP5 DUP6 PUSH2 0x75F DUP7 CODECOPY PUSH1 0x80 MLOAD DUP6 PUSH2 0xD3F ADD MSTORE PUSH1 0xA0 MLOAD DUP6 PUSH2 0xE0B ADD MSTORE PUSH1 0xC0 MLOAD DUP6 PUSH2 0xD10 ADD MSTORE PUSH1 0xE0 MLOAD DUP6 PUSH2 0xD8E ADD MSTORE MLOAD DUP5 PUSH2 0xDB4 ADD MSTORE MLOAD DUP4 PUSH2 0x5D0 ADD MSTORE MLOAD DUP3 PUSH2 0x5FA ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x150 ADD MSTORE DUP2 DUP2 PUSH2 0x335 ADD MSTORE DUP2 DUP2 PUSH2 0x42C ADD MSTORE DUP2 DUP2 PUSH2 0x595 ADD MSTORE DUP2 DUP2 PUSH2 0x756 ADD MSTORE DUP2 DUP2 PUSH2 0x7EF ADD MSTORE DUP2 DUP2 PUSH2 0x998 ADD MSTORE DUP2 DUP2 PUSH2 0xA03 ADD MSTORE PUSH2 0xCCB ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP4 POP PUSH0 DUP1 PUSH2 0x1DB JUMP JUMPDEST SWAP3 SWAP2 SWAP1 DUP5 PUSH1 0x1F NOT DUP2 AND DUP9 PUSH0 MSTORE DUP6 PUSH0 KECCAK256 SWAP6 PUSH0 SWAP1 JUMPDEST DUP10 DUP4 DUP4 LT PUSH2 0x2C6 JUMPI POP POP POP LT PUSH2 0x2AD JUMPI JUMPDEST POP POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH2 0x1EA JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xF8 DUP5 PUSH0 NOT SWAP3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 DUP1 PUSH2 0x29F JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP10 SSTORE SWAP1 SWAP8 ADD SWAP7 SWAP5 DUP6 ADD SWAP5 DUP9 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x28E JUMP JUMPDEST DUP8 PUSH0 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x31A JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP8 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x30F JUMPI POP POP PUSH2 0x1C1 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP8 SWAP1 PUSH2 0x301 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x2F8 JUMP JUMPDEST PUSH1 0x22 DUP9 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x1B1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x185 JUMP JUMPDEST SWAP1 DUP9 SWAP4 POP PUSH1 0x1F NOT DUP4 AND SWAP2 DUP8 PUSH0 MSTORE DUP11 PUSH0 KECCAK256 SWAP3 PUSH0 JUMPDEST DUP13 DUP3 DUP3 LT PUSH2 0x3A7 JUMPI POP POP DUP5 GT PUSH2 0x390 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP4 SSTORE PUSH2 0x196 JUMP JUMPDEST ADD MLOAD PUSH0 NOT DUP4 DUP9 SHL PUSH1 0xF8 AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x383 JUMP JUMPDEST DUP4 DUP6 ADD MLOAD DUP7 SSTORE DUP13 SWAP8 SWAP1 SWAP6 ADD SWAP5 SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0x372 JUMP JUMPDEST SWAP1 SWAP2 POP DUP6 PUSH0 MSTORE DUP9 PUSH0 KECCAK256 DUP6 DUP1 DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP12 DUP7 LT PUSH2 0x402 JUMPI JUMPDEST SWAP2 DUP11 SWAP2 DUP7 SWAP6 SWAP5 SWAP4 ADD PUSH1 0x5 SHR ADD SWAP2 JUMPDEST DUP3 DUP2 LT PUSH2 0x3F4 JUMPI POP POP PUSH2 0x171 JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP DUP11 SWAP2 ADD PUSH2 0x3E6 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x3D8 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP4 PUSH1 0x7F AND SWAP4 PUSH2 0x15C JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x340 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x429 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x340 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x484 PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP6 PUSH2 0x42D JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x429 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x51B JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0x4DD JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0x4CF JUMPI POP OR SWAP1 JUMP JUMPDEST DUP3 PUSH0 NOT SWAP2 SUB PUSH1 0x3 SHL SHL AND OR SWAP1 JUMP JUMPDEST PUSH1 0x44 DUP3 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH4 0x305A27A9 PUSH1 0xE0 SHL DUP4 MSTORE DUP2 PUSH1 0x4 DUP5 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP7 ADD MSTORE ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x340 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x61E JUMPI JUMPDEST DUP4 DUP3 LT EQ PUSH2 0x40B JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x5EB JUMPI JUMPDEST POP DUP2 PUSH1 0x1F DUP5 GT PUSH1 0x1 EQ PUSH2 0x589 JUMPI POP SWAP3 DUP3 SWAP4 SWAP2 DUP4 SWAP3 PUSH0 SWAP5 PUSH2 0x57E JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x569 JUMP JUMPDEST SWAP2 SWAP1 DUP4 PUSH1 0x1F NOT DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x5D1 JUMPI POP POP POP LT PUSH2 0x5B9 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x5AC JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x59B JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP5 PUSH1 0x1F DUP5 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP7 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x613 JUMPI POP POP PUSH2 0x54E JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x605 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x53D JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x652 JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0x4DD JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0x4CF JUMPI POP OR SWAP1 JUMP JUMPDEST SWAP2 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x340 JUMPI PUSH1 0x1 SWAP2 DUP3 SLOAD DUP4 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x754 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x40B JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x721 JUMPI JUMPDEST POP DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x6C1 JUMPI POP DUP2 SWAP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0x6B6 JUMPI JUMPDEST POP POP PUSH0 NOT PUSH1 0x3 DUP4 SWAP1 SHL SHR NOT AND SWAP1 DUP3 SHL OR SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x69F JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP6 DUP5 PUSH0 MSTORE DUP3 PUSH0 KECCAK256 SWAP3 PUSH0 SWAP1 JUMPDEST DUP9 DUP3 LT PUSH2 0x70A JUMPI POP POP DUP4 DUP6 SWAP7 SWAP8 LT PUSH2 0x6F2 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x6E5 JUMP JUMPDEST DUP1 DUP8 DUP6 SWAP7 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD SWAP1 PUSH2 0x6D2 JUMP JUMPDEST DUP4 PUSH0 MSTORE DUP4 PUSH1 0x1F DUP4 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x749 JUMPI POP POP PUSH2 0x686 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP5 SWAP1 PUSH2 0x73B JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x675 JUMP INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0xB65 JUMPI POP DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xA93 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xA3C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x9D0 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x94D JUMPI DUP1 PUSH4 0x23DE6651 EQ PUSH2 0x91B JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x8E1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x8C6 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x8A3 JUMPI DUP1 PUSH4 0x5687F2B8 EQ PUSH2 0x851 JUMPI DUP1 PUSH4 0x627CDCB9 EQ PUSH2 0x828 JUMPI DUP1 PUSH4 0x679AEFCE EQ PUSH2 0x7BC JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x70E JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x6D7 JUMPI DUP1 PUSH4 0x84B0196E EQ PUSH2 0x5B9 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x576 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x48A JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x3C8 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x1CC JUMPI PUSH4 0xDD62ED3E EQ PUSH2 0xFB JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1B7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH2 0x115 PUSH2 0xBBE JUMP JUMPDEST PUSH1 0x64 PUSH2 0x11F PUSH2 0xBD4 JUMP JUMPDEST DUP5 MLOAD PUSH4 0x927DA105 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS SWAP7 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x24 DUP8 ADD MSTORE DUP3 AND PUSH1 0x44 DUP7 ADD MSTORE DUP5 SWAP2 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1C3 JUMPI PUSH0 SWAP2 PUSH2 0x18A JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1BB JUMPI JUMPDEST DUP2 PUSH2 0x1A5 PUSH1 0x20 SWAP4 DUP4 PUSH2 0xC87 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0x180 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x198 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH2 0x1E6 PUSH2 0xBBE JUMP JUMPDEST SWAP1 PUSH2 0x1EF PUSH2 0xBD4 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH1 0x84 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x1B7 JUMPI DUP3 TIMESTAMP GT PUSH2 0x3B6 JUMPI PUSH2 0x22F DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP1 DUP6 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 DUP7 AND SWAP5 DUP6 DUP11 DUP5 ADD MSTORE DUP8 DUP10 AND PUSH1 0x60 DUP5 ADD MSTORE DUP11 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 MSTORE PUSH1 0xE0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x3A3 JUMPI SWAP3 PUSH2 0x2E6 SWAP3 PUSH2 0x2DD SWAP3 DUP9 SWAP6 DUP12 MSTORE MLOAD SWAP1 KECCAK256 PUSH2 0x2B7 PUSH2 0xD06 JUMP JUMPDEST SWAP1 DUP11 MLOAD SWAP2 PUSH2 0x1901 PUSH1 0xF0 SHL DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0xFEC JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x1079 JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0x38F JUMPI POP POP PUSH0 DUP5 SWAP6 SWAP7 PUSH2 0x331 PUSH1 0x20 SWAP7 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH4 0xE1F21C67 PUSH1 0xE0 SHL DUP7 MSTORE DUP6 ADD PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 SWAP5 PUSH1 0x60 DUP3 ADD SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP4 MSTORE AND PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x1C3 JUMPI POP PUSH2 0x365 JUMPI STOP JUMPDEST PUSH2 0x386 SWAP1 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x388 JUMPI JUMPDEST PUSH2 0x37E DUP2 DUP4 PUSH2 0xC87 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xCA9 JUMP JUMPDEST STOP JUMPDEST POP RETURNDATASIZE PUSH2 0x374 JUMP JUMPDEST DUP8 PUSH4 0x25C00723 PUSH1 0xE1 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP12 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP8 PUSH4 0x313C8981 PUSH1 0xE1 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH2 0x41F SWAP3 PUSH2 0x3E7 PUSH2 0xBBE JUMP JUMPDEST DUP4 MLOAD PUSH4 0x17D57599 PUSH1 0xE3 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x480 JUMPI PUSH1 0x20 SWAP3 PUSH2 0x465 JUMPI JUMPDEST POP MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x47B SWAP1 DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x388 JUMPI PUSH2 0x37E DUP2 DUP4 PUSH2 0xC87 JUMP JUMPDEST PUSH2 0x45D JUMP JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI DUP2 MLOAD SWAP2 DUP3 PUSH0 DUP4 SLOAD PUSH2 0x4AC DUP2 PUSH2 0xC1F JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x54F JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x4F3 JUMPI JUMPDEST POP POP POP PUSH2 0x4EF SWAP3 SWAP2 PUSH2 0x4E0 SWAP2 SUB DUP6 PUSH2 0xC87 JUMP JUMPDEST MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0xB9A JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 SWAP1 DUP2 MSTORE DUP7 SWAP4 POP SWAP2 SWAP1 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0x537 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x4E0 PUSH2 0x4EF PUSH2 0x4CD JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x51E JUMP JUMPDEST PUSH1 0xFF NOT AND DUP8 DUP3 ADD MSTORE SWAP4 ISZERO ISZERO PUSH1 0x5 SHL DUP7 ADD SWAP1 SWAP4 ADD SWAP4 POP DUP5 SWAP3 POP PUSH2 0x4E0 SWAP2 POP PUSH2 0x4EF SWAP1 POP PUSH2 0x4CD JUMP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH2 0x5F4 PUSH32 0x0 PUSH2 0xE31 JUMP JUMPDEST SWAP2 PUSH2 0x61E PUSH32 0x0 PUSH2 0xF2E JUMP JUMPDEST DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP2 PUSH1 0x20 DUP5 ADD SWAP5 DUP5 DUP7 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP8 GT OR PUSH2 0x6C4 JUMPI POP PUSH2 0x679 DUP3 PUSH1 0x20 SWAP3 DUP8 PUSH2 0x66C SWAP10 SWAP9 SWAP8 SWAP6 MSTORE PUSH0 DUP6 MSTORE DUP2 MLOAD SWAP9 DUP10 SWAP9 PUSH1 0xF PUSH1 0xF8 SHL DUP11 MSTORE PUSH1 0xE0 DUP7 DUP12 ADD MSTORE PUSH1 0xE0 DUP11 ADD SWAP1 PUSH2 0xB9A JUMP JUMPDEST SWAP2 DUP9 DUP4 SUB SWAP1 DUP10 ADD MSTORE PUSH2 0xB9A JUMP JUMPDEST SWAP2 CHAINID PUSH1 0x60 DUP8 ADD MSTORE ADDRESS PUSH1 0x80 DUP8 ADD MSTORE PUSH0 PUSH1 0xA0 DUP8 ADD MSTORE DUP6 DUP4 SUB PUSH1 0xC0 DUP8 ADD MSTORE MLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP3 SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x6AD JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x69E JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x6FC PUSH2 0xBBE JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B7 JUMPI DUP3 PUSH2 0x72C PUSH2 0xBBE JUMP JUMPDEST PUSH1 0x44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 DUP6 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH4 0x3DE222BB PUSH1 0xE2 SHL DUP6 MSTORE ADDRESS SWAP1 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x480 JUMPI PUSH0 SWAP3 PUSH2 0x78D JUMPI JUMPDEST POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x7B5 JUMPI JUMPDEST PUSH2 0x7A5 DUP2 DUP4 PUSH2 0xC87 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1B7 JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x786 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x79B JUMP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI DUP1 MLOAD SWAP2 PUSH4 0x4F037EE7 PUSH1 0xE0 SHL DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1C3 JUMPI PUSH0 SWAP2 PUSH2 0x18A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x883 CALLDATASIZE PUSH2 0xBEA JUMP JUMPDEST SWAP4 SWAP2 SWAP5 PUSH2 0x88E PUSH2 0xCC1 JUMP JUMPDEST MLOAD SWAP4 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x8BF PUSH2 0xD06 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x883 CALLDATASIZE PUSH2 0xBEA JUMP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH0 PUSH1 0x84 PUSH2 0x961 CALLDATASIZE PUSH2 0xBEA JUMP JUMPDEST DUP7 MLOAD PUSH4 0xAED65F5 PUSH1 0xE1 SHL DUP2 MSTORE CALLER SWAP9 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x24 DUP10 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP9 ADD MSTORE PUSH1 0x64 DUP8 ADD MSTORE DUP6 SWAP3 DUP4 SWAP2 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x480 JUMPI PUSH1 0x20 SWAP3 PUSH2 0x465 JUMPI POP MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI DUP1 MLOAD SWAP2 PUSH4 0x39370AA9 PUSH1 0xE2 SHL DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1C3 JUMPI PUSH0 SWAP2 PUSH2 0x18A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH2 0x41F SWAP3 PUSH2 0xA5B PUSH2 0xBBE JUMP JUMPDEST DUP4 MLOAD PUSH4 0xE1F21C67 PUSH1 0xE0 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI DUP1 MLOAD PUSH1 0x3 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0xAB6 DUP5 PUSH2 0xC1F JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0xB43 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xAE8 JUMPI JUMPDEST POP POP PUSH2 0x4EF SWAP3 SWAP2 PUSH2 0x4E0 SWAP2 SUB DUP6 PUSH2 0xC87 JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0xB2B JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x4E0 PUSH2 0xAD6 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0xB15 JUMP JUMPDEST PUSH1 0xFF NOT AND DUP7 DUP3 ADD MSTORE SWAP3 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD SWAP1 SWAP3 ADD SWAP3 POP DUP4 SWAP2 POP PUSH2 0x4E0 SWAP1 POP PUSH2 0xAD6 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP2 PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL EQ DUP2 MSTORE RETURN JUMPDEST DUP1 MLOAD DUP1 DUP4 MSTORE PUSH1 0x20 SWAP3 SWAP2 DUP2 SWAP1 DUP5 ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x1B7 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x1B7 JUMPI JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x1B7 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x1B7 JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0xC4D JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0xC39 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0xC2E JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC73 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F DUP1 NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC73 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x1B7 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x1B7 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0xCF3 JUMPI JUMP JUMPDEST PUSH4 0x89676D5 PUSH1 0xE0 SHL PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0xE08 JUMPI JUMPDEST ISZERO PUSH2 0xD61 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC73 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0xD38 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0xE6C JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0xE5D JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0xE53 DUP4 PUSH2 0xC57 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH4 0x2CD44AC3 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0xE7E DUP4 PUSH2 0xC1F JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0xF0A JUMPI POP PUSH1 0x1 EQ PUSH2 0xEAC JUMPI JUMPDEST POP POP PUSH2 0xEA9 SWAP3 POP SUB DUP3 PUSH2 0xC87 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0xEF2 JUMPI POP PUSH2 0xEA9 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0xE9B JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0xED7 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 SWAP3 POP PUSH2 0xEA9 SWAP5 SWAP2 POP PUSH1 0xFF NOT AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0xE9B JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0xF50 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0xE5D JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0xE53 DUP4 PUSH2 0xC57 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0xF65 DUP2 PUSH2 0xC1F JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0xF0A JUMPI POP PUSH1 0x1 EQ PUSH2 0xF8D JUMPI POP POP PUSH2 0xEA9 SWAP3 POP SUB DUP3 PUSH2 0xC87 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0xFD4 JUMPI POP PUSH2 0xEA9 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0xE9B JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0xFB9 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x106E JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x1063 JUMPI PUSH0 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x1059 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x10D9 JUMPI DUP1 PUSH2 0x108B JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x10A2 JUMPI PUSH4 0xF645EEDF PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x10BD JUMPI POP PUSH4 0xFCE698F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x10C7 JUMPI POP JUMP JUMPDEST PUSH4 0x35E2F383 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH13 0x8C920E4D4F538C7578746879F PUSH3 0x31FBA5 0xC8 SWAP15 PUSH18 0xC71178E26F02698DE5DD7A64736F6C634300 ADDMOD BYTE STOP CALLER ","sourceMap":"1269:5749:51:-:0;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1269:5749:51;;;;;;;;;;;-1:-1:-1;;;;;1269:5749:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1269:5749:51;;3401:45:44;;;:::i;:::-;3393:53;;;;;3467:51;;;:::i;:::-;3456:62;;;;;1269:5749:51;;;;;3542:22:44;3528:36;;;;1269:5749:51;3591:25:44;;3574:42;;;;;;3644:13;3627:30;;1269:5749:51;;4204:80:44;;;;2079:95;;;;;;;;1269:5749:51;2079:95:44;;;3644:13;2079:95;;;;4278:4;3627:30;2079:95;;;3627:30;4204:80;;2079:95;1269:5749:51;;;;;;;;;;;;;;4194:91:44;;2079:95;3667:48;4278:4;2079:95;3725:27;409:14:55;;;;1269:5749:51;;;;;;;;2265:18;1269:5749;;;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;;;;;;;;;-1:-1:-1;1269:5749:51;;;;-1:-1:-1;;;;1269:5749:51;;;;;;;;;;;;;;;;;;;;2293:22;1269:5749;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;;;;;;;;;;;;;;;;;;;;;;;;;;2079:95:44;1269:5749:51;;;;;3627:30:44;1269:5749:51;;;;;2079:95:44;1269:5749:51;;;;;3528:36:44;1269:5749:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;;;;4204:80:44;;;;;;1269:5749:51;;;-1:-1:-1;1269:5749:51;;-1:-1:-1;1269:5749:51;;-1:-1:-1;1269:5749:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;;;;;;;-1:-1:-1;1269:5749:51;;-1:-1:-1;1269:5749:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;;-1:-1:-1;1269:5749:51;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;2293:22;1269:5749;;-1:-1:-1;1269:5749:51;;;;;-1:-1:-1;1269:5749:51;;;;;4204:80:44;;;;;;1269:5749:51;;;;-1:-1:-1;1269:5749:51;;-1:-1:-1;1269:5749:51;;-1:-1:-1;1269:5749:51;;;;;;;;;;-1:-1:-1;1269:5749:51;;;;;;;;;;;;;;;;-1:-1:-1;;1269:5749:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;-1:-1:-1;1269:5749:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;;;-1:-1:-1;1269:5749:51;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;;;;-1:-1:-1;1269:5749:51;;;;;;;;;-1:-1:-1;1269:5749:51;;;;;;;-1:-1:-1;;1269:5749:51;;;;-1:-1:-1;;;;;1269:5749:51;;;;;;;;;;:::o;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1269:5749:51;;;;;;;;4204:80:44;1269:5749:51;;-1:-1:-1;;1269:5749:51;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;;;;;;;;;;;;;:::o;2914:340:40:-;1269:5749:51;;3059:2:40;;3037:24;;;3059:2;;;1269:5749:51;1854:2:40;1269:5749:51;;1840:16:40;1836:72;;1269:5749:51;;;;;2079:95:44;1269:5749:51;;;;;;1949:36:40;;3077:27;:::o;1269:5749:51:-;;;;;;;;;;1949:36:40;3077:27;:::o;1836:72::-;1269:5749:51;;;;1879:18:40;;;;;;;;;;;;1269:5749:51;;;;;;;;;;;;;;;;3432:13:44;1269:5749:51;;;;;;1854:2:40;1269:5749:51;-1:-1:-1;;1269:5749:51;;;1879:18:40;;;;3033:215;1269:5749:51;-1:-1:-1;;;;;1269:5749:51;;;;3432:13:44;1269:5749:51;;;;;;;;;;;;;;3033:215:40;1269:5749:51;;;;;;;;;;;3033:215:40;1269:5749:51;;;;;;;;;;;;;;;;3432:13:44;1269:5749:51;;;;;;;;;;;;;;;;;3432:13:44;1269:5749:51;1390:66:40;3195:42;:::o;1269:5749:51:-;;;;-1:-1:-1;1269:5749:51;;;;;4204:80:44;;;;;1269:5749:51;;3432:13:44;1269:5749:51;;;3432:13:44;1269:5749:51;;3432:13:44;1269:5749:51;;;;;;;;;;;;;;;;;;;;;3432:13:44;1269:5749:51;1390:66:40;3195:42;:::o;1269:5749:51:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;;;;;;3432:13:44;1269:5749:51;;;;;3432:13:44;1269:5749:51;;;;;;;;;;;;;;;;;;;;;;;;;3432:13:44;1269:5749:51;;;;;;;;;;;;;;2914:340:40;1269:5749:51;;3059:2:40;;3037:24;;;3059:2;;;1269:5749:51;1854:2:40;1269:5749:51;;1840:16:40;1836:72;;1269:5749:51;;;;;2079:95:44;1269:5749:51;;;;;;1949:36:40;;3077:27;:::o;3033:215::-;1269:5749:51;;;-1:-1:-1;;;;;1269:5749:51;;;;;;;;;;;;;;;;;;3033:215:40;1269:5749:51;;;;;;;;;;;3033:215:40;1269:5749:51;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;1269:5749:51;;;;;;;;;;;;;1390:66:40;;3195:42::o;1269:5749:51:-;;;;-1:-1:-1;1269:5749:51;;;;;4204:80:44;;;1269:5749:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1390:66:40;3195:42;:::o;1269:5749:51:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":3028,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_7265":{"entryPoint":3006,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_addresst_addresst_uint256":{"entryPoint":3050,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_bool_fromMemory":{"entryPoint":3241,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_string":{"entryPoint":2970,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":3103,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":3207,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_11167":{"entryPoint":3159,"id":null,"parameterSlots":1,"returnSlots":0},"fun_domainSeparatorV4":{"entryPoint":3334,"id":8706,"parameterSlots":0,"returnSlots":1},"fun_ensureOnlyVault":{"entryPoint":3265,"id":17275,"parameterSlots":0,"returnSlots":0},"fun_throwError":{"entryPoint":4217,"id":8582,"parameterSlots":2,"returnSlots":0},"fun_toStringWithFallback":{"entryPoint":3886,"id":7838,"parameterSlots":1,"returnSlots":1},"fun_toStringWithFallback_7271":{"entryPoint":3633,"id":7838,"parameterSlots":1,"returnSlots":1},"fun_tryRecover":{"entryPoint":4076,"id":8497,"parameterSlots":4,"returnSlots":3},"fun_useNonce":{"entryPoint":null,"id":7627,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"8604":[{"length":32,"start":3391}],"8606":[{"length":32,"start":3595}],"8608":[{"length":32,"start":3344}],"8610":[{"length":32,"start":3470}],"8612":[{"length":32,"start":3508}],"8615":[{"length":32,"start":1488}],"8618":[{"length":32,"start":1530}],"17237":[{"length":32,"start":336},{"length":32,"start":821},{"length":32,"start":1068},{"length":32,"start":1429},{"length":32,"start":1878},{"length":32,"start":2031},{"length":32,"start":2456},{"length":32,"start":2563},{"length":32,"start":3275}]},"linkReferences":{},"object":"6080604081815260049182361015610015575f80fd5b5f3560e01c90816301ffc9a714610b655750806306fdde0314610a93578063095ea7b314610a3c57806318160ddd146109d057806323b872dd1461094d57806323de66511461091b57806330adf81f146108e1578063313ce567146108c65780633644e515146108a35780635687f2b814610851578063627cdcb914610828578063679aefce146107bc57806370a082311461070e5780637ecebe00146106d757806384b0196e146105b95780638d928af81461057657806395d89b411461048a578063a9059cbb146103c8578063d505accf146101cc5763dd62ed3e146100fb575f80fd5b346101b757806003193601126101b7576020610115610bbe565b606461011f610bd4565b845163927da10560e01b815230968101969096526001600160a01b03928316602487015282166044860152849182907f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101c3575f9161018a575b6020925051908152f35b90506020823d6020116101bb575b816101a560209383610c87565b810103126101b7576020915190610180565b5f80fd5b3d9150610198565b513d5f823e3d90fd5b50346101b75760e03660031901126101b7576101e6610bbe565b906101ef610bd4565b604435926064359060843560ff811681036101b7578242116103b65761022f826001600160a01b03165f52600260205260405f2080549060018201905590565b90855160208101907f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c982526001600160a01b039586861694858a84015287891660608401528a608084015260a083015260c082015260c0815260e0810181811067ffffffffffffffff8211176103a357926102e6926102dd9288958b525190206102b7610d06565b908a519161190160f01b83526002830152602282015260c43591604260a4359220610fec565b90929192611079565b1681810361038f5750505f849596610331602096519889968795869463e1f21c6760e01b865285016040919493929460608201956001600160a01b0380921683521660208201520152565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156101c3575061036557005b6103869060203d602011610388575b61037e8183610c87565b810190610ca9565b005b503d610374565b876325c0072360e11b5f525260245260445ffd5b60418b634e487b7160e01b5f525260245ffd5b828763313c898160e11b5f525260245ffd5b50346101b757806003193601126101b757602061041f926103e7610bbe565b83516317d5759960e31b8152339281019283526001600160a01b03909116602083015260243560408301529384918291606090910190565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af191821561048057602092610465575b505160018152f35b61047b90833d85116103885761037e8183610c87565b61045d565b50513d5f823e3d90fd5b5090346101b7575f3660031901126101b757815191825f83546104ac81610c1f565b90818452602095600191876001821691825f1461054f5750506001146104f3575b5050506104ef92916104e0910385610c87565b51928284938452830190610b9a565b0390f35b5f90815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82841061053757505050820101816104e06104ef6104cd565b8054848a01860152889550879490930192810161051e565b60ff19168782015293151560051b860190930193508492506104e091506104ef90506104cd565b50346101b7575f3660031901126101b757602090516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5090346101b7575f3660031901126101b7576105f47f0000000000000000000000000000000000000000000000000000000000000000610e31565b9161061e7f0000000000000000000000000000000000000000000000000000000000000000610f2e565b815191602091602084019484861067ffffffffffffffff8711176106c45750610679826020928761066c99989795525f85528151988998600f60f81b8a5260e0868b015260e08a0190610b9a565b9188830390890152610b9a565b914660608701523060808701525f60a087015285830360c087015251918281520192915f5b8281106106ad57505050500390f35b83518552869550938101939281019260010161069e565b604190634e487b7160e01b5f525260245ffd5b50346101b75760203660031901126101b7576020906001600160a01b036106fc610bbe565b165f5260028252805f20549051908152f35b5090346101b757602091826003193601126101b7578261072c610bbe565b60446001600160a01b03948585519687948593633de222bb60e21b855230908501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610480575f9261078d575b5051908152f35b9091508281813d83116107b5575b6107a58183610c87565b810103126101b75751905f610786565b503d61079b565b50346101b7575f3660031901126101b757805191634f037ee760e01b835230908301526020826024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101c3575f9161018a576020925051908152f35b346101b7575f3660031901126101b757335f908152600260205260409020805460018101909155005b50346101b75760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92561088336610bea565b93919461088e610cc1565b519384526001600160a01b03908116941692a3005b50346101b7575f3660031901126101b7576020906108bf610d06565b9051908152f35b50346101b7575f3660031901126101b7576020905160128152f35b50346101b7575f3660031901126101b757602090517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b50346101b75760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61088336610bea565b50346101b75760205f608461096136610bea565b8651630aed65f560e11b815233988101989098526001600160a01b03928316602489015290821660448801526064870152859283917f0000000000000000000000000000000000000000000000000000000000000000165af19182156104805760209261046557505160018152f35b50346101b7575f3660031901126101b7578051916339370aa960e21b835230908301526020826024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101c3575f9161018a576020925051908152f35b50346101b757806003193601126101b757602061041f92610a5b610bbe565b835163e1f21c6760e01b8152339281019283526001600160a01b03909116602083015260243560408301529384918291606090910190565b50346101b7575f3660031901126101b75780516003549091825f610ab684610c1f565b808352602094600190866001821691825f14610b43575050600114610ae8575b50506104ef92916104e0910385610c87565b9085925060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f925b828410610b2b57505050820101816104e0610ad6565b8054848a018601528895508794909301928101610b15565b60ff19168682015292151560051b850190920192508391506104e09050610ad6565b83346101b75760203660031901126101b757359063ffffffff60e01b82168092036101b7576020916301ffc9a760e01b148152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036101b757565b602435906001600160a01b03821682036101b757565b60609060031901126101b7576001600160a01b039060043582811681036101b7579160243590811681036101b7579060443590565b90600182811c92168015610c4d575b6020831014610c3957565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610c2e565b6040810190811067ffffffffffffffff821117610c7357604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff821117610c7357604052565b908160209103126101b7575180151581036101b75790565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303610cf357565b63089676d560e01b5f523360045260245ffd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016301480610e08575b15610d61577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff821117610c735760405251902090565b507f00000000000000000000000000000000000000000000000000000000000000004614610d38565b60ff8114610e6c5760ff811690601f8211610e5d5760405191610e5383610c57565b8252602082015290565b632cd44ac360e21b5f5260045ffd5b506040515f815f5491610e7e83610c1f565b80835292602090600190818116908115610f0a5750600114610eac575b5050610ea992500382610c87565b90565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b828410610ef25750610ea99450505081016020015f80610e9b565b85548785018301529485019486945092810192610ed7565b91505060209250610ea994915060ff191682840152151560051b8201015f80610e9b565b60ff8114610f505760ff811690601f8211610e5d5760405191610e5383610c57565b506040515f81600191600154610f6581610c1f565b8084529360209160018116908115610f0a5750600114610f8d575050610ea992500382610c87565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b828410610fd45750610ea99450505081016020015f80610e9b565b85548785018301529485019486945092810192610fb9565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161106e579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611063575f516001600160a01b0381161561105957905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b60048110156110d9578061108b575050565b600181036110a25763f645eedf60e01b5f5260045ffd5b600281036110bd575063fce698f760e01b5f5260045260245ffd5b6003146110c75750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea26469706673582212206c08c920e4d4f538c7578746879f6231fba5c89e71c71178e26f02698de5dd7a64736f6c634300081a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0xB65 JUMPI POP DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xA93 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xA3C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x9D0 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x94D JUMPI DUP1 PUSH4 0x23DE6651 EQ PUSH2 0x91B JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x8E1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x8C6 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x8A3 JUMPI DUP1 PUSH4 0x5687F2B8 EQ PUSH2 0x851 JUMPI DUP1 PUSH4 0x627CDCB9 EQ PUSH2 0x828 JUMPI DUP1 PUSH4 0x679AEFCE EQ PUSH2 0x7BC JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x70E JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x6D7 JUMPI DUP1 PUSH4 0x84B0196E EQ PUSH2 0x5B9 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x576 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x48A JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x3C8 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x1CC JUMPI PUSH4 0xDD62ED3E EQ PUSH2 0xFB JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1B7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH2 0x115 PUSH2 0xBBE JUMP JUMPDEST PUSH1 0x64 PUSH2 0x11F PUSH2 0xBD4 JUMP JUMPDEST DUP5 MLOAD PUSH4 0x927DA105 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS SWAP7 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x24 DUP8 ADD MSTORE DUP3 AND PUSH1 0x44 DUP7 ADD MSTORE DUP5 SWAP2 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1C3 JUMPI PUSH0 SWAP2 PUSH2 0x18A JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1BB JUMPI JUMPDEST DUP2 PUSH2 0x1A5 PUSH1 0x20 SWAP4 DUP4 PUSH2 0xC87 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0x180 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x198 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH2 0x1E6 PUSH2 0xBBE JUMP JUMPDEST SWAP1 PUSH2 0x1EF PUSH2 0xBD4 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH1 0x84 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x1B7 JUMPI DUP3 TIMESTAMP GT PUSH2 0x3B6 JUMPI PUSH2 0x22F DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP1 DUP6 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 DUP7 AND SWAP5 DUP6 DUP11 DUP5 ADD MSTORE DUP8 DUP10 AND PUSH1 0x60 DUP5 ADD MSTORE DUP11 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 MSTORE PUSH1 0xE0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x3A3 JUMPI SWAP3 PUSH2 0x2E6 SWAP3 PUSH2 0x2DD SWAP3 DUP9 SWAP6 DUP12 MSTORE MLOAD SWAP1 KECCAK256 PUSH2 0x2B7 PUSH2 0xD06 JUMP JUMPDEST SWAP1 DUP11 MLOAD SWAP2 PUSH2 0x1901 PUSH1 0xF0 SHL DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0xFEC JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x1079 JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0x38F JUMPI POP POP PUSH0 DUP5 SWAP6 SWAP7 PUSH2 0x331 PUSH1 0x20 SWAP7 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH4 0xE1F21C67 PUSH1 0xE0 SHL DUP7 MSTORE DUP6 ADD PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 SWAP5 PUSH1 0x60 DUP3 ADD SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP4 MSTORE AND PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x1C3 JUMPI POP PUSH2 0x365 JUMPI STOP JUMPDEST PUSH2 0x386 SWAP1 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x388 JUMPI JUMPDEST PUSH2 0x37E DUP2 DUP4 PUSH2 0xC87 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xCA9 JUMP JUMPDEST STOP JUMPDEST POP RETURNDATASIZE PUSH2 0x374 JUMP JUMPDEST DUP8 PUSH4 0x25C00723 PUSH1 0xE1 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP12 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP8 PUSH4 0x313C8981 PUSH1 0xE1 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH2 0x41F SWAP3 PUSH2 0x3E7 PUSH2 0xBBE JUMP JUMPDEST DUP4 MLOAD PUSH4 0x17D57599 PUSH1 0xE3 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x480 JUMPI PUSH1 0x20 SWAP3 PUSH2 0x465 JUMPI JUMPDEST POP MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x47B SWAP1 DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x388 JUMPI PUSH2 0x37E DUP2 DUP4 PUSH2 0xC87 JUMP JUMPDEST PUSH2 0x45D JUMP JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI DUP2 MLOAD SWAP2 DUP3 PUSH0 DUP4 SLOAD PUSH2 0x4AC DUP2 PUSH2 0xC1F JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x54F JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x4F3 JUMPI JUMPDEST POP POP POP PUSH2 0x4EF SWAP3 SWAP2 PUSH2 0x4E0 SWAP2 SUB DUP6 PUSH2 0xC87 JUMP JUMPDEST MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0xB9A JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 SWAP1 DUP2 MSTORE DUP7 SWAP4 POP SWAP2 SWAP1 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0x537 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x4E0 PUSH2 0x4EF PUSH2 0x4CD JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x51E JUMP JUMPDEST PUSH1 0xFF NOT AND DUP8 DUP3 ADD MSTORE SWAP4 ISZERO ISZERO PUSH1 0x5 SHL DUP7 ADD SWAP1 SWAP4 ADD SWAP4 POP DUP5 SWAP3 POP PUSH2 0x4E0 SWAP2 POP PUSH2 0x4EF SWAP1 POP PUSH2 0x4CD JUMP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH2 0x5F4 PUSH32 0x0 PUSH2 0xE31 JUMP JUMPDEST SWAP2 PUSH2 0x61E PUSH32 0x0 PUSH2 0xF2E JUMP JUMPDEST DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP2 PUSH1 0x20 DUP5 ADD SWAP5 DUP5 DUP7 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP8 GT OR PUSH2 0x6C4 JUMPI POP PUSH2 0x679 DUP3 PUSH1 0x20 SWAP3 DUP8 PUSH2 0x66C SWAP10 SWAP9 SWAP8 SWAP6 MSTORE PUSH0 DUP6 MSTORE DUP2 MLOAD SWAP9 DUP10 SWAP9 PUSH1 0xF PUSH1 0xF8 SHL DUP11 MSTORE PUSH1 0xE0 DUP7 DUP12 ADD MSTORE PUSH1 0xE0 DUP11 ADD SWAP1 PUSH2 0xB9A JUMP JUMPDEST SWAP2 DUP9 DUP4 SUB SWAP1 DUP10 ADD MSTORE PUSH2 0xB9A JUMP JUMPDEST SWAP2 CHAINID PUSH1 0x60 DUP8 ADD MSTORE ADDRESS PUSH1 0x80 DUP8 ADD MSTORE PUSH0 PUSH1 0xA0 DUP8 ADD MSTORE DUP6 DUP4 SUB PUSH1 0xC0 DUP8 ADD MSTORE MLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP3 SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x6AD JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x69E JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x6FC PUSH2 0xBBE JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B7 JUMPI DUP3 PUSH2 0x72C PUSH2 0xBBE JUMP JUMPDEST PUSH1 0x44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 DUP6 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH4 0x3DE222BB PUSH1 0xE2 SHL DUP6 MSTORE ADDRESS SWAP1 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x480 JUMPI PUSH0 SWAP3 PUSH2 0x78D JUMPI JUMPDEST POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x7B5 JUMPI JUMPDEST PUSH2 0x7A5 DUP2 DUP4 PUSH2 0xC87 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1B7 JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x786 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x79B JUMP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI DUP1 MLOAD SWAP2 PUSH4 0x4F037EE7 PUSH1 0xE0 SHL DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1C3 JUMPI PUSH0 SWAP2 PUSH2 0x18A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x883 CALLDATASIZE PUSH2 0xBEA JUMP JUMPDEST SWAP4 SWAP2 SWAP5 PUSH2 0x88E PUSH2 0xCC1 JUMP JUMPDEST MLOAD SWAP4 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x8BF PUSH2 0xD06 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x883 CALLDATASIZE PUSH2 0xBEA JUMP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH0 PUSH1 0x84 PUSH2 0x961 CALLDATASIZE PUSH2 0xBEA JUMP JUMPDEST DUP7 MLOAD PUSH4 0xAED65F5 PUSH1 0xE1 SHL DUP2 MSTORE CALLER SWAP9 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x24 DUP10 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP9 ADD MSTORE PUSH1 0x64 DUP8 ADD MSTORE DUP6 SWAP3 DUP4 SWAP2 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x480 JUMPI PUSH1 0x20 SWAP3 PUSH2 0x465 JUMPI POP MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI DUP1 MLOAD SWAP2 PUSH4 0x39370AA9 PUSH1 0xE2 SHL DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1C3 JUMPI PUSH0 SWAP2 PUSH2 0x18A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH2 0x41F SWAP3 PUSH2 0xA5B PUSH2 0xBBE JUMP JUMPDEST DUP4 MLOAD PUSH4 0xE1F21C67 PUSH1 0xE0 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI DUP1 MLOAD PUSH1 0x3 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0xAB6 DUP5 PUSH2 0xC1F JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0xB43 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xAE8 JUMPI JUMPDEST POP POP PUSH2 0x4EF SWAP3 SWAP2 PUSH2 0x4E0 SWAP2 SUB DUP6 PUSH2 0xC87 JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0xB2B JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x4E0 PUSH2 0xAD6 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0xB15 JUMP JUMPDEST PUSH1 0xFF NOT AND DUP7 DUP3 ADD MSTORE SWAP3 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD SWAP1 SWAP3 ADD SWAP3 POP DUP4 SWAP2 POP PUSH2 0x4E0 SWAP1 POP PUSH2 0xAD6 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP2 PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL EQ DUP2 MSTORE RETURN JUMPDEST DUP1 MLOAD DUP1 DUP4 MSTORE PUSH1 0x20 SWAP3 SWAP2 DUP2 SWAP1 DUP5 ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x1B7 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x1B7 JUMPI JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x1B7 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x1B7 JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0xC4D JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0xC39 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0xC2E JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC73 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F DUP1 NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC73 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x1B7 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x1B7 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0xCF3 JUMPI JUMP JUMPDEST PUSH4 0x89676D5 PUSH1 0xE0 SHL PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0xE08 JUMPI JUMPDEST ISZERO PUSH2 0xD61 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC73 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0xD38 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0xE6C JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0xE5D JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0xE53 DUP4 PUSH2 0xC57 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH4 0x2CD44AC3 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0xE7E DUP4 PUSH2 0xC1F JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0xF0A JUMPI POP PUSH1 0x1 EQ PUSH2 0xEAC JUMPI JUMPDEST POP POP PUSH2 0xEA9 SWAP3 POP SUB DUP3 PUSH2 0xC87 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0xEF2 JUMPI POP PUSH2 0xEA9 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0xE9B JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0xED7 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 SWAP3 POP PUSH2 0xEA9 SWAP5 SWAP2 POP PUSH1 0xFF NOT AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0xE9B JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0xF50 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0xE5D JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0xE53 DUP4 PUSH2 0xC57 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0xF65 DUP2 PUSH2 0xC1F JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0xF0A JUMPI POP PUSH1 0x1 EQ PUSH2 0xF8D JUMPI POP POP PUSH2 0xEA9 SWAP3 POP SUB DUP3 PUSH2 0xC87 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0xFD4 JUMPI POP PUSH2 0xEA9 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0xE9B JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0xFB9 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x106E JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x1063 JUMPI PUSH0 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x1059 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x10D9 JUMPI DUP1 PUSH2 0x108B JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x10A2 JUMPI PUSH4 0xF645EEDF PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x10BD JUMPI POP PUSH4 0xFCE698F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x10C7 JUMPI POP JUMP JUMPDEST PUSH4 0x35E2F383 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH13 0x8C920E4D4F538C7578746879F PUSH3 0x31FBA5 0xC8 SWAP15 PUSH18 0xC71178E26F02698DE5DD7A64736F6C634300 ADDMOD BYTE STOP CALLER ","sourceMap":"1269:5749:51:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2839:33;1269:5749;2839:33;;;4124:49;1269:5749;4124:49;;;1269:5749;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6973:36;1269:5749;6973:36;;;1269:5749;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;-1:-1:-1;;;3545:47:51;;3570:4;3545:47;;;1269:5749;;;;-1:-1:-1;;;;;1269:5749:51;;;;;;;;;;;;;;;;;3545:6;1269:5749;3545:47;;;;;;;1269:5749;3545:47;;;1269:5749;;;;;;;;;3545:47;;;1269:5749;3545:47;;1269:5749;3545:47;;;;;;1269:5749;3545:47;;;:::i;:::-;;;1269:5749;;;;;;;3545:47;;;1269:5749;;;;3545:47;;;-1:-1:-1;3545:47:51;;;1269:5749;;;;;;;;;;;;;;;-1:-1:-1;;1269:5749:51;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;5510:15;;:26;5506:97;;5696:16;;-1:-1:-1;;;;;1269:5749:51;-1:-1:-1;1269:5749:51;1121:7:39;1269:5749:51;;;-1:-1:-1;1269:5749:51;;;;;;;;;759:395:39;;5696:16:51;1269:5749;;;;5644:79;;1269:5749;1443:95;1269:5749;;-1:-1:-1;;;;;1269:5749:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5644:79;;1269:5749;;;;;;;;;;;;;7021:8:43;1269:5749:51;6967:25:43;1269:5749:51;;;;;;5634:90;;5053:20:44;;:::i;:::-;3515:233:45;;;;-1:-1:-1;;;3515:233:45;;;;;;;;;;1269:5749:51;;;3515:233:45;1269:5749:51;;3515:233:45;;6967:25:43;:::i;:::-;7021:8;;;;;:::i;:::-;1269:5749:51;5848:15;;;5844:88;;1269:5749;;;;;;5942:38;1269:5749;;;;;;;;;;;;;5942:38;;;;1269:5749;;;;;;;;;;-1:-1:-1;;;;;1269:5749:51;;;;;;;;;;;;;5942:38;;:6;;1269:5749;5942:38;;;;;;;;;;1269:5749;5942:38;;;1269:5749;5942:38;1269:5749;5942:38;;;;;;;;:::i;:::-;;;;;:::i;:::-;1269:5749;5942:38;;;;;5844:88;5886:35;;;;1269:5749;5886:35;1269:5749;;;;;5886:35;1269:5749;;;;;;;;;;;;5506:97;5559:33;;;;;1269:5749;5559:33;1269:5749;;;5559:33;1269:5749;;;;;;;;;;;;;;3345:39;1269:5749;;;:::i;:::-;;;-1:-1:-1;;;3345:39:51;;3361:10;3345:39;;;1269:5749;;;-1:-1:-1;;;;;1269:5749:51;;;;;;;;;;;;;;;;;;;;;;;;3345:39;;:6;1269:5749;-1:-1:-1;;;;;3345:6:51;1269:5749;3345:39;;;;;;;1269:5749;3345:39;;;1269:5749;;;;;;;3345:39;;;;;;;;;;;;;:::i;:::-;;;;1269:5749;;;;;;;;;;;;;;;;;-1:-1:-1;;1269:5749:51;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;1269:5749:51;;;;;;;;;-1:-1:-1;;;1269:5749:51;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;;;;;;;;;;-1:-1:-1;;1269:5749:51;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;-1:-1:-1;1269:5749:51;;-1:-1:-1;1269:5749:51;;-1:-1:-1;1269:5749:51;;;;;;;;;-1:-1:-1;;1269:5749:51;;;;;;;-1:-1:-1;;;;;2951:6:51;1269:5749;;;;;;;;;;;;-1:-1:-1;;1269:5749:51;;;;6099:41:44;:5;:41;:::i;:::-;6554:8;:47;:8;:47;:::i;:::-;1269:5749:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;5590:13:44;;1269:5749:51;;;;5625:4:44;1269:5749:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;;;;;;;6584:16:44;1269:5749:51;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1269:5749:51;;;;;;-1:-1:-1;;;;;1269:5749:51;;:::i;:::-;;;;624:7:39;1269:5749:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;1269:5749:51;;;;;;;;;;;;3082:40;;3107:4;3082:40;;;1269:5749;;;;;;3082:6;1269:5749;3082:40;;;;;;;1269:5749;3082:40;;;1269:5749;;;;;;;3082:40;;;;;;;;;;;;;;;;;:::i;:::-;;;1269:5749;;;;;3082:40;;;;;;;;;1269:5749;;;;;;;-1:-1:-1;;1269:5749:51;;;;;;;;;;6973:36;;7003:4;6973:36;;;1269:5749;6973:36;2951:6;1269:5749;2951:6;-1:-1:-1;;;;;2951:6:51;1269:5749;6973:36;;;;;;;1269:5749;6973:36;;;;1269:5749;;;;;;;;;;;;;-1:-1:-1;;1269:5749:51;;;;6339:10;-1:-1:-1;1269:5749:51;;;1121:7:39;1269:5749:51;;;;;;;;;;;;;;;;;;;;5175:32;1269:5749;;;:::i;:::-;436:67:55;;;;;:::i;:::-;1269:5749:51;;;;-1:-1:-1;;;;;1269:5749:51;;;;;;5175:32;1269:5749;;;;;;;;-1:-1:-1;;1269:5749:51;;;;;6533:20;;;:::i;:::-;1269:5749;;;;;;;;;;;;;-1:-1:-1;;1269:5749:51;;;;;;;2727:2;1269:5749;;;;;;;;;;-1:-1:-1;;1269:5749:51;;;;;;;1443:95;1269:5749;;;;;;;;;4942:26;1269:5749;;;:::i;:::-;;;;;4124:49;1269:5749;;;;;:::i;:::-;;;-1:-1:-1;;;4124:49:51;;4144:10;4124:49;;;1269:5749;;;;-1:-1:-1;;;;;1269:5749:51;;;;;;;;;;;;;;;;;;;;;;4124:6;1269:5749;4124:49;;;;;;;;;;;1269:5749;;4190:4;1269:5749;;;;;;;;;;-1:-1:-1;;1269:5749:51;;;;;;;;;;2839:33;;2866:4;2839:33;;;1269:5749;2839:33;:6;1269:5749;2839:6;-1:-1:-1;;;;;2839:6:51;1269:5749;2839:33;;;;;;;1269:5749;2839:33;;;;1269:5749;;;;;;;;;;;;;;;;;;;;;3819:43;1269:5749;;;:::i;:::-;;;-1:-1:-1;;;3819:43:51;;3834:10;3819:43;;;1269:5749;;;-1:-1:-1;;;;;1269:5749:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1269:5749:51;;;;;;2434:8;1269:5749;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;2434:8;1269:5749;;;;;;;;;;;;-1:-1:-1;;;1269:5749:51;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;;;;;;;;;;-1:-1:-1;;1269:5749:51;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;-1:-1:-1;1269:5749:51;;-1:-1:-1;1269:5749:51;;;;;;;;;-1:-1:-1;;1269:5749:51;;;;;;;;;;;;;;;;;876:25:46;;;;861:40;1269:5749:51;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;;;;;;;-1:-1:-1;;1269:5749:51;;;;:::o;:::-;;;;-1:-1:-1;;;;;1269:5749:51;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1269:5749:51;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;;;;;1269:5749:51;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;509:165:55:-;-1:-1:-1;;;;;586:6:55;1269:5749:51;564:10:55;:29;560:108;;509:165::o;560:108::-;616:41;;;;;564:10;616:41;1269:5749:51;;616:41:55;;3845:262:44;-1:-1:-1;;;;;3938:11:44;1269:5749:51;3929:4:44;3921:28;:63;;;3845:262;3917:184;;;4007:22;4000:29;:::o;3917:184::-;1269:5749:51;;4204:80:44;;;1269:5749:51;2079:95:44;1269:5749:51;;4226:11:44;1269:5749:51;2079:95:44;;1269:5749:51;4239:14:44;2079:95;;;1269:5749:51;4255:13:44;2079:95;;;1269:5749:51;3929:4:44;2079:95;;;1269:5749:51;2079:95:44;4204:80;;2079:95;1269:5749:51;;;;;;;;;;;;;;4194:91:44;;4060:30;:::o;3921:63::-;3970:14;;3953:13;:31;3921:63;;3385:267:40;1390:66;3508:46;;1390:66;;;2652:40;;2706:11;2715:2;2706:11;;2702:69;;1269:5749:51;;;;;;:::i;:::-;2367:90:40;;2311:2;1269:5749:51;;2367:90:40;3570:22;:::o;2702:69::-;2740:20;;;1269:5749:51;2740:20:40;;1269:5749:51;2740:20:40;3504:142;1269:5749:51;;;-1:-1:-1;1269:5749:51;-1:-1:-1;1269:5749:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1390:66:40;;;;;;;;:::i;:::-;3623:12;:::o;1269:5749:51:-;;;;-1:-1:-1;1269:5749:51;;;;-1:-1:-1;1269:5749:51;;;;;;;-1:-1:-1;1390:66:40;;-1:-1:-1;;;1269:5749:51;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;;;;;;;;;;;;1390:66:40;1269:5749:51;;;;;;;;;;;;;;;;;;;;;3385:267:40;1390:66;3508:46;;1390:66;;;2652:40;;2706:11;2715:2;2706:11;;2702:69;;1269:5749:51;;;;;;:::i;3504:142:40:-;1269:5749:51;;;-1:-1:-1;6584:16:44;;1269:5749:51;6584:16:44;1269:5749:51;;;;:::i;:::-;;;;;;;6584:16:44;1269:5749:51;;;6584:16:44;;;;1269:5749:51;;;;;1390:66:40;;;;;;;;:::i;1269:5749:51:-;;;;6584:16:44;-1:-1:-1;1269:5749:51;;;-1:-1:-1;1269:5749:51;;;;;;;-1:-1:-1;1390:66:40;;-1:-1:-1;;;1269:5749:51;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:51;;;;;;5140:1530:43;;;6199:66;6186:79;;6182:164;;1269:5749:51;;;;;;;;;;;;;;;;;;;;;;;;;;6457:24:43;;;;;;;;;1269:5749:51;6457:24:43;-1:-1:-1;;;;;1269:5749:51;;6495:20:43;6491:113;;6614:49;1269:5749:51;6614:49:43;1269:5749:51;5140:1530:43;:::o;6491:113::-;6531:62;1269:5749:51;6531:62:43;6457:24;6531:62;1269:5749:51;6531:62:43;:::o;6457:24::-;1269:5749:51;;;;;;;;;6182:164:43;6281:54;;;1269:5749:51;6281:54:43;6301:30;6281:54;;:::o;7196:532::-;1269:5749:51;;;;;;7282:29:43;;;7327:7;;:::o;7278:444::-;1269:5749:51;7378:38:43;;1269:5749:51;;7439:23:43;;;-1:-1:-1;7439:23:43;1269:5749:51;-1:-1:-1;7439:23:43;7374:348;7492:35;7483:44;;7492:35;;7550:46;;;;-1:-1:-1;7550:46:43;1269:5749:51;;;-1:-1:-1;7550:46:43;7479:243;7626:30;7617:39;7613:109;;7479:243;7196:532::o;7613:109::-;7679:32;;;-1:-1:-1;7679:32:43;1269:5749:51;;;-1:-1:-1;7679:32:43;1269:5749:51;;;;7291:20:43;1269:5749:51;;;;;7291:20:43;1269:5749:51"},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","PERMIT_TYPEHASH()":"30adf81f","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","eip712Domain()":"84b0196e","emitApproval(address,address,uint256)":"5687f2b8","emitTransfer(address,address,uint256)":"23de6651","getRate()":"679aefce","getVault()":"8d928af8","incrementNonce()":"627cdcb9","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault_\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"bptName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"bptSymbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emitApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emitTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incrementNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the ERC-20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[ERC-2612].\",\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC2612ExpiredSignature(uint256)\":[{\"params\":{\"deadline\":\"The permit deadline that expired\"}}],\"ERC2612InvalidSigner(address,address)\":[{\"params\":{\"owner\":\"The address of the owner (expected value of the signature provider)\",\"signer\":\"The address corresponding to the signature provider\"}}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"emitApproval(address,address,uint256)\":{\"details\":\"Emit the Approval event. This function can only be called by the MultiToken.\"},\"emitTransfer(address,address,uint256)\":{\"details\":\"Emit the Transfer event. This function can only be called by the MultiToken.\"},\"getRate()\":{\"details\":\"The VaultExtension contract defines a default implementation (`getBptRate`) to calculate the rate of any given pool, which should be sufficient in nearly all cases.\",\"returns\":{\"_0\":\"rate Rate of the pool's BPT\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"ERC2612ExpiredSignature(uint256)\":[{\"notice\":\"Operation failed due to an expired permit signature.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"notice\":\"Operation failed due to a non-matching signature.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}]},\"kind\":\"user\",\"methods\":{\"getRate()\":{\"notice\":\"Get the BPT rate, which is defined as: pool invariant/total supply.\"},\"incrementNonce()\":{\"notice\":\"Increment the sender's nonce to revoke any currently granted (but not yet executed) `permit`.\"}},\"notice\":\"`BalancerPoolToken` is a fully ERC20-compatible token to be used as the base contract for Balancer Pools, with all the data and implementation delegated to the ERC20Multitoken contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/BalancerPoolToken.sol\":\"BalancerPoolToken\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x743734d3d3503d705f0a778c4b0dd61fdb067e89a07481ddbead0654e6808318\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6198f27b2d01f346fdd3d1302e9a6ddd543d2f06afd675d84919c2242bd26d8d\",\"dweb:/ipfs/QmYntQih5MwxxdGnVu2BPVLeqFuJEH761cByAesjwE6JKT\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]}},\"version\":1}"}},"contracts/BasePoolMath.sol":{"BasePoolMath":{"abi":[{"inputs":[{"internalType":"uint256","name":"invariantRatio","type":"uint256"},{"internalType":"uint256","name":"maxInvariantRatio","type":"uint256"}],"name":"InvariantRatioAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"invariantRatio","type":"uint256"},{"internalType":"uint256","name":"minInvariantRatio","type":"uint256"}],"name":"InvariantRatioBelowMin","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212203d891a2f9ccd83509893f4dcfe5350a4869672a84cc43e66e79bfd5d48761a4364736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATASIZE DUP10 BYTE 0x2F SWAP13 0xCD DUP4 POP SWAP9 SWAP4 DELEGATECALL 0xDC INVALID MSTORE8 POP LOG4 DUP7 SWAP7 PUSH19 0xA84CC43E66E79BFD5D48761A4364736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"343:24265:52:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212203d891a2f9ccd83509893f4dcfe5350a4869672a84cc43e66e79bfd5d48761a4364736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATASIZE DUP10 BYTE 0x2F SWAP13 0xCD DUP4 POP SWAP9 SWAP4 DELEGATECALL 0xDC INVALID MSTORE8 POP LOG4 DUP7 SWAP7 PUSH19 0xA84CC43E66E79BFD5D48761A4364736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"343:24265:52:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxInvariantRatio\",\"type\":\"uint256\"}],\"name\":\"InvariantRatioAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minInvariantRatio\",\"type\":\"uint256\"}],\"name\":\"InvariantRatioBelowMin\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"InvariantRatioAboveMax(uint256,uint256)\":[{\"details\":\"This value is determined by each pool type, and depends on the specific math used to compute the price curve.\",\"params\":{\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"maxInvariantRatio\":\"The maximum allowed invariant ratio\"}}],\"InvariantRatioBelowMin(uint256,uint256)\":[{\"details\":\"This value is determined by each pool type, and depends on the specific math used to compute the price curve.\",\"params\":{\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"minInvariantRatio\":\"The minimum allowed invariant ratio\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"InvariantRatioAboveMax(uint256,uint256)\":[{\"notice\":\"An add liquidity operation increased the invariant above the limit.\"}],\"InvariantRatioBelowMin(uint256,uint256)\":[{\"notice\":\"A remove liquidity operation decreased the invariant below the limit.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/BasePoolMath.sol\":\"BasePoolMath\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"contracts/BasePoolMath.sol\":{\"keccak256\":\"0x28078c6fa4d55418c25505d4683642cb51fe55b2155ef7418db6c70631a30d6a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://864b91fdc2b69725bcc07f06d9adebe87117561582fa58f1e4410d8928cd205c\",\"dweb:/ipfs/QmWCDsbTxtmEMLhorqfGF1LDMHMqqVnV9sk9mUTPR7eog8\"]}},\"version\":1}"}},"contracts/Vault.sol":{"Vault":{"abi":[{"inputs":[{"internalType":"contract IVaultExtension","name":"vaultExtension","type":"address"},{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"},{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AllZeroInputs","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BalanceOverflow","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"invariantRatio","type":"uint256"},{"internalType":"uint256","name":"maxInvariantRatio","type":"uint256"}],"name":"InvariantRatioAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"invariantRatio","type":"uint256"},{"internalType":"uint256","name":"minInvariantRatio","type":"uint256"}],"name":"InvariantRatioBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"MultipleNonZeroInputs","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotStaticCall","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"PoolTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reentrancyGuardEntered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculated","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_contract_IVault_fromMemory":{"entryPoint":1268,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint32_fromMemory":{"entryPoint":1299,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":1233,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_5262":{"entryPoint":1186,"id":null,"parameterSlots":1,"returnSlots":0},"fun_calculateVaultStorageSlot":{"entryPoint":1327,"id":17510,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6101e06040908082523461036b576060816165dd803803809161002282856104d1565b83398101031261036b5780516001600160a01b0380821680830361036b5760208085015194838616860361036b5786015183811680910361036b57610086875161006b816104a2565b600a8152691a5cd55b9b1bd8dad95960b21b8482015261052f565b60c0526100b98751610097816104a2565b60118152701b9bdb96995c9bd1195b1d1850dbdd5b9d607a1b8482015261052f565b60e0526100e687516100ca816104a2565b600b81526a746f6b656e44656c74617360a81b8482015261052f565b9661010097885261011e81516100fb816104a2565b6012815271185919131a5c5d5a591a5d1e50d85b1b195960721b8582015261052f565b9661012097885261014d8251610133816104a2565b60098152681cd95cdcda5bdb925960ba1b8682015261052f565b9261014093845282519663fbfa77cf60e01b9081895260049887818b818c5afa9081156103af575f91610485575b50813091160361047757845191825286828a81865afa9182156103e8575f92610448575b503091160361043a576101c0978852600a80546001600160a01b0319169190911790558151634546891d60e11b81529380858881895afa948515610430575f95610411575b506101609485528251631060fdbd60e11b815296818882818a5afa978815610376575f986103f2575b506101a0978852835163cd51c12f60e01b81529682888381845afa9788156103e8575f986103b9575b506101809788528451630716585d60e51b815283818481855afa9081156103af57908492915f91610380575b5060805285516329cab55160e11b815292839182905afa918215610376575f92610344575b505060a05260098054610100600160a81b03191660089290921b610100600160a81b031691909117905551615fda97909690886106038939608051886152c0015260a051886135f8015260c0518881816111d401526114dd015260e051888181611215015281816146a601526146e8015251876146640152518681816112e60152612389015251858181611241015281816112b2015261235501525184505051836118730152518261190901525181818161096f01526114470152f35b90809250813d831161036f575b61035b81836104d1565b8101031261036b57515f80610287565b5f80fd5b503d610351565b84513d5f823e3d90fd5b83819492503d83116103a8575b61039781836104d1565b8101031261036b578391515f610262565b503d61038d565b86513d5f823e3d90fd5b6103da919850833d85116103e1575b6103d281836104d1565b810190610513565b965f610236565b503d6103c8565b85513d5f823e3d90fd5b61040a919850823d84116103e1576103d281836104d1565b965f61020d565b816104299296503d87116103e1576103d281836104d1565b935f6101e4565b83513d5f823e3d90fd5b86631bbe95c760e01b5f525ffd5b610469919250873d8911610470575b61046181836104d1565b8101906104f4565b905f61019f565b503d610457565b886301ab9d9d60e41b5f525ffd5b61049c9150883d8a116104705761046181836104d1565b5f61017b565b604081019081106001600160401b038211176104bd57604052565b634e487b7160e01b5f52604160045260245ffd5b601f909101601f19168101906001600160401b038211908210176104bd57604052565b9081602091031261036b57516001600160a01b038116810361036b5790565b9081602091031261036b575163ffffffff8116810361036b5790565b6040519061053c826104a2565b600c82526105bd603a602084016b5661756c7453746f7261676560a01b81526020604051948592828401977f62616c616e6365722d6c6162732e76332e73746f726167652e000000000000008952518091603986015e830190601760f91b60398301528051928391018583015e015f8382015203601a8101845201826104d1565b5190205f1981019081116105ee576040519060208201908152602082526105e3826104a2565b9051902060ff191690565b634e487b7160e01b5f52601160045260245ffdfe60806040526004361015610018575b3661143057611421565b5f3560e01c806315afd409146100d757806315dacbea146100d257806321457897146100cd5780632bfb780c146100c857806343583be5146100c357806348c89491146100be5780634af29ec4146100b9578063ae639329146100b4578063b9a8effa146100af578063beabacc8146100aa578063c9c1661b146100a55763d2c725e00361000e57610aae565b6109c9565b610993565b610950565b610866565b610796565b6106fd565b610671565b610599565b6104b4565b61020f565b6100fe565b6001600160a01b038116036100ed57565b5f80fd5b35906100fc826100dc565b565b346100ed5760403660031901126100ed5760043561011b816100dc565b60243561012661147a565b61012e6114db565b6001600160a01b0382165f818152600860209081526040918290205491516370a0823160e01b8152306004820152919492829060249082905afa93841561020a576101cd946101a1925f916101db575b508061019b856001600160a01b03165f52600860205260405f2090565b55610b28565b918083116101d1575b50816101b591611513565b6101bd6114b6565b6040519081529081906020820190565b0390f35b91506101b56101aa565b6101fd915060203d602011610203575b6101f581836102cd565b810190610aec565b5f61017e565b503d6101eb565b610afb565b346100ed5760803660031901126100ed5761025d60043561022f816100dc565b60243561023b816100dc565b60443590610248826100dc565b61025760643580948333611535565b336116b5565b602060405160018152f35b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff811161029057604052565b610268565b60e0810190811067ffffffffffffffff82111761029057604052565b6060810190811067ffffffffffffffff82111761029057604052565b90601f8019910116810190811067ffffffffffffffff82111761029057604052565b6040519060c0820182811067ffffffffffffffff82111761029057604052565b604051906100fc82610295565b60405190610180820182811067ffffffffffffffff82111761029057604052565b67ffffffffffffffff81116102905760051b60200190565b9080601f830112156100ed57602090823561036f8161033d565b9361037d60405195866102cd565b81855260208086019260051b8201019283116100ed57602001905b8282106103a6575050505090565b81358152908301908301610398565b359060048210156100ed57565b67ffffffffffffffff811161029057601f01601f191660200190565b9291926103ea826103c2565b916103f860405193846102cd565b8294818452818301116100ed578281602093845f960137010152565b9080601f830112156100ed5781602061042f933591016103de565b90565b9081518082526020808093019301915f5b828110610451575050505090565b835185529381019392810192600101610443565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b916104a69061042f94928452606060208501526060840190610432565b916040818403910152610465565b346100ed576003196020368201126100ed5760043567ffffffffffffffff918282116100ed5760c09082360301126100ed576104ee6102ef565b6104fa826004016100f1565b8152610508602483016100f1565b60208201526044820135604082015260648201358381116100ed576105339060043691850101610355565b6060820152610544608483016103b5565b608082015260a48201359283116100ed5761056b6105759260046101cd9536920101610414565b60a0820152610b35565b60409391935193849384610489565b600211156100ed57565b35906100fc82610584565b346100ed576003196020368201126100ed5760043567ffffffffffffffff918282116100ed5760e09082360301126100ed576105d361030f565b6105df8260040161058e565b81526105ed602483016100f1565b60208201526105fe604483016100f1565b604082015261060f606483016100f1565b60608201526084820135608082015260a482013560a082015260c48201359283116100ed5761064a6106549260046101cd9536920101610414565b60c0820152610cbf565b604080519384526020840192909252908201529081906060820190565b346100ed5760a03660031901126100ed5760405160a0810181811067ffffffffffffffff821117610290576101cd91610654916040526004356106b381610584565b81526024356106c181610584565b60208201526044356106d2816100dc565b604082015260643560608201526084356080820152610f03565b90602061042f928181520190610465565b346100ed5760203660031901126100ed5767ffffffffffffffff6004358181116100ed57366023820112156100ed5780600401359182116100ed5736602483830101116100ed576101cd91602461075492016111c9565b604051918291826106ec565b359060058210156100ed57565b61078361042f9492606083526060830190610432565b9260208201526040818403910152610465565b346100ed576003196020368201126100ed5760043567ffffffffffffffff918282116100ed5760c09082360301126100ed576107d06102ef565b6107dc826004016100f1565b81526107ea602483016100f1565b602082015260448201358381116100ed5761080b9060043691850101610355565b60408201526064820135606082015261082660848301610760565b608082015260a48201359283116100ed5761084d6108579260046101cd9536920101610414565b60a082015261127d565b6040939193519384938461076d565b346100ed5760603660031901126100ed57600435610883816100dc565b60243590610890826100dc565b6044359061089c61147a565b6108a46114db565b6108b66108b083614618565b82614654565b6001600160a01b0381165f52600860205260405f208054938385039485116109415793905560405163a9059cbb60e01b60208201526001600160a01b03909316602484015260448084019290925290825261091c91906109176064836102cd565b615b9b565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b610b06565b5f9103126100ed57565b346100ed575f3660031901126100ed5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100ed5760603660031901126100ed5761025d6004356109b3816100dc565b6024356109bf816100dc565b60443591336116b5565b346100ed5760403660031901126100ed576004356109e6816100dc565b602435906109f3826100dc565b6001600160a01b0380911691825f525f602052600192600160405f20541615610a9c575f93929352600360205260405f20926040519283602086549182815201955f5260205f20925f905b828210610a6f5786610a5c87610a56838c03846102cd565b826145cb565b9051604080519182526020820192909252f35b90919280610a9086998483985416906001600160a01b036020921681520190565b98019493920190610a3e565b6327946f5760e21b5f5260045260245ffd5b346100ed575f3660031901126100ed5760207f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6040519015158152f35b908160209103126100ed575190565b6040513d5f823e3d90fd5b634e487b7160e01b5f52601160045260245ffd5b5f1981019190821161094157565b9190820391821161094157565b90610b3e6114db565b610b516001600160a01b03835116611837565b610b6a610b6583516001600160a01b031690565b61186b565b610b83610b7e83516001600160a01b031690565b611961565b90610bd7602083015151610b9e606086019182515190611e0c565b805160c0850190610bb882519160a0880192835191611e7c565b92610bc8875160019060101c1690565b610c50575b50505084846122bc565b9490919586610beb835160019060111c1690565b610bf9575b50505050929190565b84975093610c4694610c3c610c2f610c1885516001600160a01b031690565b6001600160a01b03165f52600260205260405f2090565b546001600160a01b031690565b94845133906129c4565b925f808080610bf0565b610c78610cb794888a610c70610c2f610c1883516001600160a01b031690565b923390611f8b565b610cac610ca6610c8f8a516001600160a01b031690565b6001600160a01b03165f52600560205260405f2090565b88612043565b519151905191611e7c565b5f8080610bcd565b90610cc86114db565b60208201906001600160a01b03610ce181845116611837565b610cf5610b6584516001600160a01b031690565b608084015115610ed15760408401516001600160a01b031690610d31610d2560608701516001600160a01b031690565b6001600160a01b031690565b911614610ec257610d4c610b7e83516001600160a01b031690565b92610d578482612b33565b90610d63858383612bca565b8551600c1c600116610e47575b8551610d8a9190600b1c600116610e06575b868484612f05565b9791979490978397610da18451600190600d1c1690565b610dd1575b505050505051610db581610ef4565b610dbe81610ef4565b610dc9575081929190565b918093509190565b85985090610df0610c2f610c18610dfb9894516001600160a01b031690565b94845191339261338a565b925f80808080610da6565b85516001600160a01b0316610e4060608601918251610e39610c2f836001600160a01b03165f52600260205260405f2090565b9185612e43565b9052610d82565b610e8090610e5c86516001600160a01b031690565b610e7a610c2f826001600160a01b03165f52600260205260405f2090565b91612d01565b610e9d610e97610c8f86516001600160a01b031690565b86612043565b610ea8828683612d88565b6040830152610d8a610ebb868484612bca565b9050610d70565b63a54b181d60e01b5f5260045ffd5b6357a456b760e01b5f5260045ffd5b634e487b7160e01b5f52602160045260245ffd5b60021115610efe57565b610ee0565b610f0b6114db565b600160075460021c166111a55760408101916001600160a01b03928381511693845f52600e6020528060405f205416156111925760049450610f4b61147a565b6020610f61610d2584516001600160a01b031690565b6040516338d52e0f60e01b815296879182905afa801561020a576080955f91611163575b5016610fa181610f9c84516001600160a01b031690565b6135b8565b81516001600160a01b031690610fbd60608601928351906135f5565b60016020860151610fcd81610ef4565b610fd681610ef4565b036110f857610ffe91855191610feb83610ef4565b84516001600160a01b0316915192613a34565b7feeb740c90bf2b18c9532eb7d473137767036d893dff3e009f32718f821b2a4c0829692979397968861105c61103e610d2589516001600160a01b031690565b94604051938493846040919493926060820195825260208201520152565b0390a25b805161106b81610ef4565b61107481610ef4565b6110c75701518084106110ad57506110a061109b91849283915b516001600160a01b031690565b6135f5565b6110a86114b6565b929190565b63e2ea151b60e01b5f52600484905260245260445ffd5b5ffd5b01518085116110e157506110a061109b918592839161108e565b63e2ea151b60e01b5f52600485905260245260445ffd5b61111b9185519161110883610ef4565b84516001600160a01b031691519261366e565b7f3771d13c67011e31e12031c54bb59b0bf544a80b81d280a3711e172aa8b7f47b829692979397968861115b61103e610d2589516001600160a01b031690565b0390a2611060565b611185915060203d60201161118b575b61117d81836102cd565b8101906111b4565b5f610f85565b503d611173565b846385f4129960e01b5f5260045260245ffd5b630f27df0960e01b5f5260045ffd5b908160209103126100ed575161042f816100dc565b91909161120b6112057f000000000000000000000000000000000000000000000000000000000000000092835c159586611274575b36916103de565b336156cc565b926112135750565b7f00000000000000000000000000000000000000000000000000000000000000005c611265575f905d6100fc7f0000000000000000000000000000000000000000000000000000000000000000613d31565b6320f1d86d60e01b5f5260045ffd5b6001855d6111fe565b906112866114db565b6112996001600160a01b03835116611837565b6112ad610b6583516001600160a01b031690565b61130a7f00000000000000000000000000000000000000000000000000000000000000005c6112e384516001600160a01b031690565b907f0000000000000000000000000000000000000000000000000000000000000000613d42565b61132361131e83516001600160a01b031690565b611bf0565b9061137760208301515161133e604086019182515190611e0c565b805160c085019061135882519160a0880192835191613d5b565b926113688751600190600e1c1690565b6113ca575b5050508484613f6a565b949095868461138b8451600190600f1c1690565b61139a575b5050505050929190565b6113c095506113b6610c2f610c1885516001600160a01b031690565b948451339061445b565b5f80808681611390565b6113f161141994888a6113ea610c2f610c1883516001600160a01b031690565b9233613e39565b61140e611408610c8f8a516001600160a01b031690565b886120a7565b519151905191613d5b565b5f808061136d565b637911c44b60e11b5f5260045ffd5b3461142157365f80375f8036816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af43d5f803e15611476573d5ff35b3d5ffd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c6114a7576001905d565b633ee5aeb560e01b5f5260045ffd5b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b7f00000000000000000000000000000000000000000000000000000000000000005c1561150457565b63604dd39b60e11b5f5260045ffd5b9061151d90614618565b90600160ff1b8214610941576100fc915f0390614654565b92919091611544828486614715565b60018101611554575b5050505050565b8082116116935703906001600160a01b03928381169384156116775780831695861561165b57846115b48561159e8661159e866001600160a01b03165f52601060205260405f2090565b906001600160a01b03165f5260205260405f2090565b551692833b156100ed57604051630ad0fe5760e31b81526001600160a01b039283166004820152919092166024820152604481018290527fa0175360a15bca328baf7ea85c7b784d58b222a50d0ce760b10dba336d226a6191611635915f8180606481015b038183895af1611642575b506040519081529081906020820190565b0390a45f8080808061154d565b8061164f6116559261027c565b80610946565b5f611624565b634a1406b160e11b5f526001600160a01b03841660045260245ffd5b63e602df0560e01b5f526001600160a01b03821660045260245ffd5b6001600160a01b0383637dc7a0d960e11b5f521660045260245260445260645ffd5b929091926001600160a01b039081841691821561181b578086169182156117ff576116f58661159e836001600160a01b03165f52600f60205260405f2090565b548086116117db5785900361171f8761159e846001600160a01b03165f52600f60205260405f2090565b5561173f8761159e836001600160a01b03165f52600f60205260405f2090565b8581540190551691827fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f6040518061177c88829190602083019252565b0390a4803b156100ed576040516323de665160e01b81526001600160a01b03938416600482015293909216602484015260448301525f908290818381606481015b03925af1801561020a576117ce5750565b8061164f6100fc9261027c565b63391434e360e21b5f526001600160a01b038716600452602452604485905260645ffd5b63ec442f0560e01b5f526001600160a01b03871660045260245ffd5b634b637e8f60e11b5f526001600160a01b03851660045260245ffd5b6001600160a01b0316805f525f602052600160405f2054811c16156118595750565b634bdace1360e01b5f5260045260245ffd5b63ffffffff807f00000000000000000000000000000000000000000000000000000000000000001642111580611953575b611944576001600160a01b0382165f525f60205260405f20549060018260021c16906118c6605a90565b906028820180921161094157826118fe575b505090506118e35750565b63d971f59760e01b5f526001600160a01b031660045260245ffd5b6119309250611939937f0000000000000000000000000000000000000000000000000000000000000000921c16615f8c565b63ffffffff1690565b421115805f806118d8565b6336a7e2cd60e21b5f5260045ffd5b506001600754811c1661189c565b60409081519161197083610295565b5f8352826020810191606080845281830190808252808401908082526080936080860182815260a0870183815260c088019384526119ac61147a565b6001600160a01b038a165f526005602052825f20935f602052835f20549260046020526119e8855f20946003602052865f209081549c52614761565b8b526119f38a6147b8565b88526119fe8a611e22565b8752611a098a611e22565b9052611a16898d51615bf2565b9052611a2188611e22565b81528a5191600199600184811c169384611bdc575b5083611bca575b5f5b8d8b8210611a9d575050505050505050505050505080611a8e611a76611a95936001600160a01b03165f52600560205260405f2090565b916001600160a01b03165f52600660205260405f2090565b9083614846565b61042f6114b6565b908a8d92828c8c8c611aff84611aeb81611add611ad88f8f61108e85611ac39251611e54565b6001600160a01b03165f5260205260405f2090565b614807565b94905f5260205260405f2090565b54945183611af98383611e54565b52611e54565b50611b09816149a1565b611b14858d51611e54565b52611b296001600160801b0384168587614a40565b878d8d15611bbd5782015115159182611b9f575b5050611b50575b50505050505b01611a3f565b82611b7392611b6a82611b638851615c4e565b9451611e54565b51961c85615c71565b9283611b83575b8e93508c611b44565b611b9693611b9091610b28565b91614a40565b5f8f8282611b7a565b90915051611bac81610ef4565b611bb581610ef4565b14875f611b3d565b5050505050505050611b4a565b8c5190935060031c6001161592611a3d565b611be7919450615c4e565b1515925f611a36565b604090815191611bff83610295565b5f8352826020810191606080845281830190808252808401908082526080936080860182815260a0870183815260c08801938452611c3b61147a565b6001600160a01b038a165f526005602052825f20935f602052835f2054926004602052611c77855f20946003602052865f209081549c52614761565b8b52611c828a6147b8565b8852611c8d8a611e22565b8752611c988a611e22565b9052611ca5898d51615bf2565b9052611cb088611e22565b81528a5191600199600184811c169384611df8575b5083611de6575b5f5b8d8b8210611d05575050505050505050505050505080611a8e611a76611a95936001600160a01b03165f52600560205260405f2090565b908a8d92828c8c8c611d2b84611aeb81611add611ad88f8f61108e85611ac39251611e54565b50611d35816149a1565b611d40858d51611e54565b52611d556001600160801b0384168587614a8d565b878d8d15611dd95782015115159182611dbb575b5050611d7c575b50505050505b01611cce565b82611d8f92611b6a82611b638851615c4e565b9283611d9f575b8e93508c611d70565b611db293611dac91610b28565b91614a8d565b5f8f8282611d96565b90915051611dc881610ef4565b611dd181610ef4565b14875f611d69565b5050505050505050611d76565b8c5190935060031c6001161592611ccc565b611e03919450615c4e565b1515925f611cc5565b03611e1357565b63aaad13f760e01b5f5260045ffd5b90611e2c8261033d565b611e3960405191826102cd565b8281528092611e4a601f199161033d565b0190602036910137565b8051821015611e685760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b9190825191611e8f825182519085614952565b611e9883611e22565b935f5b848110611eaa57505050505090565b80611edf611eba60019385611e54565b51611eda611ec88489611e54565b51611ed38589611e54565b519261498e565b614f33565b611ee98289611e54565b5201611e9b565b60041115610efe57565b519081151582036100ed57565b908160209103126100ed5761042f90611efa565b906004821015610efe5752565b959293611f59611f7d9561042f999793611f6f956001600160a01b038092168b521660208a01526040890190611f1b565b606087015260e0608087015260e0860190610432565b9084820360a0860152610432565b9160c0818403910152610465565b5f6001600160a01b036020959693611fea611fad87516001600160a01b031690565b94608088015197611fbd89611ef0565b60a0608060408301519c0151910151916040519b8c9a8b998a976302e97e7d60e61b895260048901611f28565b0393165af190811561020a575f91612014575b501561200557565b631557c43360e11b5f5260045ffd5b612036915060203d60201161203c575b61202e81836102cd565b810190611f07565b5f611ffd565b503d612024565b60208082015151925f5b84811061205b575050505050565b6001906120a16001600160801b03604061208161207b85838b0151611e54565b516149a1565b61208f8560a08b0151611e54565b52835f528587525f2054168287614a40565b0161204d565b60208082015151925f5b8481106120bf575050505050565b6001906120ff6001600160801b0360406120df61207b85838b0151611e54565b6120ed8560a08b0151611e54565b52835f528587525f2054168287614a8d565b016120b1565b60405190612112826102b1565b5f6040838281528260208201520152565b9080601f830112156100ed5781519060209161213e8161033d565b9361214c60405195866102cd565b81855260208086019260051b8201019283116100ed57602001905b828210612175575050505090565b81518152908301908301612167565b81601f820112156100ed5780519061219b826103c2565b926121a960405194856102cd565b828452602083830101116100ed57815f9260208093018386015e8301015290565b6080818303126100ed5780519260208201519167ffffffffffffffff928381116100ed57846121fa918301612123565b9360408201518481116100ed5781612213918401612123565b9360608301519081116100ed5761042f9201612184565b939061042f9593612268936001600160a01b0361225a93168752602087015260a0604087015260a0860190610432565b908482036060860152610432565b916080818403910152610465565b906001820180921161094157565b9190820180921161094157565b916122ae9061042f94928452606060208501526060840190610432565b916040818403910152610432565b926122c561147a565b6060916122d0612105565b9260208601906122e4825151808752611e22565b90608084019687516122f581611ef0565b6122fe81611ef0565b61270157506040840151906123138751611e22565b9561234f8360808c01516123496123318a516001600160a01b031690565b6001600160a01b03165f52601160205260405f205490565b90614ee2565b926123c07f00000000000000000000000000000000000000000000000000000000000000005c61238689516001600160a01b031690565b907f0000000000000000000000000000000000000000000000000000000000000000905f5260205260405f20905f5260205260405f205c90565b612684575b604087015180821161266c57506123de819a999a614f55565b60208a01985f5b8b51811015612527578c6123f98288611e54565b5161240381614f55565b61240d838a611e54565b5161251557816124338460a061242a8260c061243a980151611e54565b51930151611e54565b5191614f66565b80612445838a611e54565b525b61245561108e838b51611e54565b60608b01612464848251611e54565b5183106124e257508e83611b908f8f8f966124d6916124be866124b6818b60019e9d612493886124dc9f611513565b6124af6124a08489611e54565b5191516001600160a01b031690565b908d614f95565b875292611e54565b526124cd856060880151611e54565b51925190612284565b90610b28565b016123e5565b916124f1846110c49451611e54565b516317bc2f2360e11b5f526001600160a01b03909216600452602452604452606490565b50506125218188611e54565b51612447565b5093995095945095929861254d91975061254885516001600160a01b031690565b615097565b7ffbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a561257f84516001600160a01b031690565b926125a186602087019561259a87516001600160a01b031690565b3391611535565b6125a96150fa565b612641575b6125d4866125c387516001600160a01b031690565b86516001600160a01b031690615161565b6126086123316125fc6125ee88516001600160a01b031690565b96516001600160a01b031690565b94519661108e88611ef0565b926126306001600160a01b039261261e88611ef0565b8c846040519586951698169684612291565b0390a461263b6114b6565b93929190565b6126678661265687516001600160a01b031690565b86516001600160a01b03169061510f565b6125ae565b6331d38e0b60e01b5f5260049190915260245260445ffd5b9894916126978b97949995929b51614b64565b9a5f5b86518110156126f157808b6126ea8f936126e46126d38f83906126c96001996126c3848a611e54565b51614f33565b611af98383611e54565b516126de8386611e54565b51610b28565b92611e54565b520161269a565b5091949893969a509194986123c5565b94906001885161271081611ef0565b61271981611ef0565b0361279d576127288951614aec565b60408501519186928a61279761278d8b8a60406127486060830151614b07565b92019482865286608082015193612787610d2561277961277261233188516001600160a01b031690565b9551614b64565b95516001600160a01b031690565b94614de5565b909251909a611e54565b526123c5565b600288969296516127ad81611ef0565b6127b681611ef0565b03612849576127c58951614aec565b6128428260608701906127e96127db8351614b07565b60408c019381855251611e54565b516127f5835188611e54565b528b612808608082015193518093611e54565b516128276128206123318c516001600160a01b031690565b9251614b64565b9261283c610d258c516001600160a01b031690565b94614bbb565b96906123c5565b50936003875161285881611ef0565b61286181611ef0565b03612909576128708851614ad0565b5f612888610d25610d2587516001600160a01b031690565b60408681015160808c015160a08901519251632ada38a360e21b8152998a94938593879385936128bd9392336004870161222a565b03925af194851561020a575f915f965f925f916128de575b509196926123c5565b92505095506128ff91503d805f833e6128f781836102cd565b8101906121ca565b919690915f6128d5565b63137a9a3960e01b5f5260045ffd5b9190916040818403126100ed5761292e81611efa565b92602082015167ffffffffffffffff81116100ed5761042f9201612123565b96939461042f9896926129b6966129876129a89661299a95610100948d6001600160a01b0380931690521660208d015260408c0190611f1b565b60608a01528060808a0152880190610432565b9086820360a0880152610432565b9084820360c0860152610432565b9160e0818403910152610465565b9493959296919084516129dd906001600160a01b031690565b906080860151926129ed84611ef0565b60808601518a60a0890151926040519b8c978897632754888d60e01b89526004890197612a199861294d565b03916001600160a01b031691815a5f948591f193841561020a575f905f95612b0c575b50158015612b00575b612af1576001809360091c1615612a635792935090915f835b612a6a575b5050505090565b8451811015612aec57612a7d8186611e54565b516060840190612a8e838351611e54565b5111612a9d5750830183612a5e565b612ac882612ac081612aba61108e8b9760206110c49a0151611e54565b95611e54565b519251611e54565b51633ef629c960e21b5f526001600160a01b03909216600452602452604452606490565b612a63565b6303a6723b60e31b5f5260045ffd5b50835185511415612a45565b9050612b2b9194503d805f833e612b2381836102cd565b810190612918565b93905f612a3c565b6040519291608084019067ffffffffffffffff82118583101761029057612bba916040525f855260208501945f8652612bb260408201915f83528360608201965f88528299612bab60208401805190612b9b6001600160a01b039283604088015116906145cb565b87525190606085015116906145cb565b9052612d88565b905251614b64565b9052565b612bc782610ef4565b52565b919091606060c0604051612bdd81610295565b5f81525f60208201528260408201525f838201525f60808201525f60a08201520152805192612c0b84610ef4565b6080604082015193015160c06020835193015193015193612c34612c2d61030f565b9687612bbe565b60208601526040850152606084015260808301523360a083015260c082015290565b90612bc782610ef4565b919060e08101908351612c7281610ef4565b8152602080850151602083015260408501519260e060408401528351809152602061010084019401915f5b828110612ced575050505060c084606061042f95960151606084015260808101516080840152612cdd60a082015160a08501906001600160a01b03169052565b01519060c0818403910152610465565b835186529481019492810192600101612c9d565b60209192612d385f6001600160a01b03809460405197889687958693635211fa7760e01b8552604060048601526044850190612c60565b911660248301520393165af190811561020a575f91612d69575b5015612d5a57565b63e91e17e760e01b5f5260045ffd5b612d82915060203d60201161203c5761202e81836102cd565b5f612d52565b9190918051612d9681610ef4565b612d9f81610ef4565b612de45790612ddb670de0b6b3a764000093611ed36080612de09501519360a0612dcf60c0850151835190611e54565b51930151905190611e54565b61498e565b0490565b61042f92612e20612e1a6080611eda9401519460a0612e0e602060c0870151930192835190611e54565b51940151905190611e54565b5161529a565b9261498e565b91908260409103126100ed576020612e3d83611efa565b92015190565b6040805163283a3d6b60e21b8152606060048201529490938593919284926001600160a01b039284928490612e7c906064860190612c60565b9216602484015260448301520392165afa90811561020a575f905f92612ed3575b5015612ec457670de0b5cad2bef0008111612eb55790565b6301d1b96560e61b5f5260045ffd5b6314fe5db560e21b5f5260045ffd5b9050612ef7915060403d604011612efe575b612eef81836102cd565b810190612e26565b905f612e9d565b503d612ee5565b5f9491939293612f1361147a565b612f1b612105565b918051612f2781610ef4565b612f3081610ef4565b1561328a575b602091828601612f4681516152be565b83612f8281850198612f65610d25610d258c516001600160a01b031690565b906040519c8d80948193633964c0c360e11b8352600483016132b2565b03925af198891561020a575f9961326b575b5088612f9f816152be565b8351612faa81610ef4565b612fb381610ef4565b6131f3575060408201519052612ff260c0880151612feb612e1a612fdc87860193845190611e54565b519260a08c0151905190611e54565b908a614f66565b9360808301519685979860a08501518088106131dc57505b60408501948a8651613022906001600160a01b031690565b9061302c916145b9565b60600195898751613043906001600160a01b031690565b9061304d91611513565b835183516001600160a01b031687516001600160a01b03168751916130729386614f95565b9190818601956040019283528552855160608401928d8285519061309591611e54565b51906130a091612284565b90516130ab91610b28565b6130b59185614a40565b85019182518b818451906130c891611e54565b51906130d391610b28565b6130dd9183614a40565b83516001600160a01b03165f908152600560205260409020918051875161310391611e54565b5191608001918251885161311691611e54565b5161312091615369565b87516131349085905f5260205260405f2090565b5551835161314191611e54565b519051835161314f91611e54565b5161315991615369565b915161316c91905f5260205260405f2090565b5551925193516060928301519151604080518b8152602081018b905290810193909352928201929092526001600160a01b039182169382169291909116907f0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db90608090a4939291906100fc6114b6565b63e2ea151b60e01b5f52600488905260245260445ffd5b905081985061321a6060613223930151670de0b6b3a7640000818103908210029083615335565b90818652612284565b9661325061323760c0890151835190611e54565b5161324860a08a0151845190611e54565b51908a615355565b93608083015196859860a08501518088116131dc575061300a565b613283919950843d8611610203576101f581836102cd565b975f612f94565b602085016132ab6132a18251606086015190614f33565b8086528251610b28565b9052612f36565b90602061042f928181520190612c60565b6101a061042f92602083526132dc602084018251612c56565b60208101516001600160a01b0316604084015260408101516001600160a01b0316606084015260608101516080840152608081015160a084015260a081015160c084015260c081015160e084015260e08101516101009081850152810151610120908185015281015161335d61014091828601906001600160a01b03169052565b8101519061337961016092838601906001600160a01b03169052565b015191610180808201520190610465565b939590919492865161339b81610ef4565b6133a481610ef4565b6135a95786604085015191845b8251946133bd86610ef4565b6040978897888601516133d6906001600160a01b031690565b9660608701516133ec906001600160a01b031690565b9360800192835181516133fe91611e54565b519351906020015161340f91611e54565b51936020880151613426906001600160a01b031690565b9760c001519861343461031c565b9a61343f908c612bbe565b6001600160a01b031660208b01526001600160a01b0316898b01526060890152608088015260a087015260c086015260e085015261010084018890526001600160a01b03166101208401526001600160a01b031661014083015261016082015281516318b6eb5560e01b8152968791829081906134bf90600483016132c3565b03916001600160a01b03165a905f91f194851561020a575f915f96613585575b5050156135765760091c60011615613570575080516134fd81610ef4565b61350681610ef4565b1580613563575b8015613538575b61351c575090565b60a0015163cc0e4a9960e01b5f5260049190915260245260445ffd5b506001815161354681610ef4565b61354f81610ef4565b148015613514575060a08101518211613514565b5060a0810151821061350d565b91505090565b630568a77b60e21b5f5260045ffd5b6135a093965080919250903d10612efe57612eef81836102cd565b93905f806134df565b866040850151918492946133b1565b6001600160a01b0380911690815f52600e6020528060405f20541692168092036135e0575050565b6336b18d0960e01b5f5260045260245260445ffd5b907f00000000000000000000000000000000000000000000000000000000000000001161361f5750565b6001600160a01b03906318fe738560e01b5f521660045260245ffd5b81810392915f13801582851316918412161761094157565b9190915f838201938412911290801582169115161761094157565b93909161367a85610ef4565b841580156139bd576136af602061369087610b1a565b6040518093819263ef8b30f760e01b8352600483019190602083019252565b03816001600160a01b0387165afa801561020a576136d4915f9161399e575b50610b1a565b94955b6136f2836001600160a01b03165f52600b60205260405f2090565b54916136fc6150fa565b61399657869288929091608083901c91858310613771575050509261376b82613748866137436001600160a01b03966001600160801b03896100fc9b60801c039316612284565b615369565b9788613765856001600160a01b03165f52600b60205260405f2090565b556145b9565b16611513565b90929350613780919450610ef4565b15613879576137a86137a361379585846155a0565b61379e8a614618565b613653565b61544c565b926001600160a01b038116936137bf81868961556a565b604051636e553f6560e01b81526004810182905230602482015294602090869060449082905f905af1801561020a576137488995613854876138496001600160a01b038f96888f896100fc9f859e6138438f61376b9f6138499661384e996001600160801b03965f9161385a575b509a8b935b169061383e8282615468565b615613565b16612284565b610b28565b94612284565b90615369565b613873915060203d602011610203576101f581836102cd565b5f61382d565b90916138996137a361388b83856153ab565b61389489614618565b61363b565b60405163b3d7f6b960e01b8152600481018290526001600160a01b038316936020939290918481602481895afa801561020a576138df915f91613979575b50868a61556a565b6040516394bf804d60e01b815260048101829052306024820152948490869060449082905f905af191821561020a576100fc966138548b613849858f966001600160a01b038f896001600160801b03879f9a849f8f9661376b9f97613849966137489f9961384e9a613843955f9261395c575b5050988992613832565b6139729250803d10610203576101f581836102cd565b5f80613952565b6139909150863d8811610203576101f581836102cd565b5f6138d7565b509093505050565b6139b7915060203d602011610203576101f581836102cd565b5f6136ce565b6139ea60206139cb87612276565b6040518093819263b3d7f6b960e01b8352600483019190602083019252565b03816001600160a01b0387165afa801561020a57613a0f915f91613a15575b50612276565b956136d7565b613a2e915060203d602011610203576101f581836102cd565b5f613a09565b9390613a3f85610ef4565b8415948515613cda57613a756020613a5687610b1a565b6040518093819263266d6a8360e11b8352600483019190602083019252565b03816001600160a01b0389165afa801561020a57613a99915f9161399e5750610b1a565b94955b613ab7856001600160a01b03165f52600b60205260405f2090565b5491613ac16150fa565b6139965787938793909290916001600160801b039182841691868310613b3857505050936001600160a01b03613b0e83866100fc98613b0686613b339860801c612284565b921603615369565b9788613b2b826001600160a01b03165f52600b60205260405f2090565b555b166145b9565b611513565b919650929450613b489150610ef4565b15613c2d57613b5d6137a361379587856153ab565b604051635d043b2960e11b8152600481018290523060248201819052604482015293906020856064815f6001600160a01b038c165af1801561020a57613beb8995613854846138498e613be28b8f6001600160a01b036100fc9f9c613bdd8f9d613b339f94889f859f613849975f91613c0e575b509586925b1690615658565b612284565b9460801c612284565b9788613c08826001600160a01b03165f52600b60205260405f2090565b55613b2d565b613c27915060203d602011610203576101f581836102cd565b5f613bd1565b613c3d6137a361388b87856155a0565b604051632d182be560e21b81526004810182905230602482018190526044820152906020826064815f6001600160a01b038c165af191821561020a57613beb89956138546001600160a01b036138498e613be28b8f8a6100fc9f613bdd8f93613b339f9e889f958b9f96613849975f91613cbb575b509b8c93613bd6565b613cd4915060203d602011610203576101f581836102cd565b5f613cb2565b613d076020613ce887612276565b60405180938192630a28a47760e01b8352600483019190602083019252565b03816001600160a01b0389165afa801561020a57613d2b915f91613a155750612276565b95613a9c565b805c9060018201809211610941575d565b905f5260205260405f20905f52602052600160405f205d565b9190825191613d6e825182519085614952565b613d7783611e22565b935f5b848110613d8957505050505090565b80670de0b6b3a7640000613dbb613da260019486611e54565b51612ddb613db0858a611e54565b51611ed3868a611e54565b04613dc68289611e54565b5201613d7a565b60051115610efe57565b906005821015610efe5752565b959193613e1561042f989694613e2693611f7d976001600160a01b038092168b521660208a01526040890190613dd7565b60e0606088015260e0870190610432565b91608086015284820360a0860152610432565b925f6001600160a01b03602095969396613e9a613e5d87516001600160a01b031690565b94608088015197613e6d89613dcd565b60a060806060830151930151910151916040519b8c9a8b998a976345421ec760e01b895260048901613de4565b0393165af190811561020a575f91613ec4575b5015613eb557565b6305975b2960e11b5f5260045ffd5b613edd915060203d60201161203c5761202e81836102cd565b5f613ead565b916080838303126100ed5782519067ffffffffffffffff918281116100ed5783613f0e918601612123565b9360208101519360408201518481116100ed5781612213918401612123565b93613f57612268936001600160a01b0361042f98969416875260a0602088015260a0870190610432565b9160408601528482036060860152610432565b9190613f7461147a565b6060613f7e612105565b9160208501613f91815151808652611e22565b60808301958651613fa181613dcd565b613faa81613dcd565b6141e957506060830151613fbe8651611e22565b94613fe28260808b0151613fdc61233189516001600160a01b031690565b90615a38565b995b60608601518084106141d25750613ffd83999899614f55565b60208901975f5b8c8b51821015614111578161401891611e54565b5161402281614f55565b61402c8288611e54565b5161410057614051908d61404a8460a061242a8260c0860151611e54565b5191615355565b8061405c8389611e54565b525b61406c61108e838a51611e54565b60408a0161407b848251611e54565b5183116140cd57508d83611b908e6140bf8f968f976140aa866124b6818b60019e9d612493886140c79f6145b9565b526140b9856060880151611e54565b51612284565b905190610b28565b01614004565b916140dc846110c49451611e54565b516323b6a17960e21b5f526001600160a01b03909216600452602452604452606490565b5061410b8187611e54565b5161405e565b50509396945096509650966141319061254885516001600160a01b031690565b7fa26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca87161416384516001600160a01b031690565b9261418489602087019561417e87516001600160a01b031690565b90615a7f565b6141aa61233161419e6125ee88516001600160a01b031690565b94519661108e88613dcd565b926126306001600160a01b03926141c088613dcd565b88846040519586951698169684612291565b638d261d5d60e01b5f52600484905260245260445ffd5b600387516141f681613dcd565b6141ff81613dcd565b036142215761420e8851615a1c565b6142188151611e22565b945f9199613fe4565b976001875161422f81613dcd565b61423881613dcd565b036142a0576142478851614aec565b614298896142598460408801516157d1565b60808a01519061427361233188516001600160a01b031690565b61427d8c51614b64565b91614292610d258a516001600160a01b031690565b936157ec565b959091613fe4565b9793600287516142af81613dcd565b6142b881613dcd565b03614324579787986142ca8951614aec565b6060850151916142d987614b07565b61431e61431460408b0192808452898b9f8860808201519361430e610d2561277961277261233188516001600160a01b031690565b94615706565b9092519099611e54565b52613fe4565b506004865161433281613dcd565b61433b81613dcd565b036143e35761434a87516156ea565b5f614362610d25610d2586516001600160a01b031690565b60608501519060808a0151918360a0880151986143966040519a8b968795869463e4c4366360e01b86523360048701613f2d565b03925af193841561020a575f905f955f915f916143b8575b5090959199613fe4565b925050506143d99194503d805f833e6143d181836102cd565b810190613ee3565b919592915f6143ae565b636c02b39560e01b5f5260045ffd5b969261042f9896946144489361442c61443a936129b69995610100938d6001600160a01b0380931690521660208d015260408c0190613dd7565b8060608b0152890190610432565b908782036080890152610432565b9160a086015284820360c0860152610432565b949391959296908451614474906001600160a01b031690565b60808601519161448383613dcd565b608086015160a0880151906040968c6040519c8d9788976325da41f360e21b895260048901976144b2986143f2565b03916001600160a01b031691815a5f948591f194851561020a575f905f9661459a575b5015801561458e575b61457f576001809460091c16156144fe57909192809495505f905b614506575b505050505090565b855181101561457a576145198187611e54565b5182850190614529838351611e54565b511061453857508401846144f9565b869061455683612ac081612aba61108e6110c49860208c0151611e54565b5163677d1d7d60e11b5f526001600160a01b03909216600452602452604452606490565b6144fe565b63e124916560e01b5f5260045ffd5b508451865114156144de565b90506145b19195503d805f833e612b2381836102cd565b94905f6144d5565b6145c56100fc92614618565b90614654565b905f5b82518110156145fc576001600160a01b03806145ea8386611e54565b511690831614613570576001016145ce565b6001600160a01b038263ddef98d760e01b5f521660045260245ffd5b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116146425790565b63123baf0360e11b5f5260045260245ffd5b8115614711576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000009116805f528160205261469b60405f205c9384613653565b92836146df57505f197f0000000000000000000000000000000000000000000000000000000000000000805c918201918211610941575d5b5f5260205260405f205d565b6146d35761470c7f0000000000000000000000000000000000000000000000000000000000000000613d31565b6146d3565b5050565b6001600160a01b0392918381168484160361473357505050505f1990565b61475d9361159e92165f52601060205260405f20906001600160a01b03165f5260205260405f2090565b5490565b90604051918281549182825260209260208301915f5260205f20935f905b828210614795575050506100fc925003836102cd565b85546001600160a01b03168452600195860195889550938101939091019061477f565b906147c28261033d565b6147cf60405191826102cd565b82815280926147e0601f199161033d565b01905f5b8281106147f057505050565b6020906147fb612105565b828285010152016147e4565b90604051614814816102b1565b604060ff82945481811661482781610ef4565b84526001600160a01b038160081c16602085015260a81c161515910152565b60608101805151935f5b85811061485f57505050505050565b8061487361108e6001936020880151611e54565b6148956148888389905f5260205260405f2090565b546001600160801b031690565b6148a0838751611e54565b5181116148e7575b50506148ce6148b8828651611e54565b516148c7836080890151611e54565b5190615369565b6148e08288905f5260205260405f2090565b5501614850565b61493261494a9161492c61492361490f868a906001600160a01b03165f5260205260405f2090565b549261491c888c51611e54565b5190610b28565b8260801c612284565b90615cc4565b9185906001600160a01b03165f5260205260405f2090565b555f806148a8565b81148015929190614966575b5050611e1357565b141590505f8061495e565b90670de0b6b3a76400009182810292818404149015171561094157565b8181029291811591840414171561094157565b80516149ac81610ef4565b6149b581610ef4565b806149c8575050670de0b6b3a764000090565b806149d4600192610ef4565b03614a315760206149f3610d258260049401516001600160a01b031690565b6040516333cd77e760e11b815292839182905afa90811561020a575f91614a18575090565b61042f915060203d602011610203576101f581836102cd565b636fa2831960e11b5f5260045ffd5b91906080670de0b6b3a7640000614a84612bc79480614a638660608a0151611e54565b52612ddb614a758660c08a0151611e54565b51611ed38760a08b0151611e54565b04930151611e54565b91906080614ac8612bc79380614aa7856060890151611e54565b52611eda614ab98560c0890151611e54565b51611ed38660a08a0151611e54565b930151611e54565b60061c60011615614add57565b63033c2a5760e61b5f5260045ffd5b60041c600116614af857565b63353d5de760e21b5f5260045ffd5b80519081905f5b828110614b30575050811015614b215790565b631f91af7760e21b5f5260045ffd5b614b3a8183611e54565b51614b48575b600101614b0e565b928203614b555782614b40565b636b8c3be560e01b5f5260045ffd5b62ffffff9060121c1664174876e800908181029181830414901517156109415790565b91906020614b9e5f92604086526040860190610432565b930152565b91906020614b9e600192604086526040860190610432565b9094929192815194614bcc86611e22565b945f5b878110614d9c5750614be5906126de8988611e54565b614bef8887611e54565b5260405194631309bd3d60e31b9283875260208780614c118860048301614b87565b03816001600160a01b0385165afa96871561020a575f97614d7b575b506040519484865260208680614c468660048301614b87565b03816001600160a01b0386165afa93841561020a57613849614ca88c61491c614ca1614cbe96614c9a8f614c8a614cf49f9160209e88935f91614d5c575b506152f5565b92614c95848d615cd7565b611e54565b5190614f33565b9188611e54565b91670de0b6b3a7640000818103911002826152f5565b93614ccd856126de8c86611e54565b614cd78b85611e54565b526001600160a01b03604051809781958294835260048301614ba3565b0392165afa90811561020a57614d3095614d2a935f93614d33575b50614d1c614d2391611e22565b9788611e54565b5283610b28565b90615335565b91565b614d23919350614d54614d1c9160203d602011610203576101f581836102cd565b939150614d0f565b6020614d7592503d602011610203576101f581836102cd565b5f614c84565b614d9591975060203d602011610203576101f581836102cd565b955f614c2d565b80614db2614dac60019388611e54565b51610b1a565b614dbc828a611e54565b5201614bcf565b614ddb60409295949395606083526060830190610432565b9460208201520152565b909491830391838311610941576020614e316001600160a01b0392614e0a87876152f5565b614e148183615cd7565b60405194858094819362b5059f60e51b83528d8a60048501614dc3565b0392165afa801561020a57614d3095611eda88614e7c93614e8598614e8c965f92614e92575b50614e6a826126de61384994958b611e54565b98614e758d8a611e54565b5190615335565b93849251611e22565b9586611e54565b52610b28565b61384992506126de93614eb6614e6a9260203d602011610203576101f581836102cd565b93509350614e57565b634e487b7160e01b5f52601260045260245ffd5b8115614edd570490565b614ebf565b909291614eef8251611e22565b915f5b8151811015614f2c57614f0f83614f098385611e54565b5161498e565b908615614edd578660019204614f258287611e54565b5201614ef2565b5050509150565b90614f3d9161498e565b6001670de0b6b3a76400005f19830104019015150290565b80614f5d5750565b6100fc906152be565b91614f709161498e565b90670de0b6b3a764000090818102918183041490151715610941578115614edd570490565b91949290945f955f9581614faa575050505050565b849750612433614fc38260c0614fcf9697980151611e54565b519160a08a0151611e54565b945160018160031c1615614fe5575b808061154d565b62ffffff91929450602a1c1664174876e800908181029181830414901517156109415761501b670de0b6b3a7640000918661498e565b0492848411615088578061159e61506761504d61507f9461159e876001600160a01b03165f52600660205260405f2090565b54615061886001600160801b038316612284565b90615d5c565b936001600160a01b03165f52600660205260405f2090565b555f8080614fde565b634c69ac5d60e01b5f5260045ffd5b6001600160a01b0390929192165f52602060056020526040805f205f5b606086015180518210156150f157906150e16150d282600194611e54565b516148c78360808b0151611e54565b815f52838652845f2055016150b4565b50505050509050565b3215806151045790565b506001600754161590565b9032615152576001600160a01b0361514392165f52600f60205260405f20906001600160a01b03165f5260205260405f2090565b80549182018092116109415755565b6333fc255960e11b5f5260045ffd5b90916001600160a01b0380841692831561181b576151948561159e836001600160a01b03165f52600f60205260405f2090565b54808411615276578390036151be8661159e846001600160a01b03165f52600f60205260405f2090565b556151e4836151de836001600160a01b03165f52601160205260405f2090565b54610b28565b6151ed81615d6a565b615208826001600160a01b03165f52601160205260405f2090565b551690813b156100ed576040516323de665160e01b81526001600160a01b0390941660048501525f6024850181905260448501829052937fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f916152719186818060648101611619565b0390a4565b63391434e360e21b5f526001600160a01b038616600452602452604483905260645ffd5b670de0b6b3a76400008082040281036152b05790565b600181018091116109415790565b7f0000000000000000000000000000000000000000000000000000000000000000116152e657565b6303da9a2360e31b5f5260045ffd5b90801561532657670de0b6b3a764000091828102928184041490151715610941576001905f19830104019015150290565b630a0c22c760e01b5f5260045ffd5b8215615326576001916153479161498e565b915f19830104019015150290565b9061042f926153639161498e565b906152f5565b906001600160801b038083119081156153a1575b506153925760801b9081018091116109415790565b6389560ca160e01b5f5260045ffd5b905081115f61537d565b906153b88260801c614618565b906001600160801b035f9316806153dc575b50506002916153d89161363b565b0590565b6001600160a01b0393509060246020926040519586938492630a28a47760e01b84526004840152165afa90811561020a576154246153d8926002945f9161542d575b50614618565b928192506153ca565b615446915060203d602011610203576101f581836102cd565b5f61541e565b5f81126154565790565b635467221960e11b5f5260045260245ffd5b60405163095ea7b360e01b602082018181526001600160a01b03851660248401525f6044840152909391929183606481015b03916154ae601f19938481018752866102cd565b5f806001600160a01b0386169287519082855af1906154cb61569d565b82615538575b508161552d575b50156154e5575050505050565b60405160208101959095526001600160a01b031660248501525f604485015260649081018452615523936109179161551d90826102cd565b82615b9b565b5f8080808061154d565b90503b15155f6154d8565b80519192508115918215615550575b5050905f6154d1565b6155639250602080918301019101611f07565b5f80615547565b60405163095ea7b360e01b602082018181526001600160a01b03851660248401526044830195909552939092836064810161549a565b906155b36001600160801b038316614618565b905f9260801c806155cc5750506002916153d89161363b565b6001600160a01b039350906024602092604051958693849263b3d7f6b960e01b84526004840152165afa90811561020a576154246153d8926002945f9161542d5750614618565b9291906001600160a01b038085165f52600860205260405f20549283039283116109415781165f52600860205260405f2054928301809311610941576100fc93615d89565b9291906001600160a01b038085165f52600860205260405f20549283018093116109415781165f52600860205260405f2054928303928311610941576100fc93615d89565b3d156156c7573d906156ae826103c2565b916156bc60405193846102cd565b82523d5f602084013e565b606090565b5f8061042f9360208151910182855af16156e461569d565b91615ec0565b60051c600116156156f757565b63121db02f60e21b5f5260045ffd5b9094916020615735615720866001600160a01b0394612284565b9461572b87876152f5565b614e148183615f1a565b0392165afa801561020a57614d3095613849614ca885614e7c94614e85998c998a615794995f9461579a575b509061578861578161577a61578f946124d69798611e54565b5187610b28565b9c8c611e54565b519061498e565b614ed3565b52612284565b6124d6945061578161577a61578f94936157c56157889460203d602011610203576101f581836102cd565b97509394505050615761565b9060208083516157e2845182611e0c565b60051b930191015e565b9291909383516157fb81611e22565b9161580582611e22565b965f5b8381106159e15750506001600160a01b0381169160405195631309bd3d60e31b9283885260209889898061583f8460048301614b87565b0381895afa98891561020a575f996159c2575b506040518581528a81806158698b60048301614ba3565b03818a5afa90811561020a578a61578f6158a49361589d938f5f926159a5575b9b999d9c9a98979695949392919050614971565b8093615f1a565b5f5b89811061591357505050506158ca9550604051809681948293835260048301614ba3565b03915afa91821561020a578361578f936158f092614d30975f926158f6575b5050610b28565b9061498e565b61590c9250803d10610203576101f581836102cd565b5f806158e9565b869899959750838d83949596988361593761593082600198611e54565b5189615d49565b806159428385611e54565b511161595e575b505050505001908a96949897959392916158a6565b818361597f61599097615989946159788561491c99611e54565b5103614f33565b611af98388611e54565b5192611e54565b61599a828b611e54565b52848d8a835f615949565b6159bb9250803d10610203576101f581836102cd565b5f8f615889565b6159da9199508a3d8c11610203576101f581836102cd565b975f615852565b80615a0b615a066159f46001948c611e54565b516159ff8487611e54565b5190612284565b610b1a565b615a158288611e54565b5201615808565b60071c60011615615a2957565b63efe0265d60e01b5f5260045ffd5b9291615a448451611e22565b935f5b8151811015615a795780615a688585615a6260019587611e54565b51615335565b615a728289611e54565b5201615a47565b50505050565b916001600160a01b03808316938415615b7f57615ab783615ab1836001600160a01b03165f52601160205260405f2090565b54612284565b615ad68561159e846001600160a01b03165f52600f60205260405f2090565b848154019055615ae581615d6a565b615b00826001600160a01b03165f52601160205260405f2090565b5516925f847fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f60405180615b3987829190602083019252565b0390a4823b156100ed576040516323de665160e01b81525f600482018190526001600160a01b0390931660248201526044810191909152918290818381606481016117bd565b63ec442f0560e01b5f526001600160a01b03841660045260245ffd5b6001600160a01b03615baf911691826156cc565b8051908115159182615bd7575b5050615bc55750565b635274afe760e01b5f5260045260245ffd5b615bea9250602080918301019101611f07565b155f80615bbc565b9064ffffffffff615c0282611e22565b92605a1c165f5b828110615c165750505090565b60058082029082820414821517156109415782601f911c1690604d821161094157600191600a0a615c478287611e54565b5201615c09565b62ffffff9060421c1664174876e800908181029181830414901517156109415790565b9093925f94615c84846080850151611e54565b51818111615c93575050505050565b615cb995965091615ca8916124339303614f33565b9260a061242a8260c0860151611e54565b905f8080808061154d565b906001600160801b0361042f9216615369565b9060206001600160a01b0392600460405180958193635b3bfd2b60e11b8352165afa91821561020a575f92615d28575b50818110615d13575050565b63718e4adf60e11b5f5260045260245260445ffd5b615d4291925060203d602011610203576101f581836102cd565b905f615d07565b670de0b6b3a764000091612de09161498e565b9061042f9160801c90615369565b620f42408110615d775750565b6334e3483f60e21b5f5260045260245ffd5b6040516370a0823160e01b808252306004830152602095939490926001600160a01b03929187836024818786165afa92831561020a575f93615ea1575b50808310615e7a5750615dea906001600160a01b03165f52600860205260405f2090565b556040519182523060048301528316908481602481855afa94851561020a575f95615e5b575b5050818410615e39575050615e36906001600160a01b03165f52600860205260405f2090565b55565b631149424d60e01b5f526001600160a01b03166004526024525060445260645ffd5b615e72929550803d10610203576101f581836102cd565b925f80615e10565b631c6a537560e01b5f9081529387166001600160a01b031660045260245250604452606490fd5b615eb9919350883d8a11610203576101f581836102cd565b915f615dc6565b90615ee45750805115615ed557805190602001fd5b630a12f52160e11b5f5260045ffd5b81511580615f11575b615ef5575090565b6001600160a01b0390639996b31560e01b5f521660045260245ffd5b50803b15615eed565b9060206001600160a01b039260046040518095819363273c1adf60e01b8352165afa91821561020a575f92615f6b575b50818111615f56575050565b630fa2583760e21b5f5260045260245260445ffd5b615f8591925060203d602011610203576101f581836102cd565b905f615f4a565b91909163ffffffff808094169116019182116109415756fea26469706673582212206683429dd8621233bf9dfafe00f40360d4204093d879bd8a2517bc175dc511eb64736f6c634300081a0033","opcodes":"PUSH2 0x1E0 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x36B JUMPI PUSH1 0x60 DUP2 PUSH2 0x65DD DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x22 DUP3 DUP6 PUSH2 0x4D1 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x36B JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND DUP1 DUP4 SUB PUSH2 0x36B JUMPI PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP5 DUP4 DUP7 AND DUP7 SUB PUSH2 0x36B JUMPI DUP7 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x36B JUMPI PUSH2 0x86 DUP8 MLOAD PUSH2 0x6B DUP2 PUSH2 0x4A2 JUMP JUMPDEST PUSH1 0xA DUP2 MSTORE PUSH10 0x1A5CD55B9B1BD8DAD959 PUSH1 0xB2 SHL DUP5 DUP3 ADD MSTORE PUSH2 0x52F JUMP JUMPDEST PUSH1 0xC0 MSTORE PUSH2 0xB9 DUP8 MLOAD PUSH2 0x97 DUP2 PUSH2 0x4A2 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH17 0x1B9BDB96995C9BD1195B1D1850DBDD5B9D PUSH1 0x7A SHL DUP5 DUP3 ADD MSTORE PUSH2 0x52F JUMP JUMPDEST PUSH1 0xE0 MSTORE PUSH2 0xE6 DUP8 MLOAD PUSH2 0xCA DUP2 PUSH2 0x4A2 JUMP JUMPDEST PUSH1 0xB DUP2 MSTORE PUSH11 0x746F6B656E44656C746173 PUSH1 0xA8 SHL DUP5 DUP3 ADD MSTORE PUSH2 0x52F JUMP JUMPDEST SWAP7 PUSH2 0x100 SWAP8 DUP9 MSTORE PUSH2 0x11E DUP2 MLOAD PUSH2 0xFB DUP2 PUSH2 0x4A2 JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH18 0x185919131A5C5D5A591A5D1E50D85B1B1959 PUSH1 0x72 SHL DUP6 DUP3 ADD MSTORE PUSH2 0x52F JUMP JUMPDEST SWAP7 PUSH2 0x120 SWAP8 DUP9 MSTORE PUSH2 0x14D DUP3 MLOAD PUSH2 0x133 DUP2 PUSH2 0x4A2 JUMP JUMPDEST PUSH1 0x9 DUP2 MSTORE PUSH9 0x1CD95CDCDA5BDB9259 PUSH1 0xBA SHL DUP7 DUP3 ADD MSTORE PUSH2 0x52F JUMP JUMPDEST SWAP3 PUSH2 0x140 SWAP4 DUP5 MSTORE DUP3 MLOAD SWAP7 PUSH4 0xFBFA77CF PUSH1 0xE0 SHL SWAP1 DUP2 DUP10 MSTORE PUSH1 0x4 SWAP9 DUP8 DUP2 DUP12 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3AF JUMPI PUSH0 SWAP2 PUSH2 0x485 JUMPI JUMPDEST POP DUP2 ADDRESS SWAP2 AND SUB PUSH2 0x477 JUMPI DUP5 MLOAD SWAP2 DUP3 MSTORE DUP7 DUP3 DUP11 DUP2 DUP7 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x3E8 JUMPI PUSH0 SWAP3 PUSH2 0x448 JUMPI JUMPDEST POP ADDRESS SWAP2 AND SUB PUSH2 0x43A JUMPI PUSH2 0x1C0 SWAP8 DUP9 MSTORE PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP2 MLOAD PUSH4 0x4546891D PUSH1 0xE1 SHL DUP2 MSTORE SWAP4 DUP1 DUP6 DUP9 DUP2 DUP10 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x430 JUMPI PUSH0 SWAP6 PUSH2 0x411 JUMPI JUMPDEST POP PUSH2 0x160 SWAP5 DUP6 MSTORE DUP3 MLOAD PUSH4 0x1060FDBD PUSH1 0xE1 SHL DUP2 MSTORE SWAP7 DUP2 DUP9 DUP3 DUP2 DUP11 GAS STATICCALL SWAP8 DUP9 ISZERO PUSH2 0x376 JUMPI PUSH0 SWAP9 PUSH2 0x3F2 JUMPI JUMPDEST POP PUSH2 0x1A0 SWAP8 DUP9 MSTORE DUP4 MLOAD PUSH4 0xCD51C12F PUSH1 0xE0 SHL DUP2 MSTORE SWAP7 DUP3 DUP9 DUP4 DUP2 DUP5 GAS STATICCALL SWAP8 DUP9 ISZERO PUSH2 0x3E8 JUMPI PUSH0 SWAP9 PUSH2 0x3B9 JUMPI JUMPDEST POP PUSH2 0x180 SWAP8 DUP9 MSTORE DUP5 MLOAD PUSH4 0x716585D PUSH1 0xE5 SHL DUP2 MSTORE DUP4 DUP2 DUP5 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3AF JUMPI SWAP1 DUP5 SWAP3 SWAP2 PUSH0 SWAP2 PUSH2 0x380 JUMPI JUMPDEST POP PUSH1 0x80 MSTORE DUP6 MLOAD PUSH4 0x29CAB551 PUSH1 0xE1 SHL DUP2 MSTORE SWAP3 DUP4 SWAP2 DUP3 SWAP1 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x376 JUMPI PUSH0 SWAP3 PUSH2 0x344 JUMPI JUMPDEST POP POP PUSH1 0xA0 MSTORE PUSH1 0x9 DUP1 SLOAD PUSH2 0x100 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND PUSH1 0x8 SWAP3 SWAP1 SWAP3 SHL PUSH2 0x100 PUSH1 0x1 PUSH1 0xA8 SHL SUB AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE MLOAD PUSH2 0x5FDA SWAP8 SWAP1 SWAP7 SWAP1 DUP9 PUSH2 0x603 DUP10 CODECOPY PUSH1 0x80 MLOAD DUP9 PUSH2 0x52C0 ADD MSTORE PUSH1 0xA0 MLOAD DUP9 PUSH2 0x35F8 ADD MSTORE PUSH1 0xC0 MLOAD DUP9 DUP2 DUP2 PUSH2 0x11D4 ADD MSTORE PUSH2 0x14DD ADD MSTORE PUSH1 0xE0 MLOAD DUP9 DUP2 DUP2 PUSH2 0x1215 ADD MSTORE DUP2 DUP2 PUSH2 0x46A6 ADD MSTORE PUSH2 0x46E8 ADD MSTORE MLOAD DUP8 PUSH2 0x4664 ADD MSTORE MLOAD DUP7 DUP2 DUP2 PUSH2 0x12E6 ADD MSTORE PUSH2 0x2389 ADD MSTORE MLOAD DUP6 DUP2 DUP2 PUSH2 0x1241 ADD MSTORE DUP2 DUP2 PUSH2 0x12B2 ADD MSTORE PUSH2 0x2355 ADD MSTORE MLOAD DUP5 POP POP MLOAD DUP4 PUSH2 0x1873 ADD MSTORE MLOAD DUP3 PUSH2 0x1909 ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x96F ADD MSTORE PUSH2 0x1447 ADD MSTORE RETURN JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x36F JUMPI JUMPDEST PUSH2 0x35B DUP2 DUP4 PUSH2 0x4D1 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x36B JUMPI MLOAD PUSH0 DUP1 PUSH2 0x287 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x351 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP2 SWAP5 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x3A8 JUMPI JUMPDEST PUSH2 0x397 DUP2 DUP4 PUSH2 0x4D1 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x36B JUMPI DUP4 SWAP2 MLOAD PUSH0 PUSH2 0x262 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x38D JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x3DA SWAP2 SWAP9 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x3E1 JUMPI JUMPDEST PUSH2 0x3D2 DUP2 DUP4 PUSH2 0x4D1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x513 JUMP JUMPDEST SWAP7 PUSH0 PUSH2 0x236 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3C8 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x40A SWAP2 SWAP9 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3E1 JUMPI PUSH2 0x3D2 DUP2 DUP4 PUSH2 0x4D1 JUMP JUMPDEST SWAP7 PUSH0 PUSH2 0x20D JUMP JUMPDEST DUP2 PUSH2 0x429 SWAP3 SWAP7 POP RETURNDATASIZE DUP8 GT PUSH2 0x3E1 JUMPI PUSH2 0x3D2 DUP2 DUP4 PUSH2 0x4D1 JUMP JUMPDEST SWAP4 PUSH0 PUSH2 0x1E4 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP7 PUSH4 0x1BBE95C7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x469 SWAP2 SWAP3 POP DUP8 RETURNDATASIZE DUP10 GT PUSH2 0x470 JUMPI JUMPDEST PUSH2 0x461 DUP2 DUP4 PUSH2 0x4D1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x4F4 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x19F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x457 JUMP JUMPDEST DUP9 PUSH4 0x1AB9D9D PUSH1 0xE4 SHL PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x49C SWAP2 POP DUP9 RETURNDATASIZE DUP11 GT PUSH2 0x470 JUMPI PUSH2 0x461 DUP2 DUP4 PUSH2 0x4D1 JUMP JUMPDEST PUSH0 PUSH2 0x17B JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x4BD JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x4BD JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x36B JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x36B JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x36B JUMPI MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x36B JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x53C DUP3 PUSH2 0x4A2 JUMP JUMPDEST PUSH1 0xC DUP3 MSTORE PUSH2 0x5BD PUSH1 0x3A PUSH1 0x20 DUP5 ADD PUSH12 0x5661756C7453746F72616765 PUSH1 0xA0 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP3 DUP3 DUP5 ADD SWAP8 PUSH32 0x62616C616E6365722D6C6162732E76332E73746F726167652E00000000000000 DUP10 MSTORE MLOAD DUP1 SWAP2 PUSH1 0x39 DUP7 ADD MCOPY DUP4 ADD SWAP1 PUSH1 0x17 PUSH1 0xF9 SHL PUSH1 0x39 DUP4 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP6 DUP4 ADD MCOPY ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB PUSH1 0x1A DUP2 ADD DUP5 MSTORE ADD DUP3 PUSH2 0x4D1 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x5EE JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x5E3 DUP3 PUSH2 0x4A2 JUMP JUMPDEST SWAP1 MLOAD SWAP1 KECCAK256 PUSH1 0xFF NOT AND SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x18 JUMPI JUMPDEST CALLDATASIZE PUSH2 0x1430 JUMPI PUSH2 0x1421 JUMP JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x15AFD409 EQ PUSH2 0xD7 JUMPI DUP1 PUSH4 0x15DACBEA EQ PUSH2 0xD2 JUMPI DUP1 PUSH4 0x21457897 EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x2BFB780C EQ PUSH2 0xC8 JUMPI DUP1 PUSH4 0x43583BE5 EQ PUSH2 0xC3 JUMPI DUP1 PUSH4 0x48C89491 EQ PUSH2 0xBE JUMPI DUP1 PUSH4 0x4AF29EC4 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0xAE639329 EQ PUSH2 0xB4 JUMPI DUP1 PUSH4 0xB9A8EFFA EQ PUSH2 0xAF JUMPI DUP1 PUSH4 0xBEABACC8 EQ PUSH2 0xAA JUMPI DUP1 PUSH4 0xC9C1661B EQ PUSH2 0xA5 JUMPI PUSH4 0xD2C725E0 SUB PUSH2 0xE JUMPI PUSH2 0xAAE JUMP JUMPDEST PUSH2 0x9C9 JUMP JUMPDEST PUSH2 0x993 JUMP JUMPDEST PUSH2 0x950 JUMP JUMPDEST PUSH2 0x866 JUMP JUMPDEST PUSH2 0x796 JUMP JUMPDEST PUSH2 0x6FD JUMP JUMPDEST PUSH2 0x671 JUMP JUMPDEST PUSH2 0x599 JUMP JUMPDEST PUSH2 0x4B4 JUMP JUMPDEST PUSH2 0x20F JUMP JUMPDEST PUSH2 0xFE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SUB PUSH2 0xED JUMPI JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLDATALOAD SWAP1 PUSH2 0xFC DUP3 PUSH2 0xDC JUMP JUMPDEST JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x11B DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x126 PUSH2 0x147A JUMP JUMPDEST PUSH2 0x12E PUSH2 0x14DB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP2 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP5 SWAP3 DUP3 SWAP1 PUSH1 0x24 SWAP1 DUP3 SWAP1 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x20A JUMPI PUSH2 0x1CD SWAP5 PUSH2 0x1A1 SWAP3 PUSH0 SWAP2 PUSH2 0x1DB JUMPI JUMPDEST POP DUP1 PUSH2 0x19B DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0xB28 JUMP JUMPDEST SWAP2 DUP1 DUP4 GT PUSH2 0x1D1 JUMPI JUMPDEST POP DUP2 PUSH2 0x1B5 SWAP2 PUSH2 0x1513 JUMP JUMPDEST PUSH2 0x1BD PUSH2 0x14B6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST SWAP2 POP PUSH2 0x1B5 PUSH2 0x1AA JUMP JUMPDEST PUSH2 0x1FD SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI JUMPDEST PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xAEC JUMP JUMPDEST PUSH0 PUSH2 0x17E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1EB JUMP JUMPDEST PUSH2 0xAFB JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x80 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xED JUMPI PUSH2 0x25D PUSH1 0x4 CALLDATALOAD PUSH2 0x22F DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x23B DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH2 0x248 DUP3 PUSH2 0xDC JUMP JUMPDEST PUSH2 0x257 PUSH1 0x64 CALLDATALOAD DUP1 SWAP5 DUP4 CALLER PUSH2 0x1535 JUMP JUMPDEST CALLER PUSH2 0x16B5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x290 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x268 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x290 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x290 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F DUP1 NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x290 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0xC0 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x290 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0xFC DUP3 PUSH2 0x295 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x180 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x290 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x290 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xED JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x36F DUP2 PUSH2 0x33D JUMP JUMPDEST SWAP4 PUSH2 0x37D PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2CD JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xED JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x3A6 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x398 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x4 DUP3 LT ISZERO PUSH2 0xED JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x290 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x3EA DUP3 PUSH2 0x3C2 JUMP JUMPDEST SWAP2 PUSH2 0x3F8 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x2CD JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0xED JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xED JUMPI DUP2 PUSH1 0x20 PUSH2 0x42F SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x3DE JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x451 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x443 JUMP JUMPDEST DUP1 MLOAD DUP1 DUP4 MSTORE PUSH1 0x20 SWAP3 SWAP2 DUP2 SWAP1 DUP5 ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND ADD ADD SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x4A6 SWAP1 PUSH2 0x42F SWAP5 SWAP3 DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x3 NOT PUSH1 0x20 CALLDATASIZE DUP3 ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 GT PUSH2 0xED JUMPI PUSH1 0xC0 SWAP1 DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0xED JUMPI PUSH2 0x4EE PUSH2 0x2EF JUMP JUMPDEST PUSH2 0x4FA DUP3 PUSH1 0x4 ADD PUSH2 0xF1 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x508 PUSH1 0x24 DUP4 ADD PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x44 DUP3 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x64 DUP3 ADD CALLDATALOAD DUP4 DUP2 GT PUSH2 0xED JUMPI PUSH2 0x533 SWAP1 PUSH1 0x4 CALLDATASIZE SWAP2 DUP6 ADD ADD PUSH2 0x355 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x544 PUSH1 0x84 DUP4 ADD PUSH2 0x3B5 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA4 DUP3 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0xED JUMPI PUSH2 0x56B PUSH2 0x575 SWAP3 PUSH1 0x4 PUSH2 0x1CD SWAP6 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x414 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xB35 JUMP JUMPDEST PUSH1 0x40 SWAP4 SWAP2 SWAP4 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x489 JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0xED JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH2 0xFC DUP3 PUSH2 0x584 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x3 NOT PUSH1 0x20 CALLDATASIZE DUP3 ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 GT PUSH2 0xED JUMPI PUSH1 0xE0 SWAP1 DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0xED JUMPI PUSH2 0x5D3 PUSH2 0x30F JUMP JUMPDEST PUSH2 0x5DF DUP3 PUSH1 0x4 ADD PUSH2 0x58E JUMP JUMPDEST DUP2 MSTORE PUSH2 0x5ED PUSH1 0x24 DUP4 ADD PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x5FE PUSH1 0x44 DUP4 ADD PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x60F PUSH1 0x64 DUP4 ADD PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x84 DUP3 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA4 DUP3 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC4 DUP3 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0xED JUMPI PUSH2 0x64A PUSH2 0x654 SWAP3 PUSH1 0x4 PUSH2 0x1CD SWAP6 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x414 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0xCBF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x60 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0xA0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x290 JUMPI PUSH2 0x1CD SWAP2 PUSH2 0x654 SWAP2 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATALOAD PUSH2 0x6B3 DUP2 PUSH2 0x584 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x24 CALLDATALOAD PUSH2 0x6C1 DUP2 PUSH2 0x584 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH2 0x6D2 DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0xF03 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x42F SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xED JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0xED JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0xED JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0xED JUMPI CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0xED JUMPI PUSH2 0x1CD SWAP2 PUSH1 0x24 PUSH2 0x754 SWAP3 ADD PUSH2 0x11C9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x6EC JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xED JUMPI JUMP JUMPDEST PUSH2 0x783 PUSH2 0x42F SWAP5 SWAP3 PUSH1 0x60 DUP4 MSTORE PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x3 NOT PUSH1 0x20 CALLDATASIZE DUP3 ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 GT PUSH2 0xED JUMPI PUSH1 0xC0 SWAP1 DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0xED JUMPI PUSH2 0x7D0 PUSH2 0x2EF JUMP JUMPDEST PUSH2 0x7DC DUP3 PUSH1 0x4 ADD PUSH2 0xF1 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x7EA PUSH1 0x24 DUP4 ADD PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x44 DUP3 ADD CALLDATALOAD DUP4 DUP2 GT PUSH2 0xED JUMPI PUSH2 0x80B SWAP1 PUSH1 0x4 CALLDATASIZE SWAP2 DUP6 ADD ADD PUSH2 0x355 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x64 DUP3 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x826 PUSH1 0x84 DUP4 ADD PUSH2 0x760 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA4 DUP3 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0xED JUMPI PUSH2 0x84D PUSH2 0x857 SWAP3 PUSH1 0x4 PUSH2 0x1CD SWAP6 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x414 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x127D JUMP JUMPDEST PUSH1 0x40 SWAP4 SWAP2 SWAP4 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x76D JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x883 DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x890 DUP3 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH2 0x89C PUSH2 0x147A JUMP JUMPDEST PUSH2 0x8A4 PUSH2 0x14DB JUMP JUMPDEST PUSH2 0x8B6 PUSH2 0x8B0 DUP4 PUSH2 0x4618 JUMP JUMPDEST DUP3 PUSH2 0x4654 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP4 DUP4 DUP6 SUB SWAP5 DUP6 GT PUSH2 0x941 JUMPI SWAP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP1 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 MSTORE PUSH2 0x91C SWAP2 SWAP1 PUSH2 0x917 PUSH1 0x64 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH2 0x5B9B JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH2 0xB06 JUMP JUMPDEST PUSH0 SWAP2 SUB SLT PUSH2 0xED JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xED JUMPI PUSH2 0x25D PUSH1 0x4 CALLDATALOAD PUSH2 0x9B3 DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x9BF DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 CALLER PUSH2 0x16B5 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x9E6 DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x9F3 DUP3 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP2 DUP3 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 SWAP3 PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0xA9C JUMPI PUSH0 SWAP4 SWAP3 SWAP4 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH1 0x20 DUP7 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP6 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP3 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xA6F JUMPI DUP7 PUSH2 0xA5C DUP8 PUSH2 0xA56 DUP4 DUP13 SUB DUP5 PUSH2 0x2CD JUMP JUMPDEST DUP3 PUSH2 0x45CB JUMP JUMPDEST SWAP1 MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST SWAP1 SWAP2 SWAP3 DUP1 PUSH2 0xA90 DUP7 SWAP10 DUP5 DUP4 SWAP9 SLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP3 AND DUP2 MSTORE ADD SWAP1 JUMP JUMPDEST SWAP9 ADD SWAP5 SWAP4 SWAP3 ADD SWAP1 PUSH2 0xA3E JUMP JUMPDEST PUSH4 0x27946F57 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xED JUMPI MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 NOT DUP2 ADD SWAP2 SWAP1 DUP3 GT PUSH2 0x941 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x941 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0xB3E PUSH2 0x14DB JUMP JUMPDEST PUSH2 0xB51 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 MLOAD AND PUSH2 0x1837 JUMP JUMPDEST PUSH2 0xB6A PUSH2 0xB65 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x186B JUMP JUMPDEST PUSH2 0xB83 PUSH2 0xB7E DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1961 JUMP JUMPDEST SWAP1 PUSH2 0xBD7 PUSH1 0x20 DUP4 ADD MLOAD MLOAD PUSH2 0xB9E PUSH1 0x60 DUP7 ADD SWAP2 DUP3 MLOAD MLOAD SWAP1 PUSH2 0x1E0C JUMP JUMPDEST DUP1 MLOAD PUSH1 0xC0 DUP6 ADD SWAP1 PUSH2 0xBB8 DUP3 MLOAD SWAP2 PUSH1 0xA0 DUP9 ADD SWAP3 DUP4 MLOAD SWAP2 PUSH2 0x1E7C JUMP JUMPDEST SWAP3 PUSH2 0xBC8 DUP8 MLOAD PUSH1 0x1 SWAP1 PUSH1 0x10 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0xC50 JUMPI JUMPDEST POP POP POP DUP5 DUP5 PUSH2 0x22BC JUMP JUMPDEST SWAP5 SWAP1 SWAP2 SWAP6 DUP7 PUSH2 0xBEB DUP4 MLOAD PUSH1 0x1 SWAP1 PUSH1 0x11 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0xBF9 JUMPI JUMPDEST POP POP POP POP SWAP3 SWAP2 SWAP1 JUMP JUMPDEST DUP5 SWAP8 POP SWAP4 PUSH2 0xC46 SWAP5 PUSH2 0xC3C PUSH2 0xC2F PUSH2 0xC18 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 DUP5 MLOAD CALLER SWAP1 PUSH2 0x29C4 JUMP JUMPDEST SWAP3 PUSH0 DUP1 DUP1 DUP1 PUSH2 0xBF0 JUMP JUMPDEST PUSH2 0xC78 PUSH2 0xCB7 SWAP5 DUP9 DUP11 PUSH2 0xC70 PUSH2 0xC2F PUSH2 0xC18 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 CALLER SWAP1 PUSH2 0x1F8B JUMP JUMPDEST PUSH2 0xCAC PUSH2 0xCA6 PUSH2 0xC8F DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP9 PUSH2 0x2043 JUMP JUMPDEST MLOAD SWAP2 MLOAD SWAP1 MLOAD SWAP2 PUSH2 0x1E7C JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0xBCD JUMP JUMPDEST SWAP1 PUSH2 0xCC8 PUSH2 0x14DB JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xCE1 DUP2 DUP5 MLOAD AND PUSH2 0x1837 JUMP JUMPDEST PUSH2 0xCF5 PUSH2 0xB65 DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD ISZERO PUSH2 0xED1 JUMPI PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0xD31 PUSH2 0xD25 PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP2 AND EQ PUSH2 0xEC2 JUMPI PUSH2 0xD4C PUSH2 0xB7E DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 PUSH2 0xD57 DUP5 DUP3 PUSH2 0x2B33 JUMP JUMPDEST SWAP1 PUSH2 0xD63 DUP6 DUP4 DUP4 PUSH2 0x2BCA JUMP JUMPDEST DUP6 MLOAD PUSH1 0xC SHR PUSH1 0x1 AND PUSH2 0xE47 JUMPI JUMPDEST DUP6 MLOAD PUSH2 0xD8A SWAP2 SWAP1 PUSH1 0xB SHR PUSH1 0x1 AND PUSH2 0xE06 JUMPI JUMPDEST DUP7 DUP5 DUP5 PUSH2 0x2F05 JUMP JUMPDEST SWAP8 SWAP2 SWAP8 SWAP5 SWAP1 SWAP8 DUP4 SWAP8 PUSH2 0xDA1 DUP5 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xD SHR AND SWAP1 JUMP JUMPDEST PUSH2 0xDD1 JUMPI JUMPDEST POP POP POP POP POP MLOAD PUSH2 0xDB5 DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0xDBE DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0xDC9 JUMPI POP DUP2 SWAP3 SWAP2 SWAP1 JUMP JUMPDEST SWAP2 DUP1 SWAP4 POP SWAP2 SWAP1 JUMP JUMPDEST DUP6 SWAP9 POP SWAP1 PUSH2 0xDF0 PUSH2 0xC2F PUSH2 0xC18 PUSH2 0xDFB SWAP9 SWAP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 DUP5 MLOAD SWAP2 CALLER SWAP3 PUSH2 0x338A JUMP JUMPDEST SWAP3 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0xDA6 JUMP JUMPDEST DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xE40 PUSH1 0x60 DUP7 ADD SWAP2 DUP3 MLOAD PUSH2 0xE39 PUSH2 0xC2F DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 DUP6 PUSH2 0x2E43 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0xD82 JUMP JUMPDEST PUSH2 0xE80 SWAP1 PUSH2 0xE5C DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0xE7A PUSH2 0xC2F DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x2D01 JUMP JUMPDEST PUSH2 0xE9D PUSH2 0xE97 PUSH2 0xC8F DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP7 PUSH2 0x2043 JUMP JUMPDEST PUSH2 0xEA8 DUP3 DUP7 DUP4 PUSH2 0x2D88 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xD8A PUSH2 0xEBB DUP7 DUP5 DUP5 PUSH2 0x2BCA JUMP JUMPDEST SWAP1 POP PUSH2 0xD70 JUMP JUMPDEST PUSH4 0xA54B181D PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x57A456B7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0xEFE JUMPI JUMP JUMPDEST PUSH2 0xEE0 JUMP JUMPDEST PUSH2 0xF0B PUSH2 0x14DB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x7 SLOAD PUSH1 0x2 SHR AND PUSH2 0x11A5 JUMPI PUSH1 0x40 DUP2 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP2 MLOAD AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x1192 JUMPI PUSH1 0x4 SWAP5 POP PUSH2 0xF4B PUSH2 0x147A JUMP JUMPDEST PUSH1 0x20 PUSH2 0xF61 PUSH2 0xD25 DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x38D52E0F PUSH1 0xE0 SHL DUP2 MSTORE SWAP7 DUP8 SWAP2 DUP3 SWAP1 GAS STATICCALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH1 0x80 SWAP6 PUSH0 SWAP2 PUSH2 0x1163 JUMPI JUMPDEST POP AND PUSH2 0xFA1 DUP2 PUSH2 0xF9C DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x35B8 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0xFBD PUSH1 0x60 DUP7 ADD SWAP3 DUP4 MLOAD SWAP1 PUSH2 0x35F5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0xFCD DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0xFD6 DUP2 PUSH2 0xEF4 JUMP JUMPDEST SUB PUSH2 0x10F8 JUMPI PUSH2 0xFFE SWAP2 DUP6 MLOAD SWAP2 PUSH2 0xFEB DUP4 PUSH2 0xEF4 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 MLOAD SWAP3 PUSH2 0x3A34 JUMP JUMPDEST PUSH32 0xEEB740C90BF2B18C9532EB7D473137767036D893DFF3E009F32718F821B2A4C0 DUP3 SWAP7 SWAP3 SWAP8 SWAP4 SWAP8 SWAP7 DUP9 PUSH2 0x105C PUSH2 0x103E PUSH2 0xD25 DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 PUSH1 0x60 DUP3 ADD SWAP6 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 JUMPDEST DUP1 MLOAD PUSH2 0x106B DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x1074 DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x10C7 JUMPI ADD MLOAD DUP1 DUP5 LT PUSH2 0x10AD JUMPI POP PUSH2 0x10A0 PUSH2 0x109B SWAP2 DUP5 SWAP3 DUP4 SWAP2 JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x35F5 JUMP JUMPDEST PUSH2 0x10A8 PUSH2 0x14B6 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 JUMP JUMPDEST PUSH4 0xE2EA151B PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 DUP5 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH0 REVERT JUMPDEST ADD MLOAD DUP1 DUP6 GT PUSH2 0x10E1 JUMPI POP PUSH2 0x10A0 PUSH2 0x109B SWAP2 DUP6 SWAP3 DUP4 SWAP2 PUSH2 0x108E JUMP JUMPDEST PUSH4 0xE2EA151B PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 DUP6 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x111B SWAP2 DUP6 MLOAD SWAP2 PUSH2 0x1108 DUP4 PUSH2 0xEF4 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 MLOAD SWAP3 PUSH2 0x366E JUMP JUMPDEST PUSH32 0x3771D13C67011E31E12031C54BB59B0BF544A80B81D280A3711E172AA8B7F47B DUP3 SWAP7 SWAP3 SWAP8 SWAP4 SWAP8 SWAP7 DUP9 PUSH2 0x115B PUSH2 0x103E PUSH2 0xD25 DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 PUSH2 0x1060 JUMP JUMPDEST PUSH2 0x1185 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x118B JUMPI JUMPDEST PUSH2 0x117D DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x11B4 JUMP JUMPDEST PUSH0 PUSH2 0xF85 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1173 JUMP JUMPDEST DUP5 PUSH4 0x85F41299 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0xF27DF09 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xED JUMPI MLOAD PUSH2 0x42F DUP2 PUSH2 0xDC JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH2 0x120B PUSH2 0x1205 PUSH32 0x0 SWAP3 DUP4 TLOAD ISZERO SWAP6 DUP7 PUSH2 0x1274 JUMPI JUMPDEST CALLDATASIZE SWAP2 PUSH2 0x3DE JUMP JUMPDEST CALLER PUSH2 0x56CC JUMP JUMPDEST SWAP3 PUSH2 0x1213 JUMPI POP JUMP JUMPDEST PUSH32 0x0 TLOAD PUSH2 0x1265 JUMPI PUSH0 SWAP1 TSTORE PUSH2 0xFC PUSH32 0x0 PUSH2 0x3D31 JUMP JUMPDEST PUSH4 0x20F1D86D PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 DUP6 TSTORE PUSH2 0x11FE JUMP JUMPDEST SWAP1 PUSH2 0x1286 PUSH2 0x14DB JUMP JUMPDEST PUSH2 0x1299 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 MLOAD AND PUSH2 0x1837 JUMP JUMPDEST PUSH2 0x12AD PUSH2 0xB65 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x130A PUSH32 0x0 TLOAD PUSH2 0x12E3 DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0x3D42 JUMP JUMPDEST PUSH2 0x1323 PUSH2 0x131E DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1BF0 JUMP JUMPDEST SWAP1 PUSH2 0x1377 PUSH1 0x20 DUP4 ADD MLOAD MLOAD PUSH2 0x133E PUSH1 0x40 DUP7 ADD SWAP2 DUP3 MLOAD MLOAD SWAP1 PUSH2 0x1E0C JUMP JUMPDEST DUP1 MLOAD PUSH1 0xC0 DUP6 ADD SWAP1 PUSH2 0x1358 DUP3 MLOAD SWAP2 PUSH1 0xA0 DUP9 ADD SWAP3 DUP4 MLOAD SWAP2 PUSH2 0x3D5B JUMP JUMPDEST SWAP3 PUSH2 0x1368 DUP8 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xE SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x13CA JUMPI JUMPDEST POP POP POP DUP5 DUP5 PUSH2 0x3F6A JUMP JUMPDEST SWAP5 SWAP1 SWAP6 DUP7 DUP5 PUSH2 0x138B DUP5 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xF SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x139A JUMPI JUMPDEST POP POP POP POP POP SWAP3 SWAP2 SWAP1 JUMP JUMPDEST PUSH2 0x13C0 SWAP6 POP PUSH2 0x13B6 PUSH2 0xC2F PUSH2 0xC18 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 DUP5 MLOAD CALLER SWAP1 PUSH2 0x445B JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP7 DUP2 PUSH2 0x1390 JUMP JUMPDEST PUSH2 0x13F1 PUSH2 0x1419 SWAP5 DUP9 DUP11 PUSH2 0x13EA PUSH2 0xC2F PUSH2 0xC18 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 CALLER PUSH2 0x3E39 JUMP JUMPDEST PUSH2 0x140E PUSH2 0x1408 PUSH2 0xC8F DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP9 PUSH2 0x20A7 JUMP JUMPDEST MLOAD SWAP2 MLOAD SWAP1 MLOAD SWAP2 PUSH2 0x3D5B JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x136D JUMP JUMPDEST PUSH4 0x7911C44B PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x1421 JUMPI CALLDATASIZE PUSH0 DUP1 CALLDATACOPY PUSH0 DUP1 CALLDATASIZE DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS DELEGATECALL RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY ISZERO PUSH2 0x1476 JUMPI RETURNDATASIZE PUSH0 RETURN JUMPDEST RETURNDATASIZE PUSH0 REVERT JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x14A7 JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH4 0x3EE5AEB5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE JUMP JUMPDEST PUSH32 0x0 TLOAD ISZERO PUSH2 0x1504 JUMPI JUMP JUMPDEST PUSH4 0x604DD39B PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x151D SWAP1 PUSH2 0x4618 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ PUSH2 0x941 JUMPI PUSH2 0xFC SWAP2 PUSH0 SUB SWAP1 PUSH2 0x4654 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 SWAP2 PUSH2 0x1544 DUP3 DUP5 DUP7 PUSH2 0x4715 JUMP JUMPDEST PUSH1 0x1 DUP2 ADD PUSH2 0x1554 JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 GT PUSH2 0x1693 JUMPI SUB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP2 AND SWAP4 DUP5 ISZERO PUSH2 0x1677 JUMPI DUP1 DUP4 AND SWAP6 DUP7 ISZERO PUSH2 0x165B JUMPI DUP5 PUSH2 0x15B4 DUP6 PUSH2 0x159E DUP7 PUSH2 0x159E DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD0FE57 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0xA0175360A15BCA328BAF7EA85C7B784D58B222A50D0CE760B10DBA336D226A61 SWAP2 PUSH2 0x1635 SWAP2 PUSH0 DUP2 DUP1 PUSH1 0x64 DUP2 ADD JUMPDEST SUB DUP2 DUP4 DUP10 GAS CALL PUSH2 0x1642 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x154D JUMP JUMPDEST DUP1 PUSH2 0x164F PUSH2 0x1655 SWAP3 PUSH2 0x27C JUMP JUMPDEST DUP1 PUSH2 0x946 JUMP JUMPDEST PUSH0 PUSH2 0x1624 JUMP JUMPDEST PUSH4 0x4A1406B1 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0xE602DF05 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 PUSH4 0x7DC7A0D9 PUSH1 0xE1 SHL PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x181B JUMPI DUP1 DUP7 AND SWAP2 DUP3 ISZERO PUSH2 0x17FF JUMPI PUSH2 0x16F5 DUP7 PUSH2 0x159E DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD DUP1 DUP7 GT PUSH2 0x17DB JUMPI DUP6 SWAP1 SUB PUSH2 0x171F DUP8 PUSH2 0x159E DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x173F DUP8 PUSH2 0x159E DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP6 DUP2 SLOAD ADD SWAP1 SSTORE AND SWAP2 DUP3 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F PUSH1 0x40 MLOAD DUP1 PUSH2 0x177C DUP9 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB SWAP1 LOG4 DUP1 EXTCODESIZE ISZERO PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH4 0x23DE6651 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 SWAP1 SWAP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH0 SWAP1 DUP3 SWAP1 DUP2 DUP4 DUP2 PUSH1 0x64 DUP2 ADD JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH2 0x17CE JUMPI POP JUMP JUMPDEST DUP1 PUSH2 0x164F PUSH2 0xFC SWAP3 PUSH2 0x27C JUMP JUMPDEST PUSH4 0x391434E3 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP6 SWAP1 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH4 0xEC442F05 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x4B637E8F PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 SHR AND ISZERO PUSH2 0x1859 JUMPI POP JUMP JUMPDEST PUSH4 0x4BDACE13 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP1 PUSH32 0x0 AND TIMESTAMP GT ISZERO DUP1 PUSH2 0x1953 JUMPI JUMPDEST PUSH2 0x1944 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x2 SHR AND SWAP1 PUSH2 0x18C6 PUSH1 0x5A SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x28 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x941 JUMPI DUP3 PUSH2 0x18FE JUMPI JUMPDEST POP POP SWAP1 POP PUSH2 0x18E3 JUMPI POP JUMP JUMPDEST PUSH4 0xD971F597 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x1930 SWAP3 POP PUSH2 0x1939 SWAP4 PUSH32 0x0 SWAP3 SHR AND PUSH2 0x5F8C JUMP JUMPDEST PUSH4 0xFFFFFFFF AND SWAP1 JUMP JUMPDEST TIMESTAMP GT ISZERO DUP1 PUSH0 DUP1 PUSH2 0x18D8 JUMP JUMPDEST PUSH4 0x36A7E2CD PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD DUP2 SHR AND PUSH2 0x189C JUMP JUMPDEST PUSH1 0x40 SWAP1 DUP2 MLOAD SWAP2 PUSH2 0x1970 DUP4 PUSH2 0x295 JUMP JUMPDEST PUSH0 DUP4 MSTORE DUP3 PUSH1 0x20 DUP2 ADD SWAP2 PUSH1 0x60 DUP1 DUP5 MSTORE DUP2 DUP4 ADD SWAP1 DUP1 DUP3 MSTORE DUP1 DUP5 ADD SWAP1 DUP1 DUP3 MSTORE PUSH1 0x80 SWAP4 PUSH1 0x80 DUP7 ADD DUP3 DUP2 MSTORE PUSH1 0xA0 DUP8 ADD DUP4 DUP2 MSTORE PUSH1 0xC0 DUP9 ADD SWAP4 DUP5 MSTORE PUSH2 0x19AC PUSH2 0x147A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP4 PUSH0 PUSH1 0x20 MSTORE DUP4 PUSH0 KECCAK256 SLOAD SWAP3 PUSH1 0x4 PUSH1 0x20 MSTORE PUSH2 0x19E8 DUP6 PUSH0 KECCAK256 SWAP5 PUSH1 0x3 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SWAP1 DUP2 SLOAD SWAP13 MSTORE PUSH2 0x4761 JUMP JUMPDEST DUP12 MSTORE PUSH2 0x19F3 DUP11 PUSH2 0x47B8 JUMP JUMPDEST DUP9 MSTORE PUSH2 0x19FE DUP11 PUSH2 0x1E22 JUMP JUMPDEST DUP8 MSTORE PUSH2 0x1A09 DUP11 PUSH2 0x1E22 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x1A16 DUP10 DUP14 MLOAD PUSH2 0x5BF2 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x1A21 DUP9 PUSH2 0x1E22 JUMP JUMPDEST DUP2 MSTORE DUP11 MLOAD SWAP2 PUSH1 0x1 SWAP10 PUSH1 0x1 DUP5 DUP2 SHR AND SWAP4 DUP5 PUSH2 0x1BDC JUMPI JUMPDEST POP DUP4 PUSH2 0x1BCA JUMPI JUMPDEST PUSH0 JUMPDEST DUP14 DUP12 DUP3 LT PUSH2 0x1A9D JUMPI POP POP POP POP POP POP POP POP POP POP POP POP POP DUP1 PUSH2 0x1A8E PUSH2 0x1A76 PUSH2 0x1A95 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x4846 JUMP JUMPDEST PUSH2 0x42F PUSH2 0x14B6 JUMP JUMPDEST SWAP1 DUP11 DUP14 SWAP3 DUP3 DUP13 DUP13 DUP13 PUSH2 0x1AFF DUP5 PUSH2 0x1AEB DUP2 PUSH2 0x1ADD PUSH2 0x1AD8 DUP16 DUP16 PUSH2 0x108E DUP6 PUSH2 0x1AC3 SWAP3 MLOAD PUSH2 0x1E54 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x4807 JUMP JUMPDEST SWAP5 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP5 MLOAD DUP4 PUSH2 0x1AF9 DUP4 DUP4 PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH2 0x1E54 JUMP JUMPDEST POP PUSH2 0x1B09 DUP2 PUSH2 0x49A1 JUMP JUMPDEST PUSH2 0x1B14 DUP6 DUP14 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH2 0x1B29 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP5 AND DUP6 DUP8 PUSH2 0x4A40 JUMP JUMPDEST DUP8 DUP14 DUP14 ISZERO PUSH2 0x1BBD JUMPI DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP3 PUSH2 0x1B9F JUMPI JUMPDEST POP POP PUSH2 0x1B50 JUMPI JUMPDEST POP POP POP POP POP JUMPDEST ADD PUSH2 0x1A3F JUMP JUMPDEST DUP3 PUSH2 0x1B73 SWAP3 PUSH2 0x1B6A DUP3 PUSH2 0x1B63 DUP9 MLOAD PUSH2 0x5C4E JUMP JUMPDEST SWAP5 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP7 SHR DUP6 PUSH2 0x5C71 JUMP JUMPDEST SWAP3 DUP4 PUSH2 0x1B83 JUMPI JUMPDEST DUP15 SWAP4 POP DUP13 PUSH2 0x1B44 JUMP JUMPDEST PUSH2 0x1B96 SWAP4 PUSH2 0x1B90 SWAP2 PUSH2 0xB28 JUMP JUMPDEST SWAP2 PUSH2 0x4A40 JUMP JUMPDEST PUSH0 DUP16 DUP3 DUP3 PUSH2 0x1B7A JUMP JUMPDEST SWAP1 SWAP2 POP MLOAD PUSH2 0x1BAC DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x1BB5 DUP2 PUSH2 0xEF4 JUMP JUMPDEST EQ DUP8 PUSH0 PUSH2 0x1B3D JUMP JUMPDEST POP POP POP POP POP POP POP POP PUSH2 0x1B4A JUMP JUMPDEST DUP13 MLOAD SWAP1 SWAP4 POP PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 PUSH2 0x1A3D JUMP JUMPDEST PUSH2 0x1BE7 SWAP2 SWAP5 POP PUSH2 0x5C4E JUMP JUMPDEST ISZERO ISZERO SWAP3 PUSH0 PUSH2 0x1A36 JUMP JUMPDEST PUSH1 0x40 SWAP1 DUP2 MLOAD SWAP2 PUSH2 0x1BFF DUP4 PUSH2 0x295 JUMP JUMPDEST PUSH0 DUP4 MSTORE DUP3 PUSH1 0x20 DUP2 ADD SWAP2 PUSH1 0x60 DUP1 DUP5 MSTORE DUP2 DUP4 ADD SWAP1 DUP1 DUP3 MSTORE DUP1 DUP5 ADD SWAP1 DUP1 DUP3 MSTORE PUSH1 0x80 SWAP4 PUSH1 0x80 DUP7 ADD DUP3 DUP2 MSTORE PUSH1 0xA0 DUP8 ADD DUP4 DUP2 MSTORE PUSH1 0xC0 DUP9 ADD SWAP4 DUP5 MSTORE PUSH2 0x1C3B PUSH2 0x147A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP4 PUSH0 PUSH1 0x20 MSTORE DUP4 PUSH0 KECCAK256 SLOAD SWAP3 PUSH1 0x4 PUSH1 0x20 MSTORE PUSH2 0x1C77 DUP6 PUSH0 KECCAK256 SWAP5 PUSH1 0x3 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SWAP1 DUP2 SLOAD SWAP13 MSTORE PUSH2 0x4761 JUMP JUMPDEST DUP12 MSTORE PUSH2 0x1C82 DUP11 PUSH2 0x47B8 JUMP JUMPDEST DUP9 MSTORE PUSH2 0x1C8D DUP11 PUSH2 0x1E22 JUMP JUMPDEST DUP8 MSTORE PUSH2 0x1C98 DUP11 PUSH2 0x1E22 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x1CA5 DUP10 DUP14 MLOAD PUSH2 0x5BF2 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x1CB0 DUP9 PUSH2 0x1E22 JUMP JUMPDEST DUP2 MSTORE DUP11 MLOAD SWAP2 PUSH1 0x1 SWAP10 PUSH1 0x1 DUP5 DUP2 SHR AND SWAP4 DUP5 PUSH2 0x1DF8 JUMPI JUMPDEST POP DUP4 PUSH2 0x1DE6 JUMPI JUMPDEST PUSH0 JUMPDEST DUP14 DUP12 DUP3 LT PUSH2 0x1D05 JUMPI POP POP POP POP POP POP POP POP POP POP POP POP POP DUP1 PUSH2 0x1A8E PUSH2 0x1A76 PUSH2 0x1A95 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP11 DUP14 SWAP3 DUP3 DUP13 DUP13 DUP13 PUSH2 0x1D2B DUP5 PUSH2 0x1AEB DUP2 PUSH2 0x1ADD PUSH2 0x1AD8 DUP16 DUP16 PUSH2 0x108E DUP6 PUSH2 0x1AC3 SWAP3 MLOAD PUSH2 0x1E54 JUMP JUMPDEST POP PUSH2 0x1D35 DUP2 PUSH2 0x49A1 JUMP JUMPDEST PUSH2 0x1D40 DUP6 DUP14 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH2 0x1D55 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP5 AND DUP6 DUP8 PUSH2 0x4A8D JUMP JUMPDEST DUP8 DUP14 DUP14 ISZERO PUSH2 0x1DD9 JUMPI DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP3 PUSH2 0x1DBB JUMPI JUMPDEST POP POP PUSH2 0x1D7C JUMPI JUMPDEST POP POP POP POP POP JUMPDEST ADD PUSH2 0x1CCE JUMP JUMPDEST DUP3 PUSH2 0x1D8F SWAP3 PUSH2 0x1B6A DUP3 PUSH2 0x1B63 DUP9 MLOAD PUSH2 0x5C4E JUMP JUMPDEST SWAP3 DUP4 PUSH2 0x1D9F JUMPI JUMPDEST DUP15 SWAP4 POP DUP13 PUSH2 0x1D70 JUMP JUMPDEST PUSH2 0x1DB2 SWAP4 PUSH2 0x1DAC SWAP2 PUSH2 0xB28 JUMP JUMPDEST SWAP2 PUSH2 0x4A8D JUMP JUMPDEST PUSH0 DUP16 DUP3 DUP3 PUSH2 0x1D96 JUMP JUMPDEST SWAP1 SWAP2 POP MLOAD PUSH2 0x1DC8 DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x1DD1 DUP2 PUSH2 0xEF4 JUMP JUMPDEST EQ DUP8 PUSH0 PUSH2 0x1D69 JUMP JUMPDEST POP POP POP POP POP POP POP POP PUSH2 0x1D76 JUMP JUMPDEST DUP13 MLOAD SWAP1 SWAP4 POP PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 PUSH2 0x1CCC JUMP JUMPDEST PUSH2 0x1E03 SWAP2 SWAP5 POP PUSH2 0x5C4E JUMP JUMPDEST ISZERO ISZERO SWAP3 PUSH0 PUSH2 0x1CC5 JUMP JUMPDEST SUB PUSH2 0x1E13 JUMPI JUMP JUMPDEST PUSH4 0xAAAD13F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x1E2C DUP3 PUSH2 0x33D JUMP JUMPDEST PUSH2 0x1E39 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x2CD JUMP JUMPDEST DUP3 DUP2 MSTORE DUP1 SWAP3 PUSH2 0x1E4A PUSH1 0x1F NOT SWAP2 PUSH2 0x33D JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1E68 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 MLOAD SWAP2 PUSH2 0x1E8F DUP3 MLOAD DUP3 MLOAD SWAP1 DUP6 PUSH2 0x4952 JUMP JUMPDEST PUSH2 0x1E98 DUP4 PUSH2 0x1E22 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x1EAA JUMPI POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x1EDF PUSH2 0x1EBA PUSH1 0x1 SWAP4 DUP6 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x1EDA PUSH2 0x1EC8 DUP5 DUP10 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x1ED3 DUP6 DUP10 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x498E JUMP JUMPDEST PUSH2 0x4F33 JUMP JUMPDEST PUSH2 0x1EE9 DUP3 DUP10 PUSH2 0x1E54 JUMP JUMPDEST MSTORE ADD PUSH2 0x1E9B JUMP JUMPDEST PUSH1 0x4 GT ISZERO PUSH2 0xEFE JUMPI JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0xED JUMPI JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xED JUMPI PUSH2 0x42F SWAP1 PUSH2 0x1EFA JUMP JUMPDEST SWAP1 PUSH1 0x4 DUP3 LT ISZERO PUSH2 0xEFE JUMPI MSTORE JUMP JUMPDEST SWAP6 SWAP3 SWAP4 PUSH2 0x1F59 PUSH2 0x1F7D SWAP6 PUSH2 0x42F SWAP10 SWAP8 SWAP4 PUSH2 0x1F6F SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP12 MSTORE AND PUSH1 0x20 DUP11 ADD MSTORE PUSH1 0x40 DUP10 ADD SWAP1 PUSH2 0x1F1B JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0xE0 PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0xE0 DUP7 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP1 DUP5 DUP3 SUB PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x432 JUMP JUMPDEST SWAP2 PUSH1 0xC0 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP6 SWAP7 SWAP4 PUSH2 0x1FEA PUSH2 0x1FAD DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH1 0x80 DUP9 ADD MLOAD SWAP8 PUSH2 0x1FBD DUP10 PUSH2 0x1EF0 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x80 PUSH1 0x40 DUP4 ADD MLOAD SWAP13 ADD MLOAD SWAP2 ADD MLOAD SWAP2 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP11 DUP12 SWAP10 DUP11 SWAP8 PUSH4 0x2E97E7D PUSH1 0xE6 SHL DUP10 MSTORE PUSH1 0x4 DUP10 ADD PUSH2 0x1F28 JUMP JUMPDEST SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP2 PUSH2 0x2014 JUMPI JUMPDEST POP ISZERO PUSH2 0x2005 JUMPI JUMP JUMPDEST PUSH4 0x1557C433 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x2036 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203C JUMPI JUMPDEST PUSH2 0x202E DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1F07 JUMP JUMPDEST PUSH0 PUSH2 0x1FFD JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2024 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x205B JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x20A1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x40 PUSH2 0x2081 PUSH2 0x207B DUP6 DUP4 DUP12 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x49A1 JUMP JUMPDEST PUSH2 0x208F DUP6 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MSTORE DUP4 PUSH0 MSTORE DUP6 DUP8 MSTORE PUSH0 KECCAK256 SLOAD AND DUP3 DUP8 PUSH2 0x4A40 JUMP JUMPDEST ADD PUSH2 0x204D JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x20BF JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x20FF PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x40 PUSH2 0x20DF PUSH2 0x207B DUP6 DUP4 DUP12 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST PUSH2 0x20ED DUP6 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MSTORE DUP4 PUSH0 MSTORE DUP6 DUP8 MSTORE PUSH0 KECCAK256 SLOAD AND DUP3 DUP8 PUSH2 0x4A8D JUMP JUMPDEST ADD PUSH2 0x20B1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x2112 DUP3 PUSH2 0x2B1 JUMP JUMPDEST PUSH0 PUSH1 0x40 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xED JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x213E DUP2 PUSH2 0x33D JUMP JUMPDEST SWAP4 PUSH2 0x214C PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2CD JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xED JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x2175 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2167 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0xED JUMPI DUP1 MLOAD SWAP1 PUSH2 0x219B DUP3 PUSH2 0x3C2 JUMP JUMPDEST SWAP3 PUSH2 0x21A9 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x2CD JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0xED JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP2 DUP4 SUB SLT PUSH2 0xED JUMPI DUP1 MLOAD SWAP3 PUSH1 0x20 DUP3 ADD MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0xED JUMPI DUP5 PUSH2 0x21FA SWAP2 DUP4 ADD PUSH2 0x2123 JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0xED JUMPI DUP2 PUSH2 0x2213 SWAP2 DUP5 ADD PUSH2 0x2123 JUMP JUMPDEST SWAP4 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0xED JUMPI PUSH2 0x42F SWAP3 ADD PUSH2 0x2184 JUMP JUMPDEST SWAP4 SWAP1 PUSH2 0x42F SWAP6 SWAP4 PUSH2 0x2268 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x225A SWAP4 AND DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP8 ADD MSTORE PUSH1 0xA0 DUP7 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP1 DUP5 DUP3 SUB PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x432 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x941 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x941 JUMPI JUMP JUMPDEST SWAP2 PUSH2 0x22AE SWAP1 PUSH2 0x42F SWAP5 SWAP3 DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x432 JUMP JUMPDEST SWAP3 PUSH2 0x22C5 PUSH2 0x147A JUMP JUMPDEST PUSH1 0x60 SWAP2 PUSH2 0x22D0 PUSH2 0x2105 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x22E4 DUP3 MLOAD MLOAD DUP1 DUP8 MSTORE PUSH2 0x1E22 JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP5 ADD SWAP7 DUP8 MLOAD PUSH2 0x22F5 DUP2 PUSH2 0x1EF0 JUMP JUMPDEST PUSH2 0x22FE DUP2 PUSH2 0x1EF0 JUMP JUMPDEST PUSH2 0x2701 JUMPI POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 PUSH2 0x2313 DUP8 MLOAD PUSH2 0x1E22 JUMP JUMPDEST SWAP6 PUSH2 0x234F DUP4 PUSH1 0x80 DUP13 ADD MLOAD PUSH2 0x2349 PUSH2 0x2331 DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x4EE2 JUMP JUMPDEST SWAP3 PUSH2 0x23C0 PUSH32 0x0 TLOAD PUSH2 0x2386 DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2684 JUMPI JUMPDEST PUSH1 0x40 DUP8 ADD MLOAD DUP1 DUP3 GT PUSH2 0x266C JUMPI POP PUSH2 0x23DE DUP2 SWAP11 SWAP10 SWAP11 PUSH2 0x4F55 JUMP JUMPDEST PUSH1 0x20 DUP11 ADD SWAP9 PUSH0 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x2527 JUMPI DUP13 PUSH2 0x23F9 DUP3 DUP9 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x2403 DUP2 PUSH2 0x4F55 JUMP JUMPDEST PUSH2 0x240D DUP4 DUP11 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x2515 JUMPI DUP2 PUSH2 0x2433 DUP5 PUSH1 0xA0 PUSH2 0x242A DUP3 PUSH1 0xC0 PUSH2 0x243A SWAP9 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP4 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0x4F66 JUMP JUMPDEST DUP1 PUSH2 0x2445 DUP4 DUP11 PUSH2 0x1E54 JUMP JUMPDEST MSTORE JUMPDEST PUSH2 0x2455 PUSH2 0x108E DUP4 DUP12 MLOAD PUSH2 0x1E54 JUMP JUMPDEST PUSH1 0x60 DUP12 ADD PUSH2 0x2464 DUP5 DUP3 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD DUP4 LT PUSH2 0x24E2 JUMPI POP DUP15 DUP4 PUSH2 0x1B90 DUP16 DUP16 DUP16 SWAP7 PUSH2 0x24D6 SWAP2 PUSH2 0x24BE DUP7 PUSH2 0x24B6 DUP2 DUP12 PUSH1 0x1 SWAP15 SWAP14 PUSH2 0x2493 DUP9 PUSH2 0x24DC SWAP16 PUSH2 0x1513 JUMP JUMPDEST PUSH2 0x24AF PUSH2 0x24A0 DUP5 DUP10 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 DUP14 PUSH2 0x4F95 JUMP JUMPDEST DUP8 MSTORE SWAP3 PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH2 0x24CD DUP6 PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP3 MLOAD SWAP1 PUSH2 0x2284 JUMP JUMPDEST SWAP1 PUSH2 0xB28 JUMP JUMPDEST ADD PUSH2 0x23E5 JUMP JUMPDEST SWAP2 PUSH2 0x24F1 DUP5 PUSH2 0x10C4 SWAP5 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH4 0x17BC2F23 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST POP POP PUSH2 0x2521 DUP2 DUP9 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x2447 JUMP JUMPDEST POP SWAP4 SWAP10 POP SWAP6 SWAP5 POP SWAP6 SWAP3 SWAP9 PUSH2 0x254D SWAP2 SWAP8 POP PUSH2 0x2548 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x5097 JUMP JUMPDEST PUSH32 0xFBE5B0D79FB94F1E81C0A92BF86AE9D3A19E9D1BF6202C0D3E75120F65D5D8A5 PUSH2 0x257F DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 PUSH2 0x25A1 DUP7 PUSH1 0x20 DUP8 ADD SWAP6 PUSH2 0x259A DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST CALLER SWAP2 PUSH2 0x1535 JUMP JUMPDEST PUSH2 0x25A9 PUSH2 0x50FA JUMP JUMPDEST PUSH2 0x2641 JUMPI JUMPDEST PUSH2 0x25D4 DUP7 PUSH2 0x25C3 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x5161 JUMP JUMPDEST PUSH2 0x2608 PUSH2 0x2331 PUSH2 0x25FC PUSH2 0x25EE DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 MLOAD SWAP7 PUSH2 0x108E DUP9 PUSH2 0x1EF0 JUMP JUMPDEST SWAP3 PUSH2 0x2630 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x261E DUP9 PUSH2 0x1EF0 JUMP JUMPDEST DUP13 DUP5 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP6 AND SWAP9 AND SWAP7 DUP5 PUSH2 0x2291 JUMP JUMPDEST SUB SWAP1 LOG4 PUSH2 0x263B PUSH2 0x14B6 JUMP JUMPDEST SWAP4 SWAP3 SWAP2 SWAP1 JUMP JUMPDEST PUSH2 0x2667 DUP7 PUSH2 0x2656 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH2 0x25AE JUMP JUMPDEST PUSH4 0x31D38E0B PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP9 SWAP5 SWAP2 PUSH2 0x2697 DUP12 SWAP8 SWAP5 SWAP10 SWAP6 SWAP3 SWAP12 MLOAD PUSH2 0x4B64 JUMP JUMPDEST SWAP11 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x26F1 JUMPI DUP1 DUP12 PUSH2 0x26EA DUP16 SWAP4 PUSH2 0x26E4 PUSH2 0x26D3 DUP16 DUP4 SWAP1 PUSH2 0x26C9 PUSH1 0x1 SWAP10 PUSH2 0x26C3 DUP5 DUP11 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x4F33 JUMP JUMPDEST PUSH2 0x1AF9 DUP4 DUP4 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x26DE DUP4 DUP7 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0xB28 JUMP JUMPDEST SWAP3 PUSH2 0x1E54 JUMP JUMPDEST MSTORE ADD PUSH2 0x269A JUMP JUMPDEST POP SWAP2 SWAP5 SWAP9 SWAP4 SWAP7 SWAP11 POP SWAP2 SWAP5 SWAP9 PUSH2 0x23C5 JUMP JUMPDEST SWAP5 SWAP1 PUSH1 0x1 DUP9 MLOAD PUSH2 0x2710 DUP2 PUSH2 0x1EF0 JUMP JUMPDEST PUSH2 0x2719 DUP2 PUSH2 0x1EF0 JUMP JUMPDEST SUB PUSH2 0x279D JUMPI PUSH2 0x2728 DUP10 MLOAD PUSH2 0x4AEC JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP2 DUP7 SWAP3 DUP11 PUSH2 0x2797 PUSH2 0x278D DUP12 DUP11 PUSH1 0x40 PUSH2 0x2748 PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x4B07 JUMP JUMPDEST SWAP3 ADD SWAP5 DUP3 DUP7 MSTORE DUP7 PUSH1 0x80 DUP3 ADD MLOAD SWAP4 PUSH2 0x2787 PUSH2 0xD25 PUSH2 0x2779 PUSH2 0x2772 PUSH2 0x2331 DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP6 MLOAD PUSH2 0x4B64 JUMP JUMPDEST SWAP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH2 0x4DE5 JUMP JUMPDEST SWAP1 SWAP3 MLOAD SWAP1 SWAP11 PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH2 0x23C5 JUMP JUMPDEST PUSH1 0x2 DUP9 SWAP7 SWAP3 SWAP7 MLOAD PUSH2 0x27AD DUP2 PUSH2 0x1EF0 JUMP JUMPDEST PUSH2 0x27B6 DUP2 PUSH2 0x1EF0 JUMP JUMPDEST SUB PUSH2 0x2849 JUMPI PUSH2 0x27C5 DUP10 MLOAD PUSH2 0x4AEC JUMP JUMPDEST PUSH2 0x2842 DUP3 PUSH1 0x60 DUP8 ADD SWAP1 PUSH2 0x27E9 PUSH2 0x27DB DUP4 MLOAD PUSH2 0x4B07 JUMP JUMPDEST PUSH1 0x40 DUP13 ADD SWAP4 DUP2 DUP6 MSTORE MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x27F5 DUP4 MLOAD DUP9 PUSH2 0x1E54 JUMP JUMPDEST MSTORE DUP12 PUSH2 0x2808 PUSH1 0x80 DUP3 ADD MLOAD SWAP4 MLOAD DUP1 SWAP4 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x2827 PUSH2 0x2820 PUSH2 0x2331 DUP13 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 MLOAD PUSH2 0x4B64 JUMP JUMPDEST SWAP3 PUSH2 0x283C PUSH2 0xD25 DUP13 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH2 0x4BBB JUMP JUMPDEST SWAP7 SWAP1 PUSH2 0x23C5 JUMP JUMPDEST POP SWAP4 PUSH1 0x3 DUP8 MLOAD PUSH2 0x2858 DUP2 PUSH2 0x1EF0 JUMP JUMPDEST PUSH2 0x2861 DUP2 PUSH2 0x1EF0 JUMP JUMPDEST SUB PUSH2 0x2909 JUMPI PUSH2 0x2870 DUP9 MLOAD PUSH2 0x4AD0 JUMP JUMPDEST PUSH0 PUSH2 0x2888 PUSH2 0xD25 PUSH2 0xD25 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP7 DUP2 ADD MLOAD PUSH1 0x80 DUP13 ADD MLOAD PUSH1 0xA0 DUP10 ADD MLOAD SWAP3 MLOAD PUSH4 0x2ADA38A3 PUSH1 0xE2 SHL DUP2 MSTORE SWAP10 DUP11 SWAP5 SWAP4 DUP6 SWAP4 DUP8 SWAP4 DUP6 SWAP4 PUSH2 0x28BD SWAP4 SWAP3 CALLER PUSH1 0x4 DUP8 ADD PUSH2 0x222A JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP5 DUP6 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP2 PUSH0 SWAP7 PUSH0 SWAP3 PUSH0 SWAP2 PUSH2 0x28DE JUMPI JUMPDEST POP SWAP2 SWAP7 SWAP3 PUSH2 0x23C5 JUMP JUMPDEST SWAP3 POP POP SWAP6 POP PUSH2 0x28FF SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x28F7 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x21CA JUMP JUMPDEST SWAP2 SWAP7 SWAP1 SWAP2 PUSH0 PUSH2 0x28D5 JUMP JUMPDEST PUSH4 0x137A9A39 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SLT PUSH2 0xED JUMPI PUSH2 0x292E DUP2 PUSH2 0x1EFA JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xED JUMPI PUSH2 0x42F SWAP3 ADD PUSH2 0x2123 JUMP JUMPDEST SWAP7 SWAP4 SWAP5 PUSH2 0x42F SWAP9 SWAP7 SWAP3 PUSH2 0x29B6 SWAP7 PUSH2 0x2987 PUSH2 0x29A8 SWAP7 PUSH2 0x299A SWAP6 PUSH2 0x100 SWAP5 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x20 DUP14 ADD MSTORE PUSH1 0x40 DUP13 ADD SWAP1 PUSH2 0x1F1B JUMP JUMPDEST PUSH1 0x60 DUP11 ADD MSTORE DUP1 PUSH1 0x80 DUP11 ADD MSTORE DUP9 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP1 DUP7 DUP3 SUB PUSH1 0xA0 DUP9 ADD MSTORE PUSH2 0x432 JUMP JUMPDEST SWAP1 DUP5 DUP3 SUB PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x432 JUMP JUMPDEST SWAP2 PUSH1 0xE0 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP5 SWAP4 SWAP6 SWAP3 SWAP7 SWAP2 SWAP1 DUP5 MLOAD PUSH2 0x29DD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP7 ADD MLOAD SWAP3 PUSH2 0x29ED DUP5 PUSH2 0x1EF0 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD DUP11 PUSH1 0xA0 DUP10 ADD MLOAD SWAP3 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP8 DUP9 SWAP8 PUSH4 0x2754888D PUSH1 0xE0 SHL DUP10 MSTORE PUSH1 0x4 DUP10 ADD SWAP8 PUSH2 0x2A19 SWAP9 PUSH2 0x294D JUMP JUMPDEST SUB SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP2 GAS PUSH0 SWAP5 DUP6 SWAP2 CALL SWAP4 DUP5 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP1 PUSH0 SWAP6 PUSH2 0x2B0C JUMPI JUMPDEST POP ISZERO DUP1 ISZERO PUSH2 0x2B00 JUMPI JUMPDEST PUSH2 0x2AF1 JUMPI PUSH1 0x1 DUP1 SWAP4 PUSH1 0x9 SHR AND ISZERO PUSH2 0x2A63 JUMPI SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH0 DUP4 JUMPDEST PUSH2 0x2A6A JUMPI JUMPDEST POP POP POP POP SWAP1 JUMP JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x2AEC JUMPI PUSH2 0x2A7D DUP2 DUP7 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x2A8E DUP4 DUP4 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD GT PUSH2 0x2A9D JUMPI POP DUP4 ADD DUP4 PUSH2 0x2A5E JUMP JUMPDEST PUSH2 0x2AC8 DUP3 PUSH2 0x2AC0 DUP2 PUSH2 0x2ABA PUSH2 0x108E DUP12 SWAP8 PUSH1 0x20 PUSH2 0x10C4 SWAP11 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST SWAP6 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP3 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH4 0x3EF629C9 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST PUSH2 0x2A63 JUMP JUMPDEST PUSH4 0x3A6723B PUSH1 0xE3 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP4 MLOAD DUP6 MLOAD EQ ISZERO PUSH2 0x2A45 JUMP JUMPDEST SWAP1 POP PUSH2 0x2B2B SWAP2 SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2B23 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2918 JUMP JUMPDEST SWAP4 SWAP1 PUSH0 PUSH2 0x2A3C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 SWAP2 PUSH1 0x80 DUP5 ADD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT DUP6 DUP4 LT OR PUSH2 0x290 JUMPI PUSH2 0x2BBA SWAP2 PUSH1 0x40 MSTORE PUSH0 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP5 PUSH0 DUP7 MSTORE PUSH2 0x2BB2 PUSH1 0x40 DUP3 ADD SWAP2 PUSH0 DUP4 MSTORE DUP4 PUSH1 0x60 DUP3 ADD SWAP7 PUSH0 DUP9 MSTORE DUP3 SWAP10 PUSH2 0x2BAB PUSH1 0x20 DUP5 ADD DUP1 MLOAD SWAP1 PUSH2 0x2B9B PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 PUSH1 0x40 DUP9 ADD MLOAD AND SWAP1 PUSH2 0x45CB JUMP JUMPDEST DUP8 MSTORE MLOAD SWAP1 PUSH1 0x60 DUP6 ADD MLOAD AND SWAP1 PUSH2 0x45CB JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x2D88 JUMP JUMPDEST SWAP1 MSTORE MLOAD PUSH2 0x4B64 JUMP JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x2BC7 DUP3 PUSH2 0xEF4 JUMP JUMPDEST MSTORE JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x60 PUSH1 0xC0 PUSH1 0x40 MLOAD PUSH2 0x2BDD DUP2 PUSH2 0x295 JUMP JUMPDEST PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH0 DUP4 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH0 PUSH1 0xA0 DUP3 ADD MSTORE ADD MSTORE DUP1 MLOAD SWAP3 PUSH2 0x2C0B DUP5 PUSH2 0xEF4 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 DUP3 ADD MLOAD SWAP4 ADD MLOAD PUSH1 0xC0 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD MLOAD SWAP4 ADD MLOAD SWAP4 PUSH2 0x2C34 PUSH2 0x2C2D PUSH2 0x30F JUMP JUMPDEST SWAP7 DUP8 PUSH2 0x2BBE JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE CALLER PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x2BC7 DUP3 PUSH2 0xEF4 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0xE0 DUP2 ADD SWAP1 DUP4 MLOAD PUSH2 0x2C72 DUP2 PUSH2 0xEF4 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP6 ADD MLOAD SWAP3 PUSH1 0xE0 PUSH1 0x40 DUP5 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH2 0x100 DUP5 ADD SWAP5 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x2CED JUMPI POP POP POP POP PUSH1 0xC0 DUP5 PUSH1 0x60 PUSH2 0x42F SWAP6 SWAP7 ADD MLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x2CDD PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0xA0 DUP6 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xC0 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST DUP4 MLOAD DUP7 MSTORE SWAP5 DUP2 ADD SWAP5 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2C9D JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP3 PUSH2 0x2D38 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH4 0x5211FA77 PUSH1 0xE0 SHL DUP6 MSTORE PUSH1 0x40 PUSH1 0x4 DUP7 ADD MSTORE PUSH1 0x44 DUP6 ADD SWAP1 PUSH2 0x2C60 JUMP JUMPDEST SWAP2 AND PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP2 PUSH2 0x2D69 JUMPI JUMPDEST POP ISZERO PUSH2 0x2D5A JUMPI JUMP JUMPDEST PUSH4 0xE91E17E7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x2D82 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203C JUMPI PUSH2 0x202E DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 PUSH2 0x2D52 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 DUP1 MLOAD PUSH2 0x2D96 DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x2D9F DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x2DE4 JUMPI SWAP1 PUSH2 0x2DDB PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH2 0x1ED3 PUSH1 0x80 PUSH2 0x2DE0 SWAP6 ADD MLOAD SWAP4 PUSH1 0xA0 PUSH2 0x2DCF PUSH1 0xC0 DUP6 ADD MLOAD DUP4 MLOAD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP4 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST PUSH2 0x498E JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH2 0x42F SWAP3 PUSH2 0x2E20 PUSH2 0x2E1A PUSH1 0x80 PUSH2 0x1EDA SWAP5 ADD MLOAD SWAP5 PUSH1 0xA0 PUSH2 0x2E0E PUSH1 0x20 PUSH1 0xC0 DUP8 ADD MLOAD SWAP4 ADD SWAP3 DUP4 MLOAD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP5 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x529A JUMP JUMPDEST SWAP3 PUSH2 0x498E JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH2 0x2E3D DUP4 PUSH2 0x1EFA JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x283A3D6B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x60 PUSH1 0x4 DUP3 ADD MSTORE SWAP5 SWAP1 SWAP4 DUP6 SWAP4 SWAP2 SWAP3 DUP5 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP5 SWAP3 DUP5 SWAP1 PUSH2 0x2E7C SWAP1 PUSH1 0x64 DUP7 ADD SWAP1 PUSH2 0x2C60 JUMP JUMPDEST SWAP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE SUB SWAP3 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x2ED3 JUMPI JUMPDEST POP ISZERO PUSH2 0x2EC4 JUMPI PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x2EB5 JUMPI SWAP1 JUMP JUMPDEST PUSH4 0x1D1B965 PUSH1 0xE6 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x14FE5DB5 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH2 0x2EF7 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x2EFE JUMPI JUMPDEST PUSH2 0x2EEF DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2E26 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x2E9D JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2EE5 JUMP JUMPDEST PUSH0 SWAP5 SWAP2 SWAP4 SWAP3 SWAP4 PUSH2 0x2F13 PUSH2 0x147A JUMP JUMPDEST PUSH2 0x2F1B PUSH2 0x2105 JUMP JUMPDEST SWAP2 DUP1 MLOAD PUSH2 0x2F27 DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x2F30 DUP2 PUSH2 0xEF4 JUMP JUMPDEST ISZERO PUSH2 0x328A JUMPI JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP7 ADD PUSH2 0x2F46 DUP2 MLOAD PUSH2 0x52BE JUMP JUMPDEST DUP4 PUSH2 0x2F82 DUP2 DUP6 ADD SWAP9 PUSH2 0x2F65 PUSH2 0xD25 PUSH2 0xD25 DUP13 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP13 DUP14 DUP1 SWAP5 DUP2 SWAP4 PUSH4 0x3964C0C3 PUSH1 0xE1 SHL DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x32B2 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP9 DUP10 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP10 PUSH2 0x326B JUMPI JUMPDEST POP DUP9 PUSH2 0x2F9F DUP2 PUSH2 0x52BE JUMP JUMPDEST DUP4 MLOAD PUSH2 0x2FAA DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x2FB3 DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x31F3 JUMPI POP PUSH1 0x40 DUP3 ADD MLOAD SWAP1 MSTORE PUSH2 0x2FF2 PUSH1 0xC0 DUP9 ADD MLOAD PUSH2 0x2FEB PUSH2 0x2E1A PUSH2 0x2FDC DUP8 DUP7 ADD SWAP4 DUP5 MLOAD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP3 PUSH1 0xA0 DUP13 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST SWAP1 DUP11 PUSH2 0x4F66 JUMP JUMPDEST SWAP4 PUSH1 0x80 DUP4 ADD MLOAD SWAP7 DUP6 SWAP8 SWAP9 PUSH1 0xA0 DUP6 ADD MLOAD DUP1 DUP9 LT PUSH2 0x31DC JUMPI POP JUMPDEST PUSH1 0x40 DUP6 ADD SWAP5 DUP11 DUP7 MLOAD PUSH2 0x3022 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x302C SWAP2 PUSH2 0x45B9 JUMP JUMPDEST PUSH1 0x60 ADD SWAP6 DUP10 DUP8 MLOAD PUSH2 0x3043 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x304D SWAP2 PUSH2 0x1513 JUMP JUMPDEST DUP4 MLOAD DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MLOAD SWAP2 PUSH2 0x3072 SWAP4 DUP7 PUSH2 0x4F95 JUMP JUMPDEST SWAP2 SWAP1 DUP2 DUP7 ADD SWAP6 PUSH1 0x40 ADD SWAP3 DUP4 MSTORE DUP6 MSTORE DUP6 MLOAD PUSH1 0x60 DUP5 ADD SWAP3 DUP14 DUP3 DUP6 MLOAD SWAP1 PUSH2 0x3095 SWAP2 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x30A0 SWAP2 PUSH2 0x2284 JUMP JUMPDEST SWAP1 MLOAD PUSH2 0x30AB SWAP2 PUSH2 0xB28 JUMP JUMPDEST PUSH2 0x30B5 SWAP2 DUP6 PUSH2 0x4A40 JUMP JUMPDEST DUP6 ADD SWAP2 DUP3 MLOAD DUP12 DUP2 DUP5 MLOAD SWAP1 PUSH2 0x30C8 SWAP2 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x30D3 SWAP2 PUSH2 0xB28 JUMP JUMPDEST PUSH2 0x30DD SWAP2 DUP4 PUSH2 0x4A40 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 DUP1 MLOAD DUP8 MLOAD PUSH2 0x3103 SWAP2 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP2 PUSH1 0x80 ADD SWAP2 DUP3 MLOAD DUP9 MLOAD PUSH2 0x3116 SWAP2 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x3120 SWAP2 PUSH2 0x5369 JUMP JUMPDEST DUP8 MLOAD PUSH2 0x3134 SWAP1 DUP6 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE MLOAD DUP4 MLOAD PUSH2 0x3141 SWAP2 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP1 MLOAD DUP4 MLOAD PUSH2 0x314F SWAP2 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x3159 SWAP2 PUSH2 0x5369 JUMP JUMPDEST SWAP2 MLOAD PUSH2 0x316C SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE MLOAD SWAP3 MLOAD SWAP4 MLOAD PUSH1 0x60 SWAP3 DUP4 ADD MLOAD SWAP2 MLOAD PUSH1 0x40 DUP1 MLOAD DUP12 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP12 SWAP1 MSTORE SWAP1 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP4 DUP3 AND SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH32 0x874B2D545CB271CDBDA4E093020C452328B24AF12382ED62C4D00F5C26709DB SWAP1 PUSH1 0x80 SWAP1 LOG4 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xFC PUSH2 0x14B6 JUMP JUMPDEST PUSH4 0xE2EA151B PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 DUP9 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 POP DUP2 SWAP9 POP PUSH2 0x321A PUSH1 0x60 PUSH2 0x3223 SWAP4 ADD MLOAD PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP1 DUP3 LT MUL SWAP1 DUP4 PUSH2 0x5335 JUMP JUMPDEST SWAP1 DUP2 DUP7 MSTORE PUSH2 0x2284 JUMP JUMPDEST SWAP7 PUSH2 0x3250 PUSH2 0x3237 PUSH1 0xC0 DUP10 ADD MLOAD DUP4 MLOAD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x3248 PUSH1 0xA0 DUP11 ADD MLOAD DUP5 MLOAD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP1 DUP11 PUSH2 0x5355 JUMP JUMPDEST SWAP4 PUSH1 0x80 DUP4 ADD MLOAD SWAP7 DUP6 SWAP9 PUSH1 0xA0 DUP6 ADD MLOAD DUP1 DUP9 GT PUSH2 0x31DC JUMPI POP PUSH2 0x300A JUMP JUMPDEST PUSH2 0x3283 SWAP2 SWAP10 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP8 PUSH0 PUSH2 0x2F94 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD PUSH2 0x32AB PUSH2 0x32A1 DUP3 MLOAD PUSH1 0x60 DUP7 ADD MLOAD SWAP1 PUSH2 0x4F33 JUMP JUMPDEST DUP1 DUP7 MSTORE DUP3 MLOAD PUSH2 0xB28 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x2F36 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x42F SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x2C60 JUMP JUMPDEST PUSH2 0x1A0 PUSH2 0x42F SWAP3 PUSH1 0x20 DUP4 MSTORE PUSH2 0x32DC PUSH1 0x20 DUP5 ADD DUP3 MLOAD PUSH2 0x2C56 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH2 0x100 SWAP1 DUP2 DUP6 ADD MSTORE DUP2 ADD MLOAD PUSH2 0x120 SWAP1 DUP2 DUP6 ADD MSTORE DUP2 ADD MLOAD PUSH2 0x335D PUSH2 0x140 SWAP2 DUP3 DUP7 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP2 ADD MLOAD SWAP1 PUSH2 0x3379 PUSH2 0x160 SWAP3 DUP4 DUP7 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST ADD MLOAD SWAP2 PUSH2 0x180 DUP1 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP4 SWAP6 SWAP1 SWAP2 SWAP5 SWAP3 DUP7 MLOAD PUSH2 0x339B DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x33A4 DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x35A9 JUMPI DUP7 PUSH1 0x40 DUP6 ADD MLOAD SWAP2 DUP5 JUMPDEST DUP3 MLOAD SWAP5 PUSH2 0x33BD DUP7 PUSH2 0xEF4 JUMP JUMPDEST PUSH1 0x40 SWAP8 DUP9 SWAP8 DUP9 DUP7 ADD MLOAD PUSH2 0x33D6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP7 PUSH1 0x60 DUP8 ADD MLOAD PUSH2 0x33EC SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP4 PUSH1 0x80 ADD SWAP3 DUP4 MLOAD DUP2 MLOAD PUSH2 0x33FE SWAP2 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP4 MLOAD SWAP1 PUSH1 0x20 ADD MLOAD PUSH2 0x340F SWAP2 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x20 DUP9 ADD MLOAD PUSH2 0x3426 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP8 PUSH1 0xC0 ADD MLOAD SWAP9 PUSH2 0x3434 PUSH2 0x31C JUMP JUMPDEST SWAP11 PUSH2 0x343F SWAP1 DUP13 PUSH2 0x2BBE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP12 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 DUP12 ADD MSTORE PUSH1 0x60 DUP10 ADD MSTORE PUSH1 0x80 DUP9 ADD MSTORE PUSH1 0xA0 DUP8 ADD MSTORE PUSH1 0xC0 DUP7 ADD MSTORE PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 DUP5 ADD DUP9 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x120 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE DUP2 MLOAD PUSH4 0x18B6EB55 PUSH1 0xE0 SHL DUP2 MSTORE SWAP7 DUP8 SWAP2 DUP3 SWAP1 DUP2 SWAP1 PUSH2 0x34BF SWAP1 PUSH1 0x4 DUP4 ADD PUSH2 0x32C3 JUMP JUMPDEST SUB SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS SWAP1 PUSH0 SWAP2 CALL SWAP5 DUP6 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP2 PUSH0 SWAP7 PUSH2 0x3585 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x3576 JUMPI PUSH1 0x9 SHR PUSH1 0x1 AND ISZERO PUSH2 0x3570 JUMPI POP DUP1 MLOAD PUSH2 0x34FD DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x3506 DUP2 PUSH2 0xEF4 JUMP JUMPDEST ISZERO DUP1 PUSH2 0x3563 JUMPI JUMPDEST DUP1 ISZERO PUSH2 0x3538 JUMPI JUMPDEST PUSH2 0x351C JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0xA0 ADD MLOAD PUSH4 0xCC0E4A99 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH1 0x1 DUP2 MLOAD PUSH2 0x3546 DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x354F DUP2 PUSH2 0xEF4 JUMP JUMPDEST EQ DUP1 ISZERO PUSH2 0x3514 JUMPI POP PUSH1 0xA0 DUP2 ADD MLOAD DUP3 GT PUSH2 0x3514 JUMP JUMPDEST POP PUSH1 0xA0 DUP2 ADD MLOAD DUP3 LT PUSH2 0x350D JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH4 0x568A77B PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x35A0 SWAP4 SWAP7 POP DUP1 SWAP2 SWAP3 POP SWAP1 RETURNDATASIZE LT PUSH2 0x2EFE JUMPI PUSH2 0x2EEF DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP4 SWAP1 PUSH0 DUP1 PUSH2 0x34DF JUMP JUMPDEST DUP7 PUSH1 0x40 DUP6 ADD MLOAD SWAP2 DUP5 SWAP3 SWAP5 PUSH2 0x33B1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP3 AND DUP1 SWAP3 SUB PUSH2 0x35E0 JUMPI POP POP JUMP JUMPDEST PUSH4 0x36B18D09 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 PUSH32 0x0 GT PUSH2 0x361F JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH4 0x18FE7385 PUSH1 0xE0 SHL PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 DUP2 SUB SWAP3 SWAP2 PUSH0 SGT DUP1 ISZERO DUP3 DUP6 SGT AND SWAP2 DUP5 SLT AND OR PUSH2 0x941 JUMPI JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH0 DUP4 DUP3 ADD SWAP4 DUP5 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x941 JUMPI JUMP JUMPDEST SWAP4 SWAP1 SWAP2 PUSH2 0x367A DUP6 PUSH2 0xEF4 JUMP JUMPDEST DUP5 ISZERO DUP1 ISZERO PUSH2 0x39BD JUMPI PUSH2 0x36AF PUSH1 0x20 PUSH2 0x3690 DUP8 PUSH2 0xB1A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH4 0xEF8B30F7 PUSH1 0xE0 SHL DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH2 0x36D4 SWAP2 PUSH0 SWAP2 PUSH2 0x399E JUMPI JUMPDEST POP PUSH2 0xB1A JUMP JUMPDEST SWAP5 SWAP6 JUMPDEST PUSH2 0x36F2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP2 PUSH2 0x36FC PUSH2 0x50FA JUMP JUMPDEST PUSH2 0x3996 JUMPI DUP7 SWAP3 DUP9 SWAP3 SWAP1 SWAP2 PUSH1 0x80 DUP4 SWAP1 SHR SWAP2 DUP6 DUP4 LT PUSH2 0x3771 JUMPI POP POP POP SWAP3 PUSH2 0x376B DUP3 PUSH2 0x3748 DUP7 PUSH2 0x3743 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP10 PUSH2 0xFC SWAP12 PUSH1 0x80 SHR SUB SWAP4 AND PUSH2 0x2284 JUMP JUMPDEST PUSH2 0x5369 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0x3765 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x45B9 JUMP JUMPDEST AND PUSH2 0x1513 JUMP JUMPDEST SWAP1 SWAP3 SWAP4 POP PUSH2 0x3780 SWAP2 SWAP5 POP PUSH2 0xEF4 JUMP JUMPDEST ISZERO PUSH2 0x3879 JUMPI PUSH2 0x37A8 PUSH2 0x37A3 PUSH2 0x3795 DUP6 DUP5 PUSH2 0x55A0 JUMP JUMPDEST PUSH2 0x379E DUP11 PUSH2 0x4618 JUMP JUMPDEST PUSH2 0x3653 JUMP JUMPDEST PUSH2 0x544C JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP4 PUSH2 0x37BF DUP2 DUP7 DUP10 PUSH2 0x556A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6E553F65 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP5 PUSH1 0x20 SWAP1 DUP7 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 PUSH0 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH2 0x3748 DUP10 SWAP6 PUSH2 0x3854 DUP8 PUSH2 0x3849 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 SWAP7 DUP9 DUP16 DUP10 PUSH2 0xFC SWAP16 DUP6 SWAP15 PUSH2 0x3843 DUP16 PUSH2 0x376B SWAP16 PUSH2 0x3849 SWAP7 PUSH2 0x384E SWAP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP7 PUSH0 SWAP2 PUSH2 0x385A JUMPI JUMPDEST POP SWAP11 DUP12 SWAP4 JUMPDEST AND SWAP1 PUSH2 0x383E DUP3 DUP3 PUSH2 0x5468 JUMP JUMPDEST PUSH2 0x5613 JUMP JUMPDEST AND PUSH2 0x2284 JUMP JUMPDEST PUSH2 0xB28 JUMP JUMPDEST SWAP5 PUSH2 0x2284 JUMP JUMPDEST SWAP1 PUSH2 0x5369 JUMP JUMPDEST PUSH2 0x3873 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 PUSH2 0x382D JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x3899 PUSH2 0x37A3 PUSH2 0x388B DUP4 DUP6 PUSH2 0x53AB JUMP JUMPDEST PUSH2 0x3894 DUP10 PUSH2 0x4618 JUMP JUMPDEST PUSH2 0x363B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xB3D7F6B9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP4 PUSH1 0x20 SWAP4 SWAP3 SWAP1 SWAP2 DUP5 DUP2 PUSH1 0x24 DUP2 DUP10 GAS STATICCALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH2 0x38DF SWAP2 PUSH0 SWAP2 PUSH2 0x3979 JUMPI JUMPDEST POP DUP7 DUP11 PUSH2 0x556A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x94BF804D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP5 DUP5 SWAP1 DUP7 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 PUSH0 SWAP1 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x20A JUMPI PUSH2 0xFC SWAP7 PUSH2 0x3854 DUP12 PUSH2 0x3849 DUP6 DUP16 SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP8 SWAP16 SWAP11 DUP5 SWAP16 DUP16 SWAP7 PUSH2 0x376B SWAP16 SWAP8 PUSH2 0x3849 SWAP7 PUSH2 0x3748 SWAP16 SWAP10 PUSH2 0x384E SWAP11 PUSH2 0x3843 SWAP6 PUSH0 SWAP3 PUSH2 0x395C JUMPI JUMPDEST POP POP SWAP9 DUP10 SWAP3 PUSH2 0x3832 JUMP JUMPDEST PUSH2 0x3972 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x3952 JUMP JUMPDEST PUSH2 0x3990 SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 PUSH2 0x38D7 JUMP JUMPDEST POP SWAP1 SWAP4 POP POP POP JUMP JUMPDEST PUSH2 0x39B7 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 PUSH2 0x36CE JUMP JUMPDEST PUSH2 0x39EA PUSH1 0x20 PUSH2 0x39CB DUP8 PUSH2 0x2276 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH4 0xB3D7F6B9 PUSH1 0xE0 SHL DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH2 0x3A0F SWAP2 PUSH0 SWAP2 PUSH2 0x3A15 JUMPI JUMPDEST POP PUSH2 0x2276 JUMP JUMPDEST SWAP6 PUSH2 0x36D7 JUMP JUMPDEST PUSH2 0x3A2E SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 PUSH2 0x3A09 JUMP JUMPDEST SWAP4 SWAP1 PUSH2 0x3A3F DUP6 PUSH2 0xEF4 JUMP JUMPDEST DUP5 ISZERO SWAP5 DUP6 ISZERO PUSH2 0x3CDA JUMPI PUSH2 0x3A75 PUSH1 0x20 PUSH2 0x3A56 DUP8 PUSH2 0xB1A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH4 0x266D6A83 PUSH1 0xE1 SHL DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH2 0x3A99 SWAP2 PUSH0 SWAP2 PUSH2 0x399E JUMPI POP PUSH2 0xB1A JUMP JUMPDEST SWAP5 SWAP6 JUMPDEST PUSH2 0x3AB7 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP2 PUSH2 0x3AC1 PUSH2 0x50FA JUMP JUMPDEST PUSH2 0x3996 JUMPI DUP8 SWAP4 DUP8 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP2 DUP3 DUP5 AND SWAP2 DUP7 DUP4 LT PUSH2 0x3B38 JUMPI POP POP POP SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x3B0E DUP4 DUP7 PUSH2 0xFC SWAP9 PUSH2 0x3B06 DUP7 PUSH2 0x3B33 SWAP9 PUSH1 0x80 SHR PUSH2 0x2284 JUMP JUMPDEST SWAP3 AND SUB PUSH2 0x5369 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0x3B2B DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE JUMPDEST AND PUSH2 0x45B9 JUMP JUMPDEST PUSH2 0x1513 JUMP JUMPDEST SWAP2 SWAP7 POP SWAP3 SWAP5 POP PUSH2 0x3B48 SWAP2 POP PUSH2 0xEF4 JUMP JUMPDEST ISZERO PUSH2 0x3C2D JUMPI PUSH2 0x3B5D PUSH2 0x37A3 PUSH2 0x3795 DUP8 DUP6 PUSH2 0x53AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5D043B29 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP4 SWAP1 PUSH1 0x20 DUP6 PUSH1 0x64 DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND GAS CALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH2 0x3BEB DUP10 SWAP6 PUSH2 0x3854 DUP5 PUSH2 0x3849 DUP15 PUSH2 0x3BE2 DUP12 DUP16 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xFC SWAP16 SWAP13 PUSH2 0x3BDD DUP16 SWAP14 PUSH2 0x3B33 SWAP16 SWAP5 DUP9 SWAP16 DUP6 SWAP16 PUSH2 0x3849 SWAP8 PUSH0 SWAP2 PUSH2 0x3C0E JUMPI JUMPDEST POP SWAP6 DUP7 SWAP3 JUMPDEST AND SWAP1 PUSH2 0x5658 JUMP JUMPDEST PUSH2 0x2284 JUMP JUMPDEST SWAP5 PUSH1 0x80 SHR PUSH2 0x2284 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0x3C08 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x3B2D JUMP JUMPDEST PUSH2 0x3C27 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 PUSH2 0x3BD1 JUMP JUMPDEST PUSH2 0x3C3D PUSH2 0x37A3 PUSH2 0x388B DUP8 DUP6 PUSH2 0x55A0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2D182BE5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 PUSH1 0x20 DUP3 PUSH1 0x64 DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x20A JUMPI PUSH2 0x3BEB DUP10 SWAP6 PUSH2 0x3854 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x3849 DUP15 PUSH2 0x3BE2 DUP12 DUP16 DUP11 PUSH2 0xFC SWAP16 PUSH2 0x3BDD DUP16 SWAP4 PUSH2 0x3B33 SWAP16 SWAP15 DUP9 SWAP16 SWAP6 DUP12 SWAP16 SWAP7 PUSH2 0x3849 SWAP8 PUSH0 SWAP2 PUSH2 0x3CBB JUMPI JUMPDEST POP SWAP12 DUP13 SWAP4 PUSH2 0x3BD6 JUMP JUMPDEST PUSH2 0x3CD4 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 PUSH2 0x3CB2 JUMP JUMPDEST PUSH2 0x3D07 PUSH1 0x20 PUSH2 0x3CE8 DUP8 PUSH2 0x2276 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH4 0xA28A477 PUSH1 0xE0 SHL DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH2 0x3D2B SWAP2 PUSH0 SWAP2 PUSH2 0x3A15 JUMPI POP PUSH2 0x2276 JUMP JUMPDEST SWAP6 PUSH2 0x3A9C JUMP JUMPDEST DUP1 TLOAD SWAP1 PUSH1 0x1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x941 JUMPI TSTORE JUMP JUMPDEST SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 TSTORE JUMP JUMPDEST SWAP2 SWAP1 DUP3 MLOAD SWAP2 PUSH2 0x3D6E DUP3 MLOAD DUP3 MLOAD SWAP1 DUP6 PUSH2 0x4952 JUMP JUMPDEST PUSH2 0x3D77 DUP4 PUSH2 0x1E22 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x3D89 JUMPI POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x3DBB PUSH2 0x3DA2 PUSH1 0x1 SWAP5 DUP7 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x2DDB PUSH2 0x3DB0 DUP6 DUP11 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x1ED3 DUP7 DUP11 PUSH2 0x1E54 JUMP JUMPDEST DIV PUSH2 0x3DC6 DUP3 DUP10 PUSH2 0x1E54 JUMP JUMPDEST MSTORE ADD PUSH2 0x3D7A JUMP JUMPDEST PUSH1 0x5 GT ISZERO PUSH2 0xEFE JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xEFE JUMPI MSTORE JUMP JUMPDEST SWAP6 SWAP2 SWAP4 PUSH2 0x3E15 PUSH2 0x42F SWAP9 SWAP7 SWAP5 PUSH2 0x3E26 SWAP4 PUSH2 0x1F7D SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP12 MSTORE AND PUSH1 0x20 DUP11 ADD MSTORE PUSH1 0x40 DUP10 ADD SWAP1 PUSH2 0x3DD7 JUMP JUMPDEST PUSH1 0xE0 PUSH1 0x60 DUP9 ADD MSTORE PUSH1 0xE0 DUP8 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP7 ADD MSTORE DUP5 DUP3 SUB PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x432 JUMP JUMPDEST SWAP3 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP6 SWAP7 SWAP4 SWAP7 PUSH2 0x3E9A PUSH2 0x3E5D DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH1 0x80 DUP9 ADD MLOAD SWAP8 PUSH2 0x3E6D DUP10 PUSH2 0x3DCD JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x80 PUSH1 0x60 DUP4 ADD MLOAD SWAP4 ADD MLOAD SWAP2 ADD MLOAD SWAP2 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP11 DUP12 SWAP10 DUP11 SWAP8 PUSH4 0x45421EC7 PUSH1 0xE0 SHL DUP10 MSTORE PUSH1 0x4 DUP10 ADD PUSH2 0x3DE4 JUMP JUMPDEST SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP2 PUSH2 0x3EC4 JUMPI JUMPDEST POP ISZERO PUSH2 0x3EB5 JUMPI JUMP JUMPDEST PUSH4 0x5975B29 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3EDD SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203C JUMPI PUSH2 0x202E DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 PUSH2 0x3EAD JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0xED JUMPI DUP3 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 GT PUSH2 0xED JUMPI DUP4 PUSH2 0x3F0E SWAP2 DUP7 ADD PUSH2 0x2123 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP2 ADD MLOAD SWAP4 PUSH1 0x40 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0xED JUMPI DUP2 PUSH2 0x2213 SWAP2 DUP5 ADD PUSH2 0x2123 JUMP JUMPDEST SWAP4 PUSH2 0x3F57 PUSH2 0x2268 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x42F SWAP9 SWAP7 SWAP5 AND DUP8 MSTORE PUSH1 0xA0 PUSH1 0x20 DUP9 ADD MSTORE PUSH1 0xA0 DUP8 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP7 ADD MSTORE DUP5 DUP3 SUB PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x432 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x3F74 PUSH2 0x147A JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3F7E PUSH2 0x2105 JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP6 ADD PUSH2 0x3F91 DUP2 MLOAD MLOAD DUP1 DUP7 MSTORE PUSH2 0x1E22 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD SWAP6 DUP7 MLOAD PUSH2 0x3FA1 DUP2 PUSH2 0x3DCD JUMP JUMPDEST PUSH2 0x3FAA DUP2 PUSH2 0x3DCD JUMP JUMPDEST PUSH2 0x41E9 JUMPI POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x3FBE DUP7 MLOAD PUSH2 0x1E22 JUMP JUMPDEST SWAP5 PUSH2 0x3FE2 DUP3 PUSH1 0x80 DUP12 ADD MLOAD PUSH2 0x3FDC PUSH2 0x2331 DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x5A38 JUMP JUMPDEST SWAP10 JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD DUP1 DUP5 LT PUSH2 0x41D2 JUMPI POP PUSH2 0x3FFD DUP4 SWAP10 SWAP9 SWAP10 PUSH2 0x4F55 JUMP JUMPDEST PUSH1 0x20 DUP10 ADD SWAP8 PUSH0 JUMPDEST DUP13 DUP12 MLOAD DUP3 LT ISZERO PUSH2 0x4111 JUMPI DUP2 PUSH2 0x4018 SWAP2 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x4022 DUP2 PUSH2 0x4F55 JUMP JUMPDEST PUSH2 0x402C DUP3 DUP9 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x4100 JUMPI PUSH2 0x4051 SWAP1 DUP14 PUSH2 0x404A DUP5 PUSH1 0xA0 PUSH2 0x242A DUP3 PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0x5355 JUMP JUMPDEST DUP1 PUSH2 0x405C DUP4 DUP10 PUSH2 0x1E54 JUMP JUMPDEST MSTORE JUMPDEST PUSH2 0x406C PUSH2 0x108E DUP4 DUP11 MLOAD PUSH2 0x1E54 JUMP JUMPDEST PUSH1 0x40 DUP11 ADD PUSH2 0x407B DUP5 DUP3 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD DUP4 GT PUSH2 0x40CD JUMPI POP DUP14 DUP4 PUSH2 0x1B90 DUP15 PUSH2 0x40BF DUP16 SWAP7 DUP16 SWAP8 PUSH2 0x40AA DUP7 PUSH2 0x24B6 DUP2 DUP12 PUSH1 0x1 SWAP15 SWAP14 PUSH2 0x2493 DUP9 PUSH2 0x40C7 SWAP16 PUSH2 0x45B9 JUMP JUMPDEST MSTORE PUSH2 0x40B9 DUP6 PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x2284 JUMP JUMPDEST SWAP1 MLOAD SWAP1 PUSH2 0xB28 JUMP JUMPDEST ADD PUSH2 0x4004 JUMP JUMPDEST SWAP2 PUSH2 0x40DC DUP5 PUSH2 0x10C4 SWAP5 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH4 0x23B6A179 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST POP PUSH2 0x410B DUP2 DUP8 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x405E JUMP JUMPDEST POP POP SWAP4 SWAP7 SWAP5 POP SWAP7 POP SWAP7 POP SWAP7 PUSH2 0x4131 SWAP1 PUSH2 0x2548 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH32 0xA26A52D8D53702BBA7F137907B8E1F99FF87F6D450144270CA25E72481CCA871 PUSH2 0x4163 DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 PUSH2 0x4184 DUP10 PUSH1 0x20 DUP8 ADD SWAP6 PUSH2 0x417E DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x5A7F JUMP JUMPDEST PUSH2 0x41AA PUSH2 0x2331 PUSH2 0x419E PUSH2 0x25EE DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 MLOAD SWAP7 PUSH2 0x108E DUP9 PUSH2 0x3DCD JUMP JUMPDEST SWAP3 PUSH2 0x2630 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x41C0 DUP9 PUSH2 0x3DCD JUMP JUMPDEST DUP9 DUP5 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP6 AND SWAP9 AND SWAP7 DUP5 PUSH2 0x2291 JUMP JUMPDEST PUSH4 0x8D261D5D PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 DUP5 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH1 0x3 DUP8 MLOAD PUSH2 0x41F6 DUP2 PUSH2 0x3DCD JUMP JUMPDEST PUSH2 0x41FF DUP2 PUSH2 0x3DCD JUMP JUMPDEST SUB PUSH2 0x4221 JUMPI PUSH2 0x420E DUP9 MLOAD PUSH2 0x5A1C JUMP JUMPDEST PUSH2 0x4218 DUP2 MLOAD PUSH2 0x1E22 JUMP JUMPDEST SWAP5 PUSH0 SWAP2 SWAP10 PUSH2 0x3FE4 JUMP JUMPDEST SWAP8 PUSH1 0x1 DUP8 MLOAD PUSH2 0x422F DUP2 PUSH2 0x3DCD JUMP JUMPDEST PUSH2 0x4238 DUP2 PUSH2 0x3DCD JUMP JUMPDEST SUB PUSH2 0x42A0 JUMPI PUSH2 0x4247 DUP9 MLOAD PUSH2 0x4AEC JUMP JUMPDEST PUSH2 0x4298 DUP10 PUSH2 0x4259 DUP5 PUSH1 0x40 DUP9 ADD MLOAD PUSH2 0x57D1 JUMP JUMPDEST PUSH1 0x80 DUP11 ADD MLOAD SWAP1 PUSH2 0x4273 PUSH2 0x2331 DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x427D DUP13 MLOAD PUSH2 0x4B64 JUMP JUMPDEST SWAP2 PUSH2 0x4292 PUSH2 0xD25 DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP4 PUSH2 0x57EC JUMP JUMPDEST SWAP6 SWAP1 SWAP2 PUSH2 0x3FE4 JUMP JUMPDEST SWAP8 SWAP4 PUSH1 0x2 DUP8 MLOAD PUSH2 0x42AF DUP2 PUSH2 0x3DCD JUMP JUMPDEST PUSH2 0x42B8 DUP2 PUSH2 0x3DCD JUMP JUMPDEST SUB PUSH2 0x4324 JUMPI SWAP8 DUP8 SWAP9 PUSH2 0x42CA DUP10 MLOAD PUSH2 0x4AEC JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MLOAD SWAP2 PUSH2 0x42D9 DUP8 PUSH2 0x4B07 JUMP JUMPDEST PUSH2 0x431E PUSH2 0x4314 PUSH1 0x40 DUP12 ADD SWAP3 DUP1 DUP5 MSTORE DUP10 DUP12 SWAP16 DUP9 PUSH1 0x80 DUP3 ADD MLOAD SWAP4 PUSH2 0x430E PUSH2 0xD25 PUSH2 0x2779 PUSH2 0x2772 PUSH2 0x2331 DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH2 0x5706 JUMP JUMPDEST SWAP1 SWAP3 MLOAD SWAP1 SWAP10 PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH2 0x3FE4 JUMP JUMPDEST POP PUSH1 0x4 DUP7 MLOAD PUSH2 0x4332 DUP2 PUSH2 0x3DCD JUMP JUMPDEST PUSH2 0x433B DUP2 PUSH2 0x3DCD JUMP JUMPDEST SUB PUSH2 0x43E3 JUMPI PUSH2 0x434A DUP8 MLOAD PUSH2 0x56EA JUMP JUMPDEST PUSH0 PUSH2 0x4362 PUSH2 0xD25 PUSH2 0xD25 DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MLOAD SWAP1 PUSH1 0x80 DUP11 ADD MLOAD SWAP2 DUP4 PUSH1 0xA0 DUP9 ADD MLOAD SWAP9 PUSH2 0x4396 PUSH1 0x40 MLOAD SWAP11 DUP12 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH4 0xE4C43663 PUSH1 0xE0 SHL DUP7 MSTORE CALLER PUSH1 0x4 DUP8 ADD PUSH2 0x3F2D JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP1 PUSH0 SWAP6 PUSH0 SWAP2 PUSH0 SWAP2 PUSH2 0x43B8 JUMPI JUMPDEST POP SWAP1 SWAP6 SWAP2 SWAP10 PUSH2 0x3FE4 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x43D9 SWAP2 SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x43D1 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3EE3 JUMP JUMPDEST SWAP2 SWAP6 SWAP3 SWAP2 PUSH0 PUSH2 0x43AE JUMP JUMPDEST PUSH4 0x6C02B395 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP7 SWAP3 PUSH2 0x42F SWAP9 SWAP7 SWAP5 PUSH2 0x4448 SWAP4 PUSH2 0x442C PUSH2 0x443A SWAP4 PUSH2 0x29B6 SWAP10 SWAP6 PUSH2 0x100 SWAP4 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x20 DUP14 ADD MSTORE PUSH1 0x40 DUP13 ADD SWAP1 PUSH2 0x3DD7 JUMP JUMPDEST DUP1 PUSH1 0x60 DUP12 ADD MSTORE DUP10 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP1 DUP8 DUP3 SUB PUSH1 0x80 DUP10 ADD MSTORE PUSH2 0x432 JUMP JUMPDEST SWAP2 PUSH1 0xA0 DUP7 ADD MSTORE DUP5 DUP3 SUB PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x432 JUMP JUMPDEST SWAP5 SWAP4 SWAP2 SWAP6 SWAP3 SWAP7 SWAP1 DUP5 MLOAD PUSH2 0x4474 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD SWAP2 PUSH2 0x4483 DUP4 PUSH2 0x3DCD JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0xA0 DUP9 ADD MLOAD SWAP1 PUSH1 0x40 SWAP7 DUP13 PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP8 DUP9 SWAP8 PUSH4 0x25DA41F3 PUSH1 0xE2 SHL DUP10 MSTORE PUSH1 0x4 DUP10 ADD SWAP8 PUSH2 0x44B2 SWAP9 PUSH2 0x43F2 JUMP JUMPDEST SUB SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP2 GAS PUSH0 SWAP5 DUP6 SWAP2 CALL SWAP5 DUP6 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP1 PUSH0 SWAP7 PUSH2 0x459A JUMPI JUMPDEST POP ISZERO DUP1 ISZERO PUSH2 0x458E JUMPI JUMPDEST PUSH2 0x457F JUMPI PUSH1 0x1 DUP1 SWAP5 PUSH1 0x9 SHR AND ISZERO PUSH2 0x44FE JUMPI SWAP1 SWAP2 SWAP3 DUP1 SWAP5 SWAP6 POP PUSH0 SWAP1 JUMPDEST PUSH2 0x4506 JUMPI JUMPDEST POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x457A JUMPI PUSH2 0x4519 DUP2 DUP8 PUSH2 0x1E54 JUMP JUMPDEST MLOAD DUP3 DUP6 ADD SWAP1 PUSH2 0x4529 DUP4 DUP4 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD LT PUSH2 0x4538 JUMPI POP DUP5 ADD DUP5 PUSH2 0x44F9 JUMP JUMPDEST DUP7 SWAP1 PUSH2 0x4556 DUP4 PUSH2 0x2AC0 DUP2 PUSH2 0x2ABA PUSH2 0x108E PUSH2 0x10C4 SWAP9 PUSH1 0x20 DUP13 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH4 0x677D1D7D PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST PUSH2 0x44FE JUMP JUMPDEST PUSH4 0xE1249165 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP5 MLOAD DUP7 MLOAD EQ ISZERO PUSH2 0x44DE JUMP JUMPDEST SWAP1 POP PUSH2 0x45B1 SWAP2 SWAP6 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2B23 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP5 SWAP1 PUSH0 PUSH2 0x44D5 JUMP JUMPDEST PUSH2 0x45C5 PUSH2 0xFC SWAP3 PUSH2 0x4618 JUMP JUMPDEST SWAP1 PUSH2 0x4654 JUMP JUMPDEST SWAP1 PUSH0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x45FC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x45EA DUP4 DUP7 PUSH2 0x1E54 JUMP JUMPDEST MLOAD AND SWAP1 DUP4 AND EQ PUSH2 0x3570 JUMPI PUSH1 0x1 ADD PUSH2 0x45CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 PUSH4 0xDDEF98D7 PUSH1 0xE0 SHL PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x4642 JUMPI SWAP1 JUMP JUMPDEST PUSH4 0x123BAF03 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x4711 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 SWAP2 AND DUP1 PUSH0 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH2 0x469B PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP4 DUP5 PUSH2 0x3653 JUMP JUMPDEST SWAP3 DUP4 PUSH2 0x46DF JUMPI POP PUSH0 NOT PUSH32 0x0 DUP1 TLOAD SWAP2 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x941 JUMPI TSTORE JUMPDEST PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE JUMP JUMPDEST PUSH2 0x46D3 JUMPI PUSH2 0x470C PUSH32 0x0 PUSH2 0x3D31 JUMP JUMPDEST PUSH2 0x46D3 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP2 DUP4 DUP2 AND DUP5 DUP5 AND SUB PUSH2 0x4733 JUMPI POP POP POP POP PUSH0 NOT SWAP1 JUMP JUMPDEST PUSH2 0x475D SWAP4 PUSH2 0x159E SWAP3 AND PUSH0 MSTORE PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP3 DUP2 SLOAD SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP3 PUSH1 0x20 DUP4 ADD SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP4 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x4795 JUMPI POP POP POP PUSH2 0xFC SWAP3 POP SUB DUP4 PUSH2 0x2CD JUMP JUMPDEST DUP6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 MSTORE PUSH1 0x1 SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x477F JUMP JUMPDEST SWAP1 PUSH2 0x47C2 DUP3 PUSH2 0x33D JUMP JUMPDEST PUSH2 0x47CF PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x2CD JUMP JUMPDEST DUP3 DUP2 MSTORE DUP1 SWAP3 PUSH2 0x47E0 PUSH1 0x1F NOT SWAP2 PUSH2 0x33D JUMP JUMPDEST ADD SWAP1 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x47F0 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH2 0x47FB PUSH2 0x2105 JUMP JUMPDEST DUP3 DUP3 DUP6 ADD ADD MSTORE ADD PUSH2 0x47E4 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD PUSH2 0x4814 DUP2 PUSH2 0x2B1 JUMP JUMPDEST PUSH1 0x40 PUSH1 0xFF DUP3 SWAP5 SLOAD DUP2 DUP2 AND PUSH2 0x4827 DUP2 PUSH2 0xEF4 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 PUSH1 0x8 SHR AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0xA8 SHR AND ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD DUP1 MLOAD MLOAD SWAP4 PUSH0 JUMPDEST DUP6 DUP2 LT PUSH2 0x485F JUMPI POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x4873 PUSH2 0x108E PUSH1 0x1 SWAP4 PUSH1 0x20 DUP9 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST PUSH2 0x4895 PUSH2 0x4888 DUP4 DUP10 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x48A0 DUP4 DUP8 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD DUP2 GT PUSH2 0x48E7 JUMPI JUMPDEST POP POP PUSH2 0x48CE PUSH2 0x48B8 DUP3 DUP7 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x48C7 DUP4 PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x5369 JUMP JUMPDEST PUSH2 0x48E0 DUP3 DUP9 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE ADD PUSH2 0x4850 JUMP JUMPDEST PUSH2 0x4932 PUSH2 0x494A SWAP2 PUSH2 0x492C PUSH2 0x4923 PUSH2 0x490F DUP7 DUP11 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP3 PUSH2 0x491C DUP9 DUP13 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0xB28 JUMP JUMPDEST DUP3 PUSH1 0x80 SHR PUSH2 0x2284 JUMP JUMPDEST SWAP1 PUSH2 0x5CC4 JUMP JUMPDEST SWAP2 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH0 DUP1 PUSH2 0x48A8 JUMP JUMPDEST DUP2 EQ DUP1 ISZERO SWAP3 SWAP2 SWAP1 PUSH2 0x4966 JUMPI JUMPDEST POP POP PUSH2 0x1E13 JUMPI JUMP JUMPDEST EQ ISZERO SWAP1 POP PUSH0 DUP1 PUSH2 0x495E JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x941 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x941 JUMPI JUMP JUMPDEST DUP1 MLOAD PUSH2 0x49AC DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x49B5 DUP2 PUSH2 0xEF4 JUMP JUMPDEST DUP1 PUSH2 0x49C8 JUMPI POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x49D4 PUSH1 0x1 SWAP3 PUSH2 0xEF4 JUMP JUMPDEST SUB PUSH2 0x4A31 JUMPI PUSH1 0x20 PUSH2 0x49F3 PUSH2 0xD25 DUP3 PUSH1 0x4 SWAP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x33CD77E7 PUSH1 0xE1 SHL DUP2 MSTORE SWAP3 DUP4 SWAP2 DUP3 SWAP1 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP2 PUSH2 0x4A18 JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0x42F SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH4 0x6FA28319 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x80 PUSH8 0xDE0B6B3A7640000 PUSH2 0x4A84 PUSH2 0x2BC7 SWAP5 DUP1 PUSH2 0x4A63 DUP7 PUSH1 0x60 DUP11 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH2 0x2DDB PUSH2 0x4A75 DUP7 PUSH1 0xC0 DUP11 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x1ED3 DUP8 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST DIV SWAP4 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x80 PUSH2 0x4AC8 PUSH2 0x2BC7 SWAP4 DUP1 PUSH2 0x4AA7 DUP6 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH2 0x1EDA PUSH2 0x4AB9 DUP6 PUSH1 0xC0 DUP10 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x1ED3 DUP7 PUSH1 0xA0 DUP11 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST SWAP4 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST PUSH1 0x6 SHR PUSH1 0x1 AND ISZERO PUSH2 0x4ADD JUMPI JUMP JUMPDEST PUSH4 0x33C2A57 PUSH1 0xE6 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 SHR PUSH1 0x1 AND PUSH2 0x4AF8 JUMPI JUMP JUMPDEST PUSH4 0x353D5DE7 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD SWAP1 DUP2 SWAP1 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x4B30 JUMPI POP POP DUP2 LT ISZERO PUSH2 0x4B21 JUMPI SWAP1 JUMP JUMPDEST PUSH4 0x1F91AF77 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x4B3A DUP2 DUP4 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x4B48 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4B0E JUMP JUMPDEST SWAP3 DUP3 SUB PUSH2 0x4B55 JUMPI DUP3 PUSH2 0x4B40 JUMP JUMPDEST PUSH4 0x6B8C3BE5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x12 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x941 JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x20 PUSH2 0x4B9E PUSH0 SWAP3 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP4 ADD MSTORE JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x20 PUSH2 0x4B9E PUSH1 0x1 SWAP3 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP1 SWAP5 SWAP3 SWAP2 SWAP3 DUP2 MLOAD SWAP5 PUSH2 0x4BCC DUP7 PUSH2 0x1E22 JUMP JUMPDEST SWAP5 PUSH0 JUMPDEST DUP8 DUP2 LT PUSH2 0x4D9C JUMPI POP PUSH2 0x4BE5 SWAP1 PUSH2 0x26DE DUP10 DUP9 PUSH2 0x1E54 JUMP JUMPDEST PUSH2 0x4BEF DUP9 DUP8 PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP5 PUSH4 0x1309BD3D PUSH1 0xE3 SHL SWAP3 DUP4 DUP8 MSTORE PUSH1 0x20 DUP8 DUP1 PUSH2 0x4C11 DUP9 PUSH1 0x4 DUP4 ADD PUSH2 0x4B87 JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP8 PUSH2 0x4D7B JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP5 DUP7 MSTORE PUSH1 0x20 DUP7 DUP1 PUSH2 0x4C46 DUP7 PUSH1 0x4 DUP4 ADD PUSH2 0x4B87 JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x20A JUMPI PUSH2 0x3849 PUSH2 0x4CA8 DUP13 PUSH2 0x491C PUSH2 0x4CA1 PUSH2 0x4CBE SWAP7 PUSH2 0x4C9A DUP16 PUSH2 0x4C8A PUSH2 0x4CF4 SWAP16 SWAP2 PUSH1 0x20 SWAP15 DUP9 SWAP4 PUSH0 SWAP2 PUSH2 0x4D5C JUMPI JUMPDEST POP PUSH2 0x52F5 JUMP JUMPDEST SWAP3 PUSH2 0x4C95 DUP5 DUP14 PUSH2 0x5CD7 JUMP JUMPDEST PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x4F33 JUMP JUMPDEST SWAP2 DUP9 PUSH2 0x1E54 JUMP JUMPDEST SWAP2 PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP2 LT MUL DUP3 PUSH2 0x52F5 JUMP JUMPDEST SWAP4 PUSH2 0x4CCD DUP6 PUSH2 0x26DE DUP13 DUP7 PUSH2 0x1E54 JUMP JUMPDEST PUSH2 0x4CD7 DUP12 DUP6 PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x4BA3 JUMP JUMPDEST SUB SWAP3 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x20A JUMPI PUSH2 0x4D30 SWAP6 PUSH2 0x4D2A SWAP4 PUSH0 SWAP4 PUSH2 0x4D33 JUMPI JUMPDEST POP PUSH2 0x4D1C PUSH2 0x4D23 SWAP2 PUSH2 0x1E22 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0x1E54 JUMP JUMPDEST MSTORE DUP4 PUSH2 0xB28 JUMP JUMPDEST SWAP1 PUSH2 0x5335 JUMP JUMPDEST SWAP2 JUMP JUMPDEST PUSH2 0x4D23 SWAP2 SWAP4 POP PUSH2 0x4D54 PUSH2 0x4D1C SWAP2 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP4 SWAP2 POP PUSH2 0x4D0F JUMP JUMPDEST PUSH1 0x20 PUSH2 0x4D75 SWAP3 POP RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 PUSH2 0x4C84 JUMP JUMPDEST PUSH2 0x4D95 SWAP2 SWAP8 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP6 PUSH0 PUSH2 0x4C2D JUMP JUMPDEST DUP1 PUSH2 0x4DB2 PUSH2 0x4DAC PUSH1 0x1 SWAP4 DUP9 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0xB1A JUMP JUMPDEST PUSH2 0x4DBC DUP3 DUP11 PUSH2 0x1E54 JUMP JUMPDEST MSTORE ADD PUSH2 0x4BCF JUMP JUMPDEST PUSH2 0x4DDB PUSH1 0x40 SWAP3 SWAP6 SWAP5 SWAP4 SWAP6 PUSH1 0x60 DUP4 MSTORE PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP5 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 SWAP5 SWAP2 DUP4 SUB SWAP2 DUP4 DUP4 GT PUSH2 0x941 JUMPI PUSH1 0x20 PUSH2 0x4E31 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x4E0A DUP8 DUP8 PUSH2 0x52F5 JUMP JUMPDEST PUSH2 0x4E14 DUP2 DUP4 PUSH2 0x5CD7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH3 0xB5059F PUSH1 0xE5 SHL DUP4 MSTORE DUP14 DUP11 PUSH1 0x4 DUP6 ADD PUSH2 0x4DC3 JUMP JUMPDEST SUB SWAP3 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH2 0x4D30 SWAP6 PUSH2 0x1EDA DUP9 PUSH2 0x4E7C SWAP4 PUSH2 0x4E85 SWAP9 PUSH2 0x4E8C SWAP7 PUSH0 SWAP3 PUSH2 0x4E92 JUMPI JUMPDEST POP PUSH2 0x4E6A DUP3 PUSH2 0x26DE PUSH2 0x3849 SWAP5 SWAP6 DUP12 PUSH2 0x1E54 JUMP JUMPDEST SWAP9 PUSH2 0x4E75 DUP14 DUP11 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x5335 JUMP JUMPDEST SWAP4 DUP5 SWAP3 MLOAD PUSH2 0x1E22 JUMP JUMPDEST SWAP6 DUP7 PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH2 0xB28 JUMP JUMPDEST PUSH2 0x3849 SWAP3 POP PUSH2 0x26DE SWAP4 PUSH2 0x4EB6 PUSH2 0x4E6A SWAP3 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP4 POP SWAP4 POP PUSH2 0x4E57 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x4EDD JUMPI DIV SWAP1 JUMP JUMPDEST PUSH2 0x4EBF JUMP JUMPDEST SWAP1 SWAP3 SWAP2 PUSH2 0x4EEF DUP3 MLOAD PUSH2 0x1E22 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x4F2C JUMPI PUSH2 0x4F0F DUP4 PUSH2 0x4F09 DUP4 DUP6 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x498E JUMP JUMPDEST SWAP1 DUP7 ISZERO PUSH2 0x4EDD JUMPI DUP7 PUSH1 0x1 SWAP3 DIV PUSH2 0x4F25 DUP3 DUP8 PUSH2 0x1E54 JUMP JUMPDEST MSTORE ADD PUSH2 0x4EF2 JUMP JUMPDEST POP POP POP SWAP2 POP JUMP JUMPDEST SWAP1 PUSH2 0x4F3D SWAP2 PUSH2 0x498E JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x4F5D JUMPI POP JUMP JUMPDEST PUSH2 0xFC SWAP1 PUSH2 0x52BE JUMP JUMPDEST SWAP2 PUSH2 0x4F70 SWAP2 PUSH2 0x498E JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x941 JUMPI DUP2 ISZERO PUSH2 0x4EDD JUMPI DIV SWAP1 JUMP JUMPDEST SWAP2 SWAP5 SWAP3 SWAP1 SWAP5 PUSH0 SWAP6 PUSH0 SWAP6 DUP2 PUSH2 0x4FAA JUMPI POP POP POP POP POP JUMP JUMPDEST DUP5 SWAP8 POP PUSH2 0x2433 PUSH2 0x4FC3 DUP3 PUSH1 0xC0 PUSH2 0x4FCF SWAP7 SWAP8 SWAP9 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP2 PUSH1 0xA0 DUP11 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST SWAP5 MLOAD PUSH1 0x1 DUP2 PUSH1 0x3 SHR AND ISZERO PUSH2 0x4FE5 JUMPI JUMPDEST DUP1 DUP1 PUSH2 0x154D JUMP JUMPDEST PUSH3 0xFFFFFF SWAP2 SWAP3 SWAP5 POP PUSH1 0x2A SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x941 JUMPI PUSH2 0x501B PUSH8 0xDE0B6B3A7640000 SWAP2 DUP7 PUSH2 0x498E JUMP JUMPDEST DIV SWAP3 DUP5 DUP5 GT PUSH2 0x5088 JUMPI DUP1 PUSH2 0x159E PUSH2 0x5067 PUSH2 0x504D PUSH2 0x507F SWAP5 PUSH2 0x159E DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x5061 DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND PUSH2 0x2284 JUMP JUMPDEST SWAP1 PUSH2 0x5D5C JUMP JUMPDEST SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH0 DUP1 DUP1 PUSH2 0x4FDE JUMP JUMPDEST PUSH4 0x4C69AC5D PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 SWAP2 SWAP3 AND PUSH0 MSTORE PUSH1 0x20 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH0 JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x50F1 JUMPI SWAP1 PUSH2 0x50E1 PUSH2 0x50D2 DUP3 PUSH1 0x1 SWAP5 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x48C7 DUP4 PUSH1 0x80 DUP12 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST DUP2 PUSH0 MSTORE DUP4 DUP7 MSTORE DUP5 PUSH0 KECCAK256 SSTORE ADD PUSH2 0x50B4 JUMP JUMPDEST POP POP POP POP POP SWAP1 POP JUMP JUMPDEST ORIGIN ISZERO DUP1 PUSH2 0x5104 JUMPI SWAP1 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD AND ISZERO SWAP1 JUMP JUMPDEST SWAP1 ORIGIN PUSH2 0x5152 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x5143 SWAP3 AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 SLOAD SWAP2 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x941 JUMPI SSTORE JUMP JUMPDEST PUSH4 0x33FC2559 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 DUP4 ISZERO PUSH2 0x181B JUMPI PUSH2 0x5194 DUP6 PUSH2 0x159E DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD DUP1 DUP5 GT PUSH2 0x5276 JUMPI DUP4 SWAP1 SUB PUSH2 0x51BE DUP7 PUSH2 0x159E DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x51E4 DUP4 PUSH2 0x51DE DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0xB28 JUMP JUMPDEST PUSH2 0x51ED DUP2 PUSH2 0x5D6A JUMP JUMPDEST PUSH2 0x5208 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP1 DUP2 EXTCODESIZE ISZERO PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH4 0x23DE6651 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND PUSH1 0x4 DUP6 ADD MSTORE PUSH0 PUSH1 0x24 DUP6 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP6 ADD DUP3 SWAP1 MSTORE SWAP4 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F SWAP2 PUSH2 0x5271 SWAP2 DUP7 DUP2 DUP1 PUSH1 0x64 DUP2 ADD PUSH2 0x1619 JUMP JUMPDEST SUB SWAP1 LOG4 JUMP JUMPDEST PUSH4 0x391434E3 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP4 SWAP1 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP1 DUP3 DIV MUL DUP2 SUB PUSH2 0x52B0 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x941 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 GT PUSH2 0x52E6 JUMPI JUMP JUMPDEST PUSH4 0x3DA9A23 PUSH1 0xE3 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x5326 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x941 JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH4 0xA0C22C7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP3 ISZERO PUSH2 0x5326 JUMPI PUSH1 0x1 SWAP2 PUSH2 0x5347 SWAP2 PUSH2 0x498E JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x42F SWAP3 PUSH2 0x5363 SWAP2 PUSH2 0x498E JUMP JUMPDEST SWAP1 PUSH2 0x52F5 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP4 GT SWAP1 DUP2 ISZERO PUSH2 0x53A1 JUMPI JUMPDEST POP PUSH2 0x5392 JUMPI PUSH1 0x80 SHL SWAP1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x941 JUMPI SWAP1 JUMP JUMPDEST PUSH4 0x89560CA1 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP2 GT PUSH0 PUSH2 0x537D JUMP JUMPDEST SWAP1 PUSH2 0x53B8 DUP3 PUSH1 0x80 SHR PUSH2 0x4618 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH0 SWAP4 AND DUP1 PUSH2 0x53DC JUMPI JUMPDEST POP POP PUSH1 0x2 SWAP2 PUSH2 0x53D8 SWAP2 PUSH2 0x363B JUMP JUMPDEST SDIV SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 POP SWAP1 PUSH1 0x24 PUSH1 0x20 SWAP3 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH4 0xA28A477 PUSH1 0xE0 SHL DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x20A JUMPI PUSH2 0x5424 PUSH2 0x53D8 SWAP3 PUSH1 0x2 SWAP5 PUSH0 SWAP2 PUSH2 0x542D JUMPI JUMPDEST POP PUSH2 0x4618 JUMP JUMPDEST SWAP3 DUP2 SWAP3 POP PUSH2 0x53CA JUMP JUMPDEST PUSH2 0x5446 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 PUSH2 0x541E JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0x5456 JUMPI SWAP1 JUMP JUMPDEST PUSH4 0x54672219 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x95EA7B3 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH0 PUSH1 0x44 DUP5 ADD MSTORE SWAP1 SWAP4 SWAP2 SWAP3 SWAP2 DUP4 PUSH1 0x64 DUP2 ADD JUMPDEST SUB SWAP2 PUSH2 0x54AE PUSH1 0x1F NOT SWAP4 DUP5 DUP2 ADD DUP8 MSTORE DUP7 PUSH2 0x2CD JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP3 DUP8 MLOAD SWAP1 DUP3 DUP6 GAS CALL SWAP1 PUSH2 0x54CB PUSH2 0x569D JUMP JUMPDEST DUP3 PUSH2 0x5538 JUMPI JUMPDEST POP DUP2 PUSH2 0x552D JUMPI JUMPDEST POP ISZERO PUSH2 0x54E5 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x24 DUP6 ADD MSTORE PUSH0 PUSH1 0x44 DUP6 ADD MSTORE PUSH1 0x64 SWAP1 DUP2 ADD DUP5 MSTORE PUSH2 0x5523 SWAP4 PUSH2 0x917 SWAP2 PUSH2 0x551D SWAP1 DUP3 PUSH2 0x2CD JUMP JUMPDEST DUP3 PUSH2 0x5B9B JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x154D JUMP JUMPDEST SWAP1 POP EXTCODESIZE ISZERO ISZERO PUSH0 PUSH2 0x54D8 JUMP JUMPDEST DUP1 MLOAD SWAP2 SWAP3 POP DUP2 ISZERO SWAP2 DUP3 ISZERO PUSH2 0x5550 JUMPI JUMPDEST POP POP SWAP1 PUSH0 PUSH2 0x54D1 JUMP JUMPDEST PUSH2 0x5563 SWAP3 POP PUSH1 0x20 DUP1 SWAP2 DUP4 ADD ADD SWAP2 ADD PUSH2 0x1F07 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x5547 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x95EA7B3 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 SWAP1 SWAP3 DUP4 PUSH1 0x64 DUP2 ADD PUSH2 0x549A JUMP JUMPDEST SWAP1 PUSH2 0x55B3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND PUSH2 0x4618 JUMP JUMPDEST SWAP1 PUSH0 SWAP3 PUSH1 0x80 SHR DUP1 PUSH2 0x55CC JUMPI POP POP PUSH1 0x2 SWAP2 PUSH2 0x53D8 SWAP2 PUSH2 0x363B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 POP SWAP1 PUSH1 0x24 PUSH1 0x20 SWAP3 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH4 0xB3D7F6B9 PUSH1 0xE0 SHL DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x20A JUMPI PUSH2 0x5424 PUSH2 0x53D8 SWAP3 PUSH1 0x2 SWAP5 PUSH0 SWAP2 PUSH2 0x542D JUMPI POP PUSH2 0x4618 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 SUB SWAP3 DUP4 GT PUSH2 0x941 JUMPI DUP2 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 ADD DUP1 SWAP4 GT PUSH2 0x941 JUMPI PUSH2 0xFC SWAP4 PUSH2 0x5D89 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 ADD DUP1 SWAP4 GT PUSH2 0x941 JUMPI DUP2 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 SUB SWAP3 DUP4 GT PUSH2 0x941 JUMPI PUSH2 0xFC SWAP4 PUSH2 0x5D89 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x56C7 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x56AE DUP3 PUSH2 0x3C2 JUMP JUMPDEST SWAP2 PUSH2 0x56BC PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x2CD JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x42F SWAP4 PUSH1 0x20 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL PUSH2 0x56E4 PUSH2 0x569D JUMP JUMPDEST SWAP2 PUSH2 0x5EC0 JUMP JUMPDEST PUSH1 0x5 SHR PUSH1 0x1 AND ISZERO PUSH2 0x56F7 JUMPI JUMP JUMPDEST PUSH4 0x121DB02F PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP5 SWAP2 PUSH1 0x20 PUSH2 0x5735 PUSH2 0x5720 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH2 0x2284 JUMP JUMPDEST SWAP5 PUSH2 0x572B DUP8 DUP8 PUSH2 0x52F5 JUMP JUMPDEST PUSH2 0x4E14 DUP2 DUP4 PUSH2 0x5F1A JUMP JUMPDEST SUB SWAP3 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH2 0x4D30 SWAP6 PUSH2 0x3849 PUSH2 0x4CA8 DUP6 PUSH2 0x4E7C SWAP5 PUSH2 0x4E85 SWAP10 DUP13 SWAP10 DUP11 PUSH2 0x5794 SWAP10 PUSH0 SWAP5 PUSH2 0x579A JUMPI JUMPDEST POP SWAP1 PUSH2 0x5788 PUSH2 0x5781 PUSH2 0x577A PUSH2 0x578F SWAP5 PUSH2 0x24D6 SWAP8 SWAP9 PUSH2 0x1E54 JUMP JUMPDEST MLOAD DUP8 PUSH2 0xB28 JUMP JUMPDEST SWAP13 DUP13 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x498E JUMP JUMPDEST PUSH2 0x4ED3 JUMP JUMPDEST MSTORE PUSH2 0x2284 JUMP JUMPDEST PUSH2 0x24D6 SWAP5 POP PUSH2 0x5781 PUSH2 0x577A PUSH2 0x578F SWAP5 SWAP4 PUSH2 0x57C5 PUSH2 0x5788 SWAP5 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP8 POP SWAP4 SWAP5 POP POP POP PUSH2 0x5761 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP1 DUP4 MLOAD PUSH2 0x57E2 DUP5 MLOAD DUP3 PUSH2 0x1E0C JUMP JUMPDEST PUSH1 0x5 SHL SWAP4 ADD SWAP2 ADD MCOPY JUMP JUMPDEST SWAP3 SWAP2 SWAP1 SWAP4 DUP4 MLOAD PUSH2 0x57FB DUP2 PUSH2 0x1E22 JUMP JUMPDEST SWAP2 PUSH2 0x5805 DUP3 PUSH2 0x1E22 JUMP JUMPDEST SWAP7 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x59E1 JUMPI POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP2 PUSH1 0x40 MLOAD SWAP6 PUSH4 0x1309BD3D PUSH1 0xE3 SHL SWAP3 DUP4 DUP9 MSTORE PUSH1 0x20 SWAP9 DUP10 DUP10 DUP1 PUSH2 0x583F DUP5 PUSH1 0x4 DUP4 ADD PUSH2 0x4B87 JUMP JUMPDEST SUB DUP2 DUP10 GAS STATICCALL SWAP9 DUP10 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP10 PUSH2 0x59C2 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD DUP6 DUP2 MSTORE DUP11 DUP2 DUP1 PUSH2 0x5869 DUP12 PUSH1 0x4 DUP4 ADD PUSH2 0x4BA3 JUMP JUMPDEST SUB DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x20A JUMPI DUP11 PUSH2 0x578F PUSH2 0x58A4 SWAP4 PUSH2 0x589D SWAP4 DUP16 PUSH0 SWAP3 PUSH2 0x59A5 JUMPI JUMPDEST SWAP12 SWAP10 SWAP14 SWAP13 SWAP11 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 POP PUSH2 0x4971 JUMP JUMPDEST DUP1 SWAP4 PUSH2 0x5F1A JUMP JUMPDEST PUSH0 JUMPDEST DUP10 DUP2 LT PUSH2 0x5913 JUMPI POP POP POP POP PUSH2 0x58CA SWAP6 POP PUSH1 0x40 MLOAD DUP1 SWAP7 DUP2 SWAP5 DUP3 SWAP4 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x4BA3 JUMP JUMPDEST SUB SWAP2 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x20A JUMPI DUP4 PUSH2 0x578F SWAP4 PUSH2 0x58F0 SWAP3 PUSH2 0x4D30 SWAP8 PUSH0 SWAP3 PUSH2 0x58F6 JUMPI JUMPDEST POP POP PUSH2 0xB28 JUMP JUMPDEST SWAP1 PUSH2 0x498E JUMP JUMPDEST PUSH2 0x590C SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x58E9 JUMP JUMPDEST DUP7 SWAP9 SWAP10 SWAP6 SWAP8 POP DUP4 DUP14 DUP4 SWAP5 SWAP6 SWAP7 SWAP9 DUP4 PUSH2 0x5937 PUSH2 0x5930 DUP3 PUSH1 0x1 SWAP9 PUSH2 0x1E54 JUMP JUMPDEST MLOAD DUP10 PUSH2 0x5D49 JUMP JUMPDEST DUP1 PUSH2 0x5942 DUP4 DUP6 PUSH2 0x1E54 JUMP JUMPDEST MLOAD GT PUSH2 0x595E JUMPI JUMPDEST POP POP POP POP POP ADD SWAP1 DUP11 SWAP7 SWAP5 SWAP9 SWAP8 SWAP6 SWAP4 SWAP3 SWAP2 PUSH2 0x58A6 JUMP JUMPDEST DUP2 DUP4 PUSH2 0x597F PUSH2 0x5990 SWAP8 PUSH2 0x5989 SWAP5 PUSH2 0x5978 DUP6 PUSH2 0x491C SWAP10 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SUB PUSH2 0x4F33 JUMP JUMPDEST PUSH2 0x1AF9 DUP4 DUP9 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x1E54 JUMP JUMPDEST PUSH2 0x599A DUP3 DUP12 PUSH2 0x1E54 JUMP JUMPDEST MSTORE DUP5 DUP14 DUP11 DUP4 PUSH0 PUSH2 0x5949 JUMP JUMPDEST PUSH2 0x59BB SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 DUP16 PUSH2 0x5889 JUMP JUMPDEST PUSH2 0x59DA SWAP2 SWAP10 POP DUP11 RETURNDATASIZE DUP13 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP8 PUSH0 PUSH2 0x5852 JUMP JUMPDEST DUP1 PUSH2 0x5A0B PUSH2 0x5A06 PUSH2 0x59F4 PUSH1 0x1 SWAP5 DUP13 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x59FF DUP5 DUP8 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2284 JUMP JUMPDEST PUSH2 0xB1A JUMP JUMPDEST PUSH2 0x5A15 DUP3 DUP9 PUSH2 0x1E54 JUMP JUMPDEST MSTORE ADD PUSH2 0x5808 JUMP JUMPDEST PUSH1 0x7 SHR PUSH1 0x1 AND ISZERO PUSH2 0x5A29 JUMPI JUMP JUMPDEST PUSH4 0xEFE0265D PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP3 SWAP2 PUSH2 0x5A44 DUP5 MLOAD PUSH2 0x1E22 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x5A79 JUMPI DUP1 PUSH2 0x5A68 DUP6 DUP6 PUSH2 0x5A62 PUSH1 0x1 SWAP6 DUP8 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x5335 JUMP JUMPDEST PUSH2 0x5A72 DUP3 DUP10 PUSH2 0x1E54 JUMP JUMPDEST MSTORE ADD PUSH2 0x5A47 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP4 DUP5 ISZERO PUSH2 0x5B7F JUMPI PUSH2 0x5AB7 DUP4 PUSH2 0x5AB1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x2284 JUMP JUMPDEST PUSH2 0x5AD6 DUP6 PUSH2 0x159E DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP5 DUP2 SLOAD ADD SWAP1 SSTORE PUSH2 0x5AE5 DUP2 PUSH2 0x5D6A JUMP JUMPDEST PUSH2 0x5B00 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP3 PUSH0 DUP5 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F PUSH1 0x40 MLOAD DUP1 PUSH2 0x5B39 DUP8 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB SWAP1 LOG4 DUP3 EXTCODESIZE ISZERO PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH4 0x23DE6651 PUSH1 0xE0 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP3 SWAP1 DUP2 DUP4 DUP2 PUSH1 0x64 DUP2 ADD PUSH2 0x17BD JUMP JUMPDEST PUSH4 0xEC442F05 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x5BAF SWAP2 AND SWAP2 DUP3 PUSH2 0x56CC JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x5BD7 JUMPI JUMPDEST POP POP PUSH2 0x5BC5 JUMPI POP JUMP JUMPDEST PUSH4 0x5274AFE7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x5BEA SWAP3 POP PUSH1 0x20 DUP1 SWAP2 DUP4 ADD ADD SWAP2 ADD PUSH2 0x1F07 JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x5BBC JUMP JUMPDEST SWAP1 PUSH5 0xFFFFFFFFFF PUSH2 0x5C02 DUP3 PUSH2 0x1E22 JUMP JUMPDEST SWAP3 PUSH1 0x5A SHR AND PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x5C16 JUMPI POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x5 DUP1 DUP3 MUL SWAP1 DUP3 DUP3 DIV EQ DUP3 ISZERO OR ISZERO PUSH2 0x941 JUMPI DUP3 PUSH1 0x1F SWAP2 SHR AND SWAP1 PUSH1 0x4D DUP3 GT PUSH2 0x941 JUMPI PUSH1 0x1 SWAP2 PUSH1 0xA EXP PUSH2 0x5C47 DUP3 DUP8 PUSH2 0x1E54 JUMP JUMPDEST MSTORE ADD PUSH2 0x5C09 JUMP JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x42 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x941 JUMPI SWAP1 JUMP JUMPDEST SWAP1 SWAP4 SWAP3 PUSH0 SWAP5 PUSH2 0x5C84 DUP5 PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD DUP2 DUP2 GT PUSH2 0x5C93 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH2 0x5CB9 SWAP6 SWAP7 POP SWAP2 PUSH2 0x5CA8 SWAP2 PUSH2 0x2433 SWAP4 SUB PUSH2 0x4F33 JUMP JUMPDEST SWAP3 PUSH1 0xA0 PUSH2 0x242A DUP3 PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST SWAP1 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x154D JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH2 0x42F SWAP3 AND PUSH2 0x5369 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x4 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH4 0x5B3BFD2B PUSH1 0xE1 SHL DUP4 MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP3 PUSH2 0x5D28 JUMPI JUMPDEST POP DUP2 DUP2 LT PUSH2 0x5D13 JUMPI POP POP JUMP JUMPDEST PUSH4 0x718E4ADF PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x5D42 SWAP2 SWAP3 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x5D07 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0x2DE0 SWAP2 PUSH2 0x498E JUMP JUMPDEST SWAP1 PUSH2 0x42F SWAP2 PUSH1 0x80 SHR SWAP1 PUSH2 0x5369 JUMP JUMPDEST PUSH3 0xF4240 DUP2 LT PUSH2 0x5D77 JUMPI POP JUMP JUMPDEST PUSH4 0x34E3483F PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP1 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 SWAP6 SWAP4 SWAP5 SWAP1 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP2 DUP8 DUP4 PUSH1 0x24 DUP2 DUP8 DUP7 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP4 PUSH2 0x5EA1 JUMPI JUMPDEST POP DUP1 DUP4 LT PUSH2 0x5E7A JUMPI POP PUSH2 0x5DEA SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH1 0x40 MLOAD SWAP2 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 DUP5 DUP2 PUSH1 0x24 DUP2 DUP6 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP6 PUSH2 0x5E5B JUMPI JUMPDEST POP POP DUP2 DUP5 LT PUSH2 0x5E39 JUMPI POP POP PUSH2 0x5E36 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE JUMP JUMPDEST PUSH4 0x1149424D PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE POP PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH2 0x5E72 SWAP3 SWAP6 POP DUP1 RETURNDATASIZE LT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP3 PUSH0 DUP1 PUSH2 0x5E10 JUMP JUMPDEST PUSH4 0x1C6A5375 PUSH1 0xE0 SHL PUSH0 SWAP1 DUP2 MSTORE SWAP4 DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE POP PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH2 0x5EB9 SWAP2 SWAP4 POP DUP9 RETURNDATASIZE DUP11 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x5DC6 JUMP JUMPDEST SWAP1 PUSH2 0x5EE4 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x5ED5 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH4 0xA12F521 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x5F11 JUMPI JUMPDEST PUSH2 0x5EF5 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH4 0x9996B315 PUSH1 0xE0 SHL PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x5EED JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x4 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH4 0x273C1ADF PUSH1 0xE0 SHL DUP4 MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP3 PUSH2 0x5F6B JUMPI JUMPDEST POP DUP2 DUP2 GT PUSH2 0x5F56 JUMPI POP POP JUMP JUMPDEST PUSH4 0xFA25837 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x5F85 SWAP2 SWAP3 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x5F4A JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH4 0xFFFFFFFF DUP1 DUP1 SWAP5 AND SWAP2 AND ADD SWAP2 DUP3 GT PUSH2 0x941 JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH7 0x83429DD8621233 0xBF SWAP14 STATICCALL INVALID STOP DELEGATECALL SUB PUSH1 0xD4 KECCAK256 BLOCKHASH SWAP4 0xD8 PUSH26 0xBD8A2517BC175DC511EB64736F6C634300081A00330000000000 ","sourceMap":"2550:79546:53:-:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3400:40:56;2550:79546:53;;;;;:::i;:::-;;;;-1:-1:-1;;;2550:79546:53;;;;3400:40:56;:::i;:::-;;;3501:47;2550:79546:53;;;;;:::i;:::-;;;;-1:-1:-1;;;2550:79546:53;;;;3501:47:56;:::i;:::-;;;3601:41;2550:79546:53;;;;;:::i;:::-;;;;-1:-1:-1;;;2550:79546:53;;;;3601:41:56;:::i;:::-;;;;;;3703:48;2550:79546:53;;;;;:::i;:::-;;;;-1:-1:-1;;;2550:79546:53;;;;3703:48:56;:::i;:::-;;;;;;3802:39;2550:79546:53;;;;;:::i;:::-;;;;-1:-1:-1;;;2550:79546:53;;;;3802:39:56;:::i;:::-;;;;;;2550:79546:53;;;;;;3414:22;;;;;;;;;;;;;;;;;;-1:-1:-1;3414:22:53;;;-1:-1:-1;3449:4:53;;;2550:79546;;3406:48;3402:117;;2550:79546;;3541:29;;;;;;;;;;;;;;;-1:-1:-1;3541:29:53;;;-1:-1:-1;3449:4:53;;2550:79546;;3533:55;3529:131;;3670:32;;;;2550:79546;;;-1:-1:-1;;;;;;2550:79546:53;;;;;;;;;-1:-1:-1;;;3796:60:53;;2550:79546;;;3796:60;2550:79546;3796:60;;;;;;;;-1:-1:-1;3796:60:53;;;-1:-1:-1;;3769:87:53;;;;2550:79546;;-1:-1:-1;;;3895:62:53;;2550:79546;3895:62;2550:79546;;;3895:62;;;;;;;;-1:-1:-1;3895:62:53;;;-1:-1:-1;;3866:91:53;;;;2550:79546;;-1:-1:-1;;;3995:61:53;;2550:79546;3995:61;2550:79546;3995:61;2550:79546;;3995:61;;;;;;;-1:-1:-1;3995:61:53;;;-1:-1:-1;;3967:89:53;;;;2550:79546;;-1:-1:-1;;;4091:60:53;;;2550:79546;4091:60;2550:79546;4091:60;;;;;;;;;;;;-1:-1:-1;4091:60:53;;;-1:-1:-1;;4067:84:53;;2550:79546;;-1:-1:-1;;;4184:59:53;;2550:79546;;;;;4184:59;;;;;;;-1:-1:-1;4184:59:53;;;-1:-1:-1;;;4161:82:53;;2550:79546;;;-1:-1:-1;;;;;;2550:79546:53;;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;;;;;;;;4067:84;2550:79546;;;;;4161:82;2550:79546;;;;;3400:40:56;2550:79546:53;;;;;;;;;;3501:47:56;2550:79546:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4184:59;;;;;;;;;;;;;;;;:::i;:::-;;;2550:79546;;;;;4184:59;;;;2550:79546;-1:-1:-1;2550:79546:53;;4184:59;;;;;;2550:79546;;;-1:-1:-1;2550:79546:53;;;;;4091:60;;;;;;;;;;;;;;;;:::i;:::-;;;2550:79546;;;;;;;4091:60;;;;;;;;;2550:79546;;;-1:-1:-1;2550:79546:53;;;;;3995:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;2550:79546;;;-1:-1:-1;2550:79546:53;;;;;3895:62;;;;;;;;;;;;;;;:::i;:::-;;;;;3796:60;;;;;;;;;;;;;;;:::i;:::-;;;;;;2550:79546;;;-1:-1:-1;2550:79546:53;;;;;3529:131;3611:38;;;;-1:-1:-1;3611:38:53;-1:-1:-1;3611:38:53;3541:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;3402:117;3477:31;;;;-1:-1:-1;3477:31:53;-1:-1:-1;3477:31:53;3414:22;;;;;;;;;;;;;;:::i;:::-;;;;2550:79546;;;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;2550:79546:53;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;9892:177:56:-;2550:79546:53;;;;;;:::i;:::-;;;;1461:67:23;2550:79546:53;;;;-1:-1:-1;;;2550:79546:53;;;;;1461:67:23;;;;;;2550:79546:53;;;;;;;;;;;;;;-1:-1:-1;;;2550:79546:53;;;;;;;;;;;;;;;-1:-1:-1;2550:79546:53;;;;1461:67:23;;;;;;;;;:::i;:::-;2550:79546:53;1451:78:23;;-1:-1:-1;;2550:79546:53;;;;;;;;;1432:103:23;2550:79546:53;1432:103:23;;2550:79546:53;;;;1432:103:23;;;;;:::i;:::-;2550:79546:53;;1405:144:23;;-1:-1:-1;;1405:170:23;;9892:177:56:o;2550:79546:53:-;;;;-1:-1:-1;2550:79546:53;;;;;-1:-1:-1;2550:79546:53"},"deployedBytecode":{"functionDebugData":{"abi_decode":{"entryPoint":2374,"id":null,"parameterSlots":2,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":4532,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn":{"entryPoint":853,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":8483,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dynt_uint256t_array_uint256_dynt_bytes_fromMemory":{"entryPoint":16099,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_available_length_bytes":{"entryPoint":990,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":7943,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_boolt_array_uint256_dyn_fromMemory":{"entryPoint":10520,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_boolt_uint256_fromMemory":{"entryPoint":11814,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes":{"entryPoint":1044,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bytes_fromMemory":{"entryPoint":8580,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC20":{"entryPoint":241,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_enum_AddLiquidityKind":{"entryPoint":1888,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_enum_RemoveLiquidityKind":{"entryPoint":949,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_enum_SwapKind":{"entryPoint":1422,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_t_bool_fromMemory":{"entryPoint":7930,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint256_fromMemory":{"entryPoint":2796,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_array_uint256_dynt_array_uint256_dynt_bytes_fromMemory":{"entryPoint":8650,"id":null,"parameterSlots":2,"returnSlots":4},"abi_encodeUpdatedPos_contract_IERC20":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_address_38631":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address_address_enum_AddLiquidityKind_array_uint256_dyn_array_uint256_dyn_uint256_array_uint256_dyn_bytes":{"entryPoint":17394,"id":null,"parameterSlots":9,"returnSlots":1},"abi_encode_address_address_enum_AddLiquidityKind_array_uint256_dyn_uint256_array_uint256_dyn_bytes":{"entryPoint":15844,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_address_address_enum_RemoveLiquidityKind_uint256_array_uint256_dyn_array_uint256_dyn_array_uint256_dyn_bytes":{"entryPoint":10573,"id":null,"parameterSlots":9,"returnSlots":1},"abi_encode_address_address_enum_RemoveLiquidityKind_uint256_array_uint256_dyn_array_uint256_dyn_bytes":{"entryPoint":7976,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_address_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_address_address_uint256_38836":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_address_address_uint256_38855":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_address_array_uint256_dyn_uint256_array_uint256_dyn_bytes":{"entryPoint":16173,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_address_uint256_69121":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_uint256_array_uint256_dyn_array_uint256_dyn_bytes":{"entryPoint":8746,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_address_uint256_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":1074,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_enum_Rounding":{"entryPoint":19363,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_enum_Rounding_38822":{"entryPoint":19335,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_uint256_bytes":{"entryPoint":1901,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_array_uint256_dyn_uint256_uint256":{"entryPoint":19907,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_bytes":{"entryPoint":1772,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes_memory_ptr":{"entryPoint":1125,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_enum_AddLiquidityKind":{"entryPoint":15831,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_enum_RemoveLiquidityKind":{"entryPoint":7963,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_enum_SwapKind":{"entryPoint":11350,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_struct_AfterSwapParams":{"entryPoint":12995,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_PoolSwapParams":{"entryPoint":12978,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_PoolSwapParams_memory_ptr":{"entryPoint":11360,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_address":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_uint256_address_address":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_uint256_array_uint256_dyn_array_uint256_dyn":{"entryPoint":8849,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_uint256_array_uint256_dyn_bytes":{"entryPoint":1161,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_uint256_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_uint256_uint256_38577":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_uint256_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_uint256_uint256_uint256_uint256":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"allocate_and_zero_memory_array_array_struct_TokenInfo_dyn":{"entryPoint":18360,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":7714,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_and_zero_memory_struct_struct_LiquidityLocals":{"entryPoint":8453,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory":{"entryPoint":783,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_38490":{"entryPoint":751,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_38749":{"entryPoint":796,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":829,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":962,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_int256":{"entryPoint":13907,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_uint256":{"entryPoint":8836,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_uint256_38754":{"entryPoint":8822,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint32":{"entryPoint":24460,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_uint256":{"entryPoint":20179,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":18830,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_38848":{"entryPoint":18801,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_int256":{"entryPoint":13883,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_uint256":{"entryPoint":2856,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_uint256_38756":{"entryPoint":2842,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_bool":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"constant_AGGREGATE_YIELD_FEE_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"constant_DECIMAL_SCALING_FACTORS_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"convert_uint32_to_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_array_from_storage_to_memory_array_contract_IERC20_dyn_ptr":{"entryPoint":18273,"id":null,"parameterSlots":1,"returnSlots":1},"external_fun_addLiquidity":{"entryPoint":1942,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_erc4626BufferWrapOrUnwrap":{"entryPoint":1649,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolTokenCountAndIndexOfToken":{"entryPoint":2505,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getVaultExtension":{"entryPoint":2384,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_reentrancyGuardEntered":{"entryPoint":2734,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_removeLiquidity":{"entryPoint":1204,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_sendTo":{"entryPoint":2150,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_settle":{"entryPoint":254,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_swap":{"entryPoint":1433,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_transfer":{"entryPoint":2451,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_transferFrom":{"entryPoint":527,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_unlock":{"entryPoint":1789,"id":null,"parameterSlots":0,"returnSlots":0},"extract_returndata":{"entryPoint":22173,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":717,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_38634":{"entryPoint":636,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_38650":{"entryPoint":661,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_38687":{"entryPoint":689,"id":null,"parameterSlots":1,"returnSlots":0},"fun":{"entryPoint":5168,"id":16390,"parameterSlots":0,"returnSlots":0},"fun_16372":{"entryPoint":5153,"id":16372,"parameterSlots":0,"returnSlots":0},"fun__addLiquidity":{"entryPoint":16234,"id":14640,"parameterSlots":3,"returnSlots":4},"fun_accountDelta":{"entryPoint":18004,"id":16585,"parameterSlots":2,"returnSlots":0},"fun_addLiquidity":{"entryPoint":4733,"id":14192,"parameterSlots":1,"returnSlots":3},"fun_allowance":{"entryPoint":18197,"id":20423,"parameterSlots":3,"returnSlots":1},"fun_buildPoolSwapParams":{"entryPoint":11210,"id":13656,"parameterSlots":3,"returnSlots":1},"fun_burn":{"entryPoint":20833,"id":20691,"parameterSlots":3,"returnSlots":0},"fun_callAfterAddLiquidityHook":{"entryPoint":17499,"id":18383,"parameterSlots":8,"returnSlots":1},"fun_callAfterRemoveLiquidityHook":{"entryPoint":10692,"id":18543,"parameterSlots":8,"returnSlots":1},"fun_callAfterSwapHook":{"entryPoint":13194,"id":18223,"parameterSlots":8,"returnSlots":1},"fun_callBeforeAddLiquidityHook":{"entryPoint":15929,"id":18266,"parameterSlots":5,"returnSlots":0},"fun_callBeforeRemoveLiquidityHook":{"entryPoint":8075,"id":18426,"parameterSlots":5,"returnSlots":0},"fun_callBeforeSwapHook":{"entryPoint":11521,"id":18087,"parameterSlots":3,"returnSlots":0},"fun_callComputeDynamicSwapFeeHook":{"entryPoint":11843,"id":18060,"parameterSlots":4,"returnSlots":1},"fun_callOptionalReturn":{"entryPoint":23451,"id":7282,"parameterSlots":2,"returnSlots":0},"fun_computeAddLiquiditySingleTokenExactOut":{"entryPoint":22278,"id":12660,"parameterSlots":6,"returnSlots":2},"fun_computeAddLiquidityUnbalanced":{"entryPoint":22508,"id":12552,"parameterSlots":5,"returnSlots":2},"fun_computeAmountGivenScaled18":{"entryPoint":11656,"id":13709,"parameterSlots":3,"returnSlots":1},"fun_computeAndChargeAggregateSwapFees":{"entryPoint":20373,"id":15389,"parameterSlots":5,"returnSlots":2},"fun_computeProportionalAmountsIn":{"entryPoint":23096,"id":12321,"parameterSlots":3,"returnSlots":1},"fun_computeProportionalAmountsOut":{"entryPoint":20194,"id":12371,"parameterSlots":3,"returnSlots":1},"fun_computeRateRoundUp":{"entryPoint":21146,"id":3445,"parameterSlots":1,"returnSlots":1},"fun_computeRemoveLiquiditySingleTokenExactIn":{"entryPoint":19941,"id":12928,"parameterSlots":6,"returnSlots":2},"fun_computeRemoveLiquiditySingleTokenExactOut":{"entryPoint":19387,"id":12825,"parameterSlots":6,"returnSlots":2},"fun_computeYieldFeesDue":{"entryPoint":23665,"id":20157,"parameterSlots":4,"returnSlots":1},"fun_copyToArray":{"entryPoint":22481,"id":3152,"parameterSlots":2,"returnSlots":0},"fun_copyToScaled18ApplyRateRoundDownArray":{"entryPoint":15707,"id":3282,"parameterSlots":3,"returnSlots":1},"fun_copyToScaled18ApplyRateRoundUpArray":{"entryPoint":7804,"id":3412,"parameterSlots":3,"returnSlots":1},"fun_ensureCorrectBufferAsset":{"entryPoint":13752,"id":16878,"parameterSlots":2,"returnSlots":0},"fun_ensureInitializedPool":{"entryPoint":6199,"id":16804,"parameterSlots":1,"returnSlots":0},"fun_ensureInputLengthMatch":{"entryPoint":7692,"id":2673,"parameterSlots":2,"returnSlots":0},"fun_ensureInputLengthMatch_2695":{"entryPoint":18770,"id":2695,"parameterSlots":3,"returnSlots":0},"fun_ensureInvariantRatioAboveMinimumBound":{"entryPoint":23767,"id":12980,"parameterSlots":2,"returnSlots":0},"fun_ensureInvariantRatioBelowMaximumBound":{"entryPoint":24346,"id":12954,"parameterSlots":2,"returnSlots":0},"fun_ensurePoolMinimumTotalSupply":{"entryPoint":23914,"id":20543,"parameterSlots":1,"returnSlots":0},"fun_ensureUnlocked":{"entryPoint":5339,"id":16484,"parameterSlots":0,"returnSlots":0},"fun_ensureUnpaused":{"entryPoint":6251,"id":16619,"parameterSlots":1,"returnSlots":0},"fun_ensureValidSwapAmount":{"entryPoint":21182,"id":16342,"parameterSlots":1,"returnSlots":0},"fun_ensureValidTradeAmount":{"entryPoint":20309,"id":16328,"parameterSlots":1,"returnSlots":0},"fun_ensureValidWrapAmount":{"entryPoint":13813,"id":15657,"parameterSlots":2,"returnSlots":0},"fun_findTokenIndex":{"entryPoint":17867,"id":17167,"parameterSlots":2,"returnSlots":1},"fun_forceApprove":{"entryPoint":21866,"id":7240,"parameterSlots":3,"returnSlots":0},"fun_forceApprove_38760":{"entryPoint":21608,"id":7240,"parameterSlots":2,"returnSlots":0},"fun_functionCallWithValue":{"entryPoint":22220,"id":7452,"parameterSlots":2,"returnSlots":1},"fun_getAggregateYieldFeePercentage":{"entryPoint":23630,"id":19310,"parameterSlots":1,"returnSlots":1},"fun_getBalanceRaw":{"entryPoint":null,"id":2910,"parameterSlots":1,"returnSlots":1},"fun_getBufferUnderlyingImbalance":{"entryPoint":21920,"id":2535,"parameterSlots":2,"returnSlots":1},"fun_getBufferWrappedImbalance":{"entryPoint":21419,"id":2584,"parameterSlots":2,"returnSlots":1},"fun_getDecimalScalingFactors":{"entryPoint":23538,"id":19442,"parameterSlots":2,"returnSlots":1},"fun_getSingleInputIndex":{"entryPoint":19207,"id":2754,"parameterSlots":1,"returnSlots":1},"fun_getStaticSwapFeePercentage":{"entryPoint":19300,"id":19188,"parameterSlots":1,"returnSlots":1},"fun_getTokenRate":{"entryPoint":18849,"id":20043,"parameterSlots":1,"returnSlots":1},"fun_isPoolInRecoveryMode":{"entryPoint":null,"id":18893,"parameterSlots":1,"returnSlots":1},"fun_isQueryContext":{"entryPoint":20730,"id":17226,"parameterSlots":0,"returnSlots":1},"fun_loadPoolDataUpdatingBalancesAndYieldFees":{"entryPoint":7152,"id":17002,"parameterSlots":1,"returnSlots":1},"fun_loadPoolDataUpdatingBalancesAndYieldFees_38530":{"entryPoint":6497,"id":17002,"parameterSlots":1,"returnSlots":1},"fun_loadSwapState":{"entryPoint":11059,"id":13623,"parameterSlots":2,"returnSlots":1},"fun_mint":{"entryPoint":23167,"id":20528,"parameterSlots":3,"returnSlots":0},"fun_mulDivUp":{"entryPoint":21301,"id":4592,"parameterSlots":3,"returnSlots":1},"fun_mulDivUp_38824":{"entryPoint":21237,"id":4592,"parameterSlots":2,"returnSlots":1},"fun_mulDown":{"entryPoint":23881,"id":4511,"parameterSlots":2,"returnSlots":1},"fun_mulUp":{"entryPoint":20275,"id":4528,"parameterSlots":2,"returnSlots":1},"fun_nonReentrantAfter":{"entryPoint":5302,"id":6177,"parameterSlots":0,"returnSlots":0},"fun_nonReentrantBefore":{"entryPoint":5242,"id":6165,"parameterSlots":0,"returnSlots":0},"fun_queryModeBalanceIncrease":{"entryPoint":20751,"id":20457,"parameterSlots":3,"returnSlots":0},"fun_reloadBalancesAndRates":{"entryPoint":8259,"id":19998,"parameterSlots":2,"returnSlots":0},"fun_reloadBalancesAndRates_38629":{"entryPoint":8359,"id":19998,"parameterSlots":2,"returnSlots":0},"fun_removeLiquidity":{"entryPoint":8892,"id":15296,"parameterSlots":3,"returnSlots":4},"fun_removeLiquidity_14790":{"entryPoint":2869,"id":14790,"parameterSlots":1,"returnSlots":3},"fun_requireAddLiquidityCustomEnabled":{"entryPoint":22250,"id":19018,"parameterSlots":1,"returnSlots":0},"fun_requireDonationEnabled":{"entryPoint":23068,"id":19167,"parameterSlots":1,"returnSlots":0},"fun_requireRemoveLiquidityCustomEnabled":{"entryPoint":19152,"id":19080,"parameterSlots":1,"returnSlots":0},"fun_requireUnbalancedLiquidityEnabled":{"entryPoint":19180,"id":18956,"parameterSlots":1,"returnSlots":0},"fun_setBalanceDerived":{"entryPoint":23748,"id":2963,"parameterSlots":2,"returnSlots":1},"fun_setBalanceRaw":{"entryPoint":23900,"id":2945,"parameterSlots":2,"returnSlots":1},"fun_settleUnwrap":{"entryPoint":22104,"id":16234,"parameterSlots":4,"returnSlots":0},"fun_settleWrap":{"entryPoint":22035,"id":16196,"parameterSlots":4,"returnSlots":0},"fun_settleWrapUnwrap":{"entryPoint":23945,"id":16313,"parameterSlots":4,"returnSlots":0},"fun_shouldCallAfterAddLiquidity":{"entryPoint":null,"id":17849,"parameterSlots":1,"returnSlots":1},"fun_shouldCallAfterRemoveLiquidity":{"entryPoint":null,"id":17935,"parameterSlots":1,"returnSlots":1},"fun_shouldCallAfterSwap":{"entryPoint":null,"id":17763,"parameterSlots":1,"returnSlots":1},"fun_shouldCallBeforeAddLiquidity":{"entryPoint":null,"id":17806,"parameterSlots":1,"returnSlots":1},"fun_shouldCallBeforeRemoveLiquidity":{"entryPoint":null,"id":17892,"parameterSlots":1,"returnSlots":1},"fun_shouldCallBeforeSwap":{"entryPoint":null,"id":17720,"parameterSlots":1,"returnSlots":1},"fun_shouldCallComputeDynamicSwapFee":{"entryPoint":null,"id":17677,"parameterSlots":1,"returnSlots":1},"fun_spendAllowance":{"entryPoint":5429,"id":20897,"parameterSlots":4,"returnSlots":0},"fun_supplyCredit":{"entryPoint":5395,"id":16512,"parameterSlots":2,"returnSlots":0},"fun_syncPoolBalancesAndFees":{"entryPoint":18502,"id":19934,"parameterSlots":3,"returnSlots":0},"fun_tGet":{"entryPoint":null,"id":3641,"parameterSlots":3,"returnSlots":1},"fun_tIncrement":{"entryPoint":15665,"id":4022,"parameterSlots":1,"returnSlots":0},"fun_tSet":{"entryPoint":15682,"id":3671,"parameterSlots":3,"returnSlots":0},"fun_takeDebt":{"entryPoint":17849,"id":16529,"parameterSlots":2,"returnSlots":0},"fun_toInt256":{"entryPoint":17944,"id":11728,"parameterSlots":1,"returnSlots":1},"fun_toPackedBalance":{"entryPoint":21353,"id":2991,"parameterSlots":2,"returnSlots":1},"fun_toRawUndoRateRoundDown":{"entryPoint":20326,"id":3107,"parameterSlots":3,"returnSlots":1},"fun_toRawUndoRateRoundUp":{"entryPoint":21333,"id":3128,"parameterSlots":3,"returnSlots":1},"fun_toUint256":{"entryPoint":21580,"id":10892,"parameterSlots":1,"returnSlots":1},"fun_totalSupply":{"entryPoint":null,"id":20375,"parameterSlots":1,"returnSlots":1},"fun_transfer":{"entryPoint":5813,"id":20781,"parameterSlots":4,"returnSlots":0},"fun_unwrapWithBuffer":{"entryPoint":14900,"id":16158,"parameterSlots":4,"returnSlots":3},"fun_updateRawAndLiveBalance":{"entryPoint":19008,"id":20105,"parameterSlots":3,"returnSlots":0},"fun_updateRawAndLiveBalance_69105":{"entryPoint":19085,"id":20105,"parameterSlots":3,"returnSlots":0},"fun_verifyCallResultFromTarget":{"entryPoint":24256,"id":7544,"parameterSlots":3,"returnSlots":1},"fun_wrapWithBuffer":{"entryPoint":13934,"id":15922,"parameterSlots":4,"returnSlots":3},"fun_writePoolBalancesToStorage":{"entryPoint":20631,"id":16926,"parameterSlots":2,"returnSlots":0},"mapping_index_access_mapping_contract_IERC20_uint256_of_contract_IERC20":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"mapping_index_access_mapping_contract_IERC20_uint256_of_contract_IERC20_38486":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_contract_IERC20_uint256_of_contract_IERC20_38531":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_contract_IERC20_uint256_of_contract_IERC20_38532":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_contract_IERC20_uint256_of_contract_IERC20_38633":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_contract_IERC20_uint256_of_contract_IERC20_38637":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_contract_IERC20_uint256_of_contract_IERC20_38653":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_contract_IERC20_uint256_of_contract_IERC20_38758":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_contract_IERC20_uint256_of_contract_IERC20_38834":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_uint256_bytes32_of_uint256":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"memory_array_index_access_uint256_dyn":{"entryPoint":7764,"id":null,"parameterSlots":2,"returnSlots":1},"modifier_nonReentrant":{"entryPoint":12037,"id":6146,"parameterSlots":4,"returnSlots":4},"modifier_onlyWhenUnlocked":{"entryPoint":3263,"id":16469,"parameterSlots":1,"returnSlots":3},"modifier_onlyWhenUnlocked_38500":{"entryPoint":3843,"id":16469,"parameterSlots":1,"returnSlots":3},"modifier_transient":{"entryPoint":4553,"id":13257,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":2822,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":20159,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":3808,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":616,"id":null,"parameterSlots":0,"returnSlots":0},"read_from_memoryt_contract_IERC20":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_storage_reference_type_struct_TokenInfo":{"entryPoint":18439,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_storage_split_offset_contract_IHooks":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"revert_forward":{"entryPoint":2811,"id":null,"parameterSlots":0,"returnSlots":0},"validator_assert_enum_AddLiquidityKind":{"entryPoint":15821,"id":null,"parameterSlots":1,"returnSlots":0},"validator_assert_enum_RemoveLiquidityKind":{"entryPoint":7920,"id":null,"parameterSlots":1,"returnSlots":0},"validator_assert_enum_SwapKind":{"entryPoint":3828,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_contract_IERC20":{"entryPoint":220,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_enum_SwapKind":{"entryPoint":1412,"id":null,"parameterSlots":1,"returnSlots":0},"write_to_memory_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"write_to_memory_enum_SwapKind":{"entryPoint":11198,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"13095":[{"length":32,"start":2415},{"length":32,"start":5191}],"17321":[{"length":32,"start":21184}],"17323":[{"length":32,"start":13816}],"17328":[{"length":32,"start":4564},{"length":32,"start":5341}],"17333":[{"length":32,"start":4629},{"length":32,"start":18086},{"length":32,"start":18152}],"17338":[{"length":32,"start":18020}],"17343":[{"length":32,"start":4838},{"length":32,"start":9097}],"17348":[{"length":32,"start":4673},{"length":32,"start":4786},{"length":32,"start":9045}],"17394":[{"length":32,"start":6259}],"17396":[{"length":32,"start":6409}]},"linkReferences":{},"object":"60806040526004361015610018575b3661143057611421565b5f3560e01c806315afd409146100d757806315dacbea146100d257806321457897146100cd5780632bfb780c146100c857806343583be5146100c357806348c89491146100be5780634af29ec4146100b9578063ae639329146100b4578063b9a8effa146100af578063beabacc8146100aa578063c9c1661b146100a55763d2c725e00361000e57610aae565b6109c9565b610993565b610950565b610866565b610796565b6106fd565b610671565b610599565b6104b4565b61020f565b6100fe565b6001600160a01b038116036100ed57565b5f80fd5b35906100fc826100dc565b565b346100ed5760403660031901126100ed5760043561011b816100dc565b60243561012661147a565b61012e6114db565b6001600160a01b0382165f818152600860209081526040918290205491516370a0823160e01b8152306004820152919492829060249082905afa93841561020a576101cd946101a1925f916101db575b508061019b856001600160a01b03165f52600860205260405f2090565b55610b28565b918083116101d1575b50816101b591611513565b6101bd6114b6565b6040519081529081906020820190565b0390f35b91506101b56101aa565b6101fd915060203d602011610203575b6101f581836102cd565b810190610aec565b5f61017e565b503d6101eb565b610afb565b346100ed5760803660031901126100ed5761025d60043561022f816100dc565b60243561023b816100dc565b60443590610248826100dc565b61025760643580948333611535565b336116b5565b602060405160018152f35b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff811161029057604052565b610268565b60e0810190811067ffffffffffffffff82111761029057604052565b6060810190811067ffffffffffffffff82111761029057604052565b90601f8019910116810190811067ffffffffffffffff82111761029057604052565b6040519060c0820182811067ffffffffffffffff82111761029057604052565b604051906100fc82610295565b60405190610180820182811067ffffffffffffffff82111761029057604052565b67ffffffffffffffff81116102905760051b60200190565b9080601f830112156100ed57602090823561036f8161033d565b9361037d60405195866102cd565b81855260208086019260051b8201019283116100ed57602001905b8282106103a6575050505090565b81358152908301908301610398565b359060048210156100ed57565b67ffffffffffffffff811161029057601f01601f191660200190565b9291926103ea826103c2565b916103f860405193846102cd565b8294818452818301116100ed578281602093845f960137010152565b9080601f830112156100ed5781602061042f933591016103de565b90565b9081518082526020808093019301915f5b828110610451575050505090565b835185529381019392810192600101610443565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b916104a69061042f94928452606060208501526060840190610432565b916040818403910152610465565b346100ed576003196020368201126100ed5760043567ffffffffffffffff918282116100ed5760c09082360301126100ed576104ee6102ef565b6104fa826004016100f1565b8152610508602483016100f1565b60208201526044820135604082015260648201358381116100ed576105339060043691850101610355565b6060820152610544608483016103b5565b608082015260a48201359283116100ed5761056b6105759260046101cd9536920101610414565b60a0820152610b35565b60409391935193849384610489565b600211156100ed57565b35906100fc82610584565b346100ed576003196020368201126100ed5760043567ffffffffffffffff918282116100ed5760e09082360301126100ed576105d361030f565b6105df8260040161058e565b81526105ed602483016100f1565b60208201526105fe604483016100f1565b604082015261060f606483016100f1565b60608201526084820135608082015260a482013560a082015260c48201359283116100ed5761064a6106549260046101cd9536920101610414565b60c0820152610cbf565b604080519384526020840192909252908201529081906060820190565b346100ed5760a03660031901126100ed5760405160a0810181811067ffffffffffffffff821117610290576101cd91610654916040526004356106b381610584565b81526024356106c181610584565b60208201526044356106d2816100dc565b604082015260643560608201526084356080820152610f03565b90602061042f928181520190610465565b346100ed5760203660031901126100ed5767ffffffffffffffff6004358181116100ed57366023820112156100ed5780600401359182116100ed5736602483830101116100ed576101cd91602461075492016111c9565b604051918291826106ec565b359060058210156100ed57565b61078361042f9492606083526060830190610432565b9260208201526040818403910152610465565b346100ed576003196020368201126100ed5760043567ffffffffffffffff918282116100ed5760c09082360301126100ed576107d06102ef565b6107dc826004016100f1565b81526107ea602483016100f1565b602082015260448201358381116100ed5761080b9060043691850101610355565b60408201526064820135606082015261082660848301610760565b608082015260a48201359283116100ed5761084d6108579260046101cd9536920101610414565b60a082015261127d565b6040939193519384938461076d565b346100ed5760603660031901126100ed57600435610883816100dc565b60243590610890826100dc565b6044359061089c61147a565b6108a46114db565b6108b66108b083614618565b82614654565b6001600160a01b0381165f52600860205260405f208054938385039485116109415793905560405163a9059cbb60e01b60208201526001600160a01b03909316602484015260448084019290925290825261091c91906109176064836102cd565b615b9b565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b610b06565b5f9103126100ed57565b346100ed575f3660031901126100ed5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100ed5760603660031901126100ed5761025d6004356109b3816100dc565b6024356109bf816100dc565b60443591336116b5565b346100ed5760403660031901126100ed576004356109e6816100dc565b602435906109f3826100dc565b6001600160a01b0380911691825f525f602052600192600160405f20541615610a9c575f93929352600360205260405f20926040519283602086549182815201955f5260205f20925f905b828210610a6f5786610a5c87610a56838c03846102cd565b826145cb565b9051604080519182526020820192909252f35b90919280610a9086998483985416906001600160a01b036020921681520190565b98019493920190610a3e565b6327946f5760e21b5f5260045260245ffd5b346100ed575f3660031901126100ed5760207f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6040519015158152f35b908160209103126100ed575190565b6040513d5f823e3d90fd5b634e487b7160e01b5f52601160045260245ffd5b5f1981019190821161094157565b9190820391821161094157565b90610b3e6114db565b610b516001600160a01b03835116611837565b610b6a610b6583516001600160a01b031690565b61186b565b610b83610b7e83516001600160a01b031690565b611961565b90610bd7602083015151610b9e606086019182515190611e0c565b805160c0850190610bb882519160a0880192835191611e7c565b92610bc8875160019060101c1690565b610c50575b50505084846122bc565b9490919586610beb835160019060111c1690565b610bf9575b50505050929190565b84975093610c4694610c3c610c2f610c1885516001600160a01b031690565b6001600160a01b03165f52600260205260405f2090565b546001600160a01b031690565b94845133906129c4565b925f808080610bf0565b610c78610cb794888a610c70610c2f610c1883516001600160a01b031690565b923390611f8b565b610cac610ca6610c8f8a516001600160a01b031690565b6001600160a01b03165f52600560205260405f2090565b88612043565b519151905191611e7c565b5f8080610bcd565b90610cc86114db565b60208201906001600160a01b03610ce181845116611837565b610cf5610b6584516001600160a01b031690565b608084015115610ed15760408401516001600160a01b031690610d31610d2560608701516001600160a01b031690565b6001600160a01b031690565b911614610ec257610d4c610b7e83516001600160a01b031690565b92610d578482612b33565b90610d63858383612bca565b8551600c1c600116610e47575b8551610d8a9190600b1c600116610e06575b868484612f05565b9791979490978397610da18451600190600d1c1690565b610dd1575b505050505051610db581610ef4565b610dbe81610ef4565b610dc9575081929190565b918093509190565b85985090610df0610c2f610c18610dfb9894516001600160a01b031690565b94845191339261338a565b925f80808080610da6565b85516001600160a01b0316610e4060608601918251610e39610c2f836001600160a01b03165f52600260205260405f2090565b9185612e43565b9052610d82565b610e8090610e5c86516001600160a01b031690565b610e7a610c2f826001600160a01b03165f52600260205260405f2090565b91612d01565b610e9d610e97610c8f86516001600160a01b031690565b86612043565b610ea8828683612d88565b6040830152610d8a610ebb868484612bca565b9050610d70565b63a54b181d60e01b5f5260045ffd5b6357a456b760e01b5f5260045ffd5b634e487b7160e01b5f52602160045260245ffd5b60021115610efe57565b610ee0565b610f0b6114db565b600160075460021c166111a55760408101916001600160a01b03928381511693845f52600e6020528060405f205416156111925760049450610f4b61147a565b6020610f61610d2584516001600160a01b031690565b6040516338d52e0f60e01b815296879182905afa801561020a576080955f91611163575b5016610fa181610f9c84516001600160a01b031690565b6135b8565b81516001600160a01b031690610fbd60608601928351906135f5565b60016020860151610fcd81610ef4565b610fd681610ef4565b036110f857610ffe91855191610feb83610ef4565b84516001600160a01b0316915192613a34565b7feeb740c90bf2b18c9532eb7d473137767036d893dff3e009f32718f821b2a4c0829692979397968861105c61103e610d2589516001600160a01b031690565b94604051938493846040919493926060820195825260208201520152565b0390a25b805161106b81610ef4565b61107481610ef4565b6110c75701518084106110ad57506110a061109b91849283915b516001600160a01b031690565b6135f5565b6110a86114b6565b929190565b63e2ea151b60e01b5f52600484905260245260445ffd5b5ffd5b01518085116110e157506110a061109b918592839161108e565b63e2ea151b60e01b5f52600485905260245260445ffd5b61111b9185519161110883610ef4565b84516001600160a01b031691519261366e565b7f3771d13c67011e31e12031c54bb59b0bf544a80b81d280a3711e172aa8b7f47b829692979397968861115b61103e610d2589516001600160a01b031690565b0390a2611060565b611185915060203d60201161118b575b61117d81836102cd565b8101906111b4565b5f610f85565b503d611173565b846385f4129960e01b5f5260045260245ffd5b630f27df0960e01b5f5260045ffd5b908160209103126100ed575161042f816100dc565b91909161120b6112057f000000000000000000000000000000000000000000000000000000000000000092835c159586611274575b36916103de565b336156cc565b926112135750565b7f00000000000000000000000000000000000000000000000000000000000000005c611265575f905d6100fc7f0000000000000000000000000000000000000000000000000000000000000000613d31565b6320f1d86d60e01b5f5260045ffd5b6001855d6111fe565b906112866114db565b6112996001600160a01b03835116611837565b6112ad610b6583516001600160a01b031690565b61130a7f00000000000000000000000000000000000000000000000000000000000000005c6112e384516001600160a01b031690565b907f0000000000000000000000000000000000000000000000000000000000000000613d42565b61132361131e83516001600160a01b031690565b611bf0565b9061137760208301515161133e604086019182515190611e0c565b805160c085019061135882519160a0880192835191613d5b565b926113688751600190600e1c1690565b6113ca575b5050508484613f6a565b949095868461138b8451600190600f1c1690565b61139a575b5050505050929190565b6113c095506113b6610c2f610c1885516001600160a01b031690565b948451339061445b565b5f80808681611390565b6113f161141994888a6113ea610c2f610c1883516001600160a01b031690565b9233613e39565b61140e611408610c8f8a516001600160a01b031690565b886120a7565b519151905191613d5b565b5f808061136d565b637911c44b60e11b5f5260045ffd5b3461142157365f80375f8036816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af43d5f803e15611476573d5ff35b3d5ffd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c6114a7576001905d565b633ee5aeb560e01b5f5260045ffd5b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b7f00000000000000000000000000000000000000000000000000000000000000005c1561150457565b63604dd39b60e11b5f5260045ffd5b9061151d90614618565b90600160ff1b8214610941576100fc915f0390614654565b92919091611544828486614715565b60018101611554575b5050505050565b8082116116935703906001600160a01b03928381169384156116775780831695861561165b57846115b48561159e8661159e866001600160a01b03165f52601060205260405f2090565b906001600160a01b03165f5260205260405f2090565b551692833b156100ed57604051630ad0fe5760e31b81526001600160a01b039283166004820152919092166024820152604481018290527fa0175360a15bca328baf7ea85c7b784d58b222a50d0ce760b10dba336d226a6191611635915f8180606481015b038183895af1611642575b506040519081529081906020820190565b0390a45f8080808061154d565b8061164f6116559261027c565b80610946565b5f611624565b634a1406b160e11b5f526001600160a01b03841660045260245ffd5b63e602df0560e01b5f526001600160a01b03821660045260245ffd5b6001600160a01b0383637dc7a0d960e11b5f521660045260245260445260645ffd5b929091926001600160a01b039081841691821561181b578086169182156117ff576116f58661159e836001600160a01b03165f52600f60205260405f2090565b548086116117db5785900361171f8761159e846001600160a01b03165f52600f60205260405f2090565b5561173f8761159e836001600160a01b03165f52600f60205260405f2090565b8581540190551691827fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f6040518061177c88829190602083019252565b0390a4803b156100ed576040516323de665160e01b81526001600160a01b03938416600482015293909216602484015260448301525f908290818381606481015b03925af1801561020a576117ce5750565b8061164f6100fc9261027c565b63391434e360e21b5f526001600160a01b038716600452602452604485905260645ffd5b63ec442f0560e01b5f526001600160a01b03871660045260245ffd5b634b637e8f60e11b5f526001600160a01b03851660045260245ffd5b6001600160a01b0316805f525f602052600160405f2054811c16156118595750565b634bdace1360e01b5f5260045260245ffd5b63ffffffff807f00000000000000000000000000000000000000000000000000000000000000001642111580611953575b611944576001600160a01b0382165f525f60205260405f20549060018260021c16906118c6605a90565b906028820180921161094157826118fe575b505090506118e35750565b63d971f59760e01b5f526001600160a01b031660045260245ffd5b6119309250611939937f0000000000000000000000000000000000000000000000000000000000000000921c16615f8c565b63ffffffff1690565b421115805f806118d8565b6336a7e2cd60e21b5f5260045ffd5b506001600754811c1661189c565b60409081519161197083610295565b5f8352826020810191606080845281830190808252808401908082526080936080860182815260a0870183815260c088019384526119ac61147a565b6001600160a01b038a165f526005602052825f20935f602052835f20549260046020526119e8855f20946003602052865f209081549c52614761565b8b526119f38a6147b8565b88526119fe8a611e22565b8752611a098a611e22565b9052611a16898d51615bf2565b9052611a2188611e22565b81528a5191600199600184811c169384611bdc575b5083611bca575b5f5b8d8b8210611a9d575050505050505050505050505080611a8e611a76611a95936001600160a01b03165f52600560205260405f2090565b916001600160a01b03165f52600660205260405f2090565b9083614846565b61042f6114b6565b908a8d92828c8c8c611aff84611aeb81611add611ad88f8f61108e85611ac39251611e54565b6001600160a01b03165f5260205260405f2090565b614807565b94905f5260205260405f2090565b54945183611af98383611e54565b52611e54565b50611b09816149a1565b611b14858d51611e54565b52611b296001600160801b0384168587614a40565b878d8d15611bbd5782015115159182611b9f575b5050611b50575b50505050505b01611a3f565b82611b7392611b6a82611b638851615c4e565b9451611e54565b51961c85615c71565b9283611b83575b8e93508c611b44565b611b9693611b9091610b28565b91614a40565b5f8f8282611b7a565b90915051611bac81610ef4565b611bb581610ef4565b14875f611b3d565b5050505050505050611b4a565b8c5190935060031c6001161592611a3d565b611be7919450615c4e565b1515925f611a36565b604090815191611bff83610295565b5f8352826020810191606080845281830190808252808401908082526080936080860182815260a0870183815260c08801938452611c3b61147a565b6001600160a01b038a165f526005602052825f20935f602052835f2054926004602052611c77855f20946003602052865f209081549c52614761565b8b52611c828a6147b8565b8852611c8d8a611e22565b8752611c988a611e22565b9052611ca5898d51615bf2565b9052611cb088611e22565b81528a5191600199600184811c169384611df8575b5083611de6575b5f5b8d8b8210611d05575050505050505050505050505080611a8e611a76611a95936001600160a01b03165f52600560205260405f2090565b908a8d92828c8c8c611d2b84611aeb81611add611ad88f8f61108e85611ac39251611e54565b50611d35816149a1565b611d40858d51611e54565b52611d556001600160801b0384168587614a8d565b878d8d15611dd95782015115159182611dbb575b5050611d7c575b50505050505b01611cce565b82611d8f92611b6a82611b638851615c4e565b9283611d9f575b8e93508c611d70565b611db293611dac91610b28565b91614a8d565b5f8f8282611d96565b90915051611dc881610ef4565b611dd181610ef4565b14875f611d69565b5050505050505050611d76565b8c5190935060031c6001161592611ccc565b611e03919450615c4e565b1515925f611cc5565b03611e1357565b63aaad13f760e01b5f5260045ffd5b90611e2c8261033d565b611e3960405191826102cd565b8281528092611e4a601f199161033d565b0190602036910137565b8051821015611e685760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b9190825191611e8f825182519085614952565b611e9883611e22565b935f5b848110611eaa57505050505090565b80611edf611eba60019385611e54565b51611eda611ec88489611e54565b51611ed38589611e54565b519261498e565b614f33565b611ee98289611e54565b5201611e9b565b60041115610efe57565b519081151582036100ed57565b908160209103126100ed5761042f90611efa565b906004821015610efe5752565b959293611f59611f7d9561042f999793611f6f956001600160a01b038092168b521660208a01526040890190611f1b565b606087015260e0608087015260e0860190610432565b9084820360a0860152610432565b9160c0818403910152610465565b5f6001600160a01b036020959693611fea611fad87516001600160a01b031690565b94608088015197611fbd89611ef0565b60a0608060408301519c0151910151916040519b8c9a8b998a976302e97e7d60e61b895260048901611f28565b0393165af190811561020a575f91612014575b501561200557565b631557c43360e11b5f5260045ffd5b612036915060203d60201161203c575b61202e81836102cd565b810190611f07565b5f611ffd565b503d612024565b60208082015151925f5b84811061205b575050505050565b6001906120a16001600160801b03604061208161207b85838b0151611e54565b516149a1565b61208f8560a08b0151611e54565b52835f528587525f2054168287614a40565b0161204d565b60208082015151925f5b8481106120bf575050505050565b6001906120ff6001600160801b0360406120df61207b85838b0151611e54565b6120ed8560a08b0151611e54565b52835f528587525f2054168287614a8d565b016120b1565b60405190612112826102b1565b5f6040838281528260208201520152565b9080601f830112156100ed5781519060209161213e8161033d565b9361214c60405195866102cd565b81855260208086019260051b8201019283116100ed57602001905b828210612175575050505090565b81518152908301908301612167565b81601f820112156100ed5780519061219b826103c2565b926121a960405194856102cd565b828452602083830101116100ed57815f9260208093018386015e8301015290565b6080818303126100ed5780519260208201519167ffffffffffffffff928381116100ed57846121fa918301612123565b9360408201518481116100ed5781612213918401612123565b9360608301519081116100ed5761042f9201612184565b939061042f9593612268936001600160a01b0361225a93168752602087015260a0604087015260a0860190610432565b908482036060860152610432565b916080818403910152610465565b906001820180921161094157565b9190820180921161094157565b916122ae9061042f94928452606060208501526060840190610432565b916040818403910152610432565b926122c561147a565b6060916122d0612105565b9260208601906122e4825151808752611e22565b90608084019687516122f581611ef0565b6122fe81611ef0565b61270157506040840151906123138751611e22565b9561234f8360808c01516123496123318a516001600160a01b031690565b6001600160a01b03165f52601160205260405f205490565b90614ee2565b926123c07f00000000000000000000000000000000000000000000000000000000000000005c61238689516001600160a01b031690565b907f0000000000000000000000000000000000000000000000000000000000000000905f5260205260405f20905f5260205260405f205c90565b612684575b604087015180821161266c57506123de819a999a614f55565b60208a01985f5b8b51811015612527578c6123f98288611e54565b5161240381614f55565b61240d838a611e54565b5161251557816124338460a061242a8260c061243a980151611e54565b51930151611e54565b5191614f66565b80612445838a611e54565b525b61245561108e838b51611e54565b60608b01612464848251611e54565b5183106124e257508e83611b908f8f8f966124d6916124be866124b6818b60019e9d612493886124dc9f611513565b6124af6124a08489611e54565b5191516001600160a01b031690565b908d614f95565b875292611e54565b526124cd856060880151611e54565b51925190612284565b90610b28565b016123e5565b916124f1846110c49451611e54565b516317bc2f2360e11b5f526001600160a01b03909216600452602452604452606490565b50506125218188611e54565b51612447565b5093995095945095929861254d91975061254885516001600160a01b031690565b615097565b7ffbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a561257f84516001600160a01b031690565b926125a186602087019561259a87516001600160a01b031690565b3391611535565b6125a96150fa565b612641575b6125d4866125c387516001600160a01b031690565b86516001600160a01b031690615161565b6126086123316125fc6125ee88516001600160a01b031690565b96516001600160a01b031690565b94519661108e88611ef0565b926126306001600160a01b039261261e88611ef0565b8c846040519586951698169684612291565b0390a461263b6114b6565b93929190565b6126678661265687516001600160a01b031690565b86516001600160a01b03169061510f565b6125ae565b6331d38e0b60e01b5f5260049190915260245260445ffd5b9894916126978b97949995929b51614b64565b9a5f5b86518110156126f157808b6126ea8f936126e46126d38f83906126c96001996126c3848a611e54565b51614f33565b611af98383611e54565b516126de8386611e54565b51610b28565b92611e54565b520161269a565b5091949893969a509194986123c5565b94906001885161271081611ef0565b61271981611ef0565b0361279d576127288951614aec565b60408501519186928a61279761278d8b8a60406127486060830151614b07565b92019482865286608082015193612787610d2561277961277261233188516001600160a01b031690565b9551614b64565b95516001600160a01b031690565b94614de5565b909251909a611e54565b526123c5565b600288969296516127ad81611ef0565b6127b681611ef0565b03612849576127c58951614aec565b6128428260608701906127e96127db8351614b07565b60408c019381855251611e54565b516127f5835188611e54565b528b612808608082015193518093611e54565b516128276128206123318c516001600160a01b031690565b9251614b64565b9261283c610d258c516001600160a01b031690565b94614bbb565b96906123c5565b50936003875161285881611ef0565b61286181611ef0565b03612909576128708851614ad0565b5f612888610d25610d2587516001600160a01b031690565b60408681015160808c015160a08901519251632ada38a360e21b8152998a94938593879385936128bd9392336004870161222a565b03925af194851561020a575f915f965f925f916128de575b509196926123c5565b92505095506128ff91503d805f833e6128f781836102cd565b8101906121ca565b919690915f6128d5565b63137a9a3960e01b5f5260045ffd5b9190916040818403126100ed5761292e81611efa565b92602082015167ffffffffffffffff81116100ed5761042f9201612123565b96939461042f9896926129b6966129876129a89661299a95610100948d6001600160a01b0380931690521660208d015260408c0190611f1b565b60608a01528060808a0152880190610432565b9086820360a0880152610432565b9084820360c0860152610432565b9160e0818403910152610465565b9493959296919084516129dd906001600160a01b031690565b906080860151926129ed84611ef0565b60808601518a60a0890151926040519b8c978897632754888d60e01b89526004890197612a199861294d565b03916001600160a01b031691815a5f948591f193841561020a575f905f95612b0c575b50158015612b00575b612af1576001809360091c1615612a635792935090915f835b612a6a575b5050505090565b8451811015612aec57612a7d8186611e54565b516060840190612a8e838351611e54565b5111612a9d5750830183612a5e565b612ac882612ac081612aba61108e8b9760206110c49a0151611e54565b95611e54565b519251611e54565b51633ef629c960e21b5f526001600160a01b03909216600452602452604452606490565b612a63565b6303a6723b60e31b5f5260045ffd5b50835185511415612a45565b9050612b2b9194503d805f833e612b2381836102cd565b810190612918565b93905f612a3c565b6040519291608084019067ffffffffffffffff82118583101761029057612bba916040525f855260208501945f8652612bb260408201915f83528360608201965f88528299612bab60208401805190612b9b6001600160a01b039283604088015116906145cb565b87525190606085015116906145cb565b9052612d88565b905251614b64565b9052565b612bc782610ef4565b52565b919091606060c0604051612bdd81610295565b5f81525f60208201528260408201525f838201525f60808201525f60a08201520152805192612c0b84610ef4565b6080604082015193015160c06020835193015193015193612c34612c2d61030f565b9687612bbe565b60208601526040850152606084015260808301523360a083015260c082015290565b90612bc782610ef4565b919060e08101908351612c7281610ef4565b8152602080850151602083015260408501519260e060408401528351809152602061010084019401915f5b828110612ced575050505060c084606061042f95960151606084015260808101516080840152612cdd60a082015160a08501906001600160a01b03169052565b01519060c0818403910152610465565b835186529481019492810192600101612c9d565b60209192612d385f6001600160a01b03809460405197889687958693635211fa7760e01b8552604060048601526044850190612c60565b911660248301520393165af190811561020a575f91612d69575b5015612d5a57565b63e91e17e760e01b5f5260045ffd5b612d82915060203d60201161203c5761202e81836102cd565b5f612d52565b9190918051612d9681610ef4565b612d9f81610ef4565b612de45790612ddb670de0b6b3a764000093611ed36080612de09501519360a0612dcf60c0850151835190611e54565b51930151905190611e54565b61498e565b0490565b61042f92612e20612e1a6080611eda9401519460a0612e0e602060c0870151930192835190611e54565b51940151905190611e54565b5161529a565b9261498e565b91908260409103126100ed576020612e3d83611efa565b92015190565b6040805163283a3d6b60e21b8152606060048201529490938593919284926001600160a01b039284928490612e7c906064860190612c60565b9216602484015260448301520392165afa90811561020a575f905f92612ed3575b5015612ec457670de0b5cad2bef0008111612eb55790565b6301d1b96560e61b5f5260045ffd5b6314fe5db560e21b5f5260045ffd5b9050612ef7915060403d604011612efe575b612eef81836102cd565b810190612e26565b905f612e9d565b503d612ee5565b5f9491939293612f1361147a565b612f1b612105565b918051612f2781610ef4565b612f3081610ef4565b1561328a575b602091828601612f4681516152be565b83612f8281850198612f65610d25610d258c516001600160a01b031690565b906040519c8d80948193633964c0c360e11b8352600483016132b2565b03925af198891561020a575f9961326b575b5088612f9f816152be565b8351612faa81610ef4565b612fb381610ef4565b6131f3575060408201519052612ff260c0880151612feb612e1a612fdc87860193845190611e54565b519260a08c0151905190611e54565b908a614f66565b9360808301519685979860a08501518088106131dc57505b60408501948a8651613022906001600160a01b031690565b9061302c916145b9565b60600195898751613043906001600160a01b031690565b9061304d91611513565b835183516001600160a01b031687516001600160a01b03168751916130729386614f95565b9190818601956040019283528552855160608401928d8285519061309591611e54565b51906130a091612284565b90516130ab91610b28565b6130b59185614a40565b85019182518b818451906130c891611e54565b51906130d391610b28565b6130dd9183614a40565b83516001600160a01b03165f908152600560205260409020918051875161310391611e54565b5191608001918251885161311691611e54565b5161312091615369565b87516131349085905f5260205260405f2090565b5551835161314191611e54565b519051835161314f91611e54565b5161315991615369565b915161316c91905f5260205260405f2090565b5551925193516060928301519151604080518b8152602081018b905290810193909352928201929092526001600160a01b039182169382169291909116907f0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db90608090a4939291906100fc6114b6565b63e2ea151b60e01b5f52600488905260245260445ffd5b905081985061321a6060613223930151670de0b6b3a7640000818103908210029083615335565b90818652612284565b9661325061323760c0890151835190611e54565b5161324860a08a0151845190611e54565b51908a615355565b93608083015196859860a08501518088116131dc575061300a565b613283919950843d8611610203576101f581836102cd565b975f612f94565b602085016132ab6132a18251606086015190614f33565b8086528251610b28565b9052612f36565b90602061042f928181520190612c60565b6101a061042f92602083526132dc602084018251612c56565b60208101516001600160a01b0316604084015260408101516001600160a01b0316606084015260608101516080840152608081015160a084015260a081015160c084015260c081015160e084015260e08101516101009081850152810151610120908185015281015161335d61014091828601906001600160a01b03169052565b8101519061337961016092838601906001600160a01b03169052565b015191610180808201520190610465565b939590919492865161339b81610ef4565b6133a481610ef4565b6135a95786604085015191845b8251946133bd86610ef4565b6040978897888601516133d6906001600160a01b031690565b9660608701516133ec906001600160a01b031690565b9360800192835181516133fe91611e54565b519351906020015161340f91611e54565b51936020880151613426906001600160a01b031690565b9760c001519861343461031c565b9a61343f908c612bbe565b6001600160a01b031660208b01526001600160a01b0316898b01526060890152608088015260a087015260c086015260e085015261010084018890526001600160a01b03166101208401526001600160a01b031661014083015261016082015281516318b6eb5560e01b8152968791829081906134bf90600483016132c3565b03916001600160a01b03165a905f91f194851561020a575f915f96613585575b5050156135765760091c60011615613570575080516134fd81610ef4565b61350681610ef4565b1580613563575b8015613538575b61351c575090565b60a0015163cc0e4a9960e01b5f5260049190915260245260445ffd5b506001815161354681610ef4565b61354f81610ef4565b148015613514575060a08101518211613514565b5060a0810151821061350d565b91505090565b630568a77b60e21b5f5260045ffd5b6135a093965080919250903d10612efe57612eef81836102cd565b93905f806134df565b866040850151918492946133b1565b6001600160a01b0380911690815f52600e6020528060405f20541692168092036135e0575050565b6336b18d0960e01b5f5260045260245260445ffd5b907f00000000000000000000000000000000000000000000000000000000000000001161361f5750565b6001600160a01b03906318fe738560e01b5f521660045260245ffd5b81810392915f13801582851316918412161761094157565b9190915f838201938412911290801582169115161761094157565b93909161367a85610ef4565b841580156139bd576136af602061369087610b1a565b6040518093819263ef8b30f760e01b8352600483019190602083019252565b03816001600160a01b0387165afa801561020a576136d4915f9161399e575b50610b1a565b94955b6136f2836001600160a01b03165f52600b60205260405f2090565b54916136fc6150fa565b61399657869288929091608083901c91858310613771575050509261376b82613748866137436001600160a01b03966001600160801b03896100fc9b60801c039316612284565b615369565b9788613765856001600160a01b03165f52600b60205260405f2090565b556145b9565b16611513565b90929350613780919450610ef4565b15613879576137a86137a361379585846155a0565b61379e8a614618565b613653565b61544c565b926001600160a01b038116936137bf81868961556a565b604051636e553f6560e01b81526004810182905230602482015294602090869060449082905f905af1801561020a576137488995613854876138496001600160a01b038f96888f896100fc9f859e6138438f61376b9f6138499661384e996001600160801b03965f9161385a575b509a8b935b169061383e8282615468565b615613565b16612284565b610b28565b94612284565b90615369565b613873915060203d602011610203576101f581836102cd565b5f61382d565b90916138996137a361388b83856153ab565b61389489614618565b61363b565b60405163b3d7f6b960e01b8152600481018290526001600160a01b038316936020939290918481602481895afa801561020a576138df915f91613979575b50868a61556a565b6040516394bf804d60e01b815260048101829052306024820152948490869060449082905f905af191821561020a576100fc966138548b613849858f966001600160a01b038f896001600160801b03879f9a849f8f9661376b9f97613849966137489f9961384e9a613843955f9261395c575b5050988992613832565b6139729250803d10610203576101f581836102cd565b5f80613952565b6139909150863d8811610203576101f581836102cd565b5f6138d7565b509093505050565b6139b7915060203d602011610203576101f581836102cd565b5f6136ce565b6139ea60206139cb87612276565b6040518093819263b3d7f6b960e01b8352600483019190602083019252565b03816001600160a01b0387165afa801561020a57613a0f915f91613a15575b50612276565b956136d7565b613a2e915060203d602011610203576101f581836102cd565b5f613a09565b9390613a3f85610ef4565b8415948515613cda57613a756020613a5687610b1a565b6040518093819263266d6a8360e11b8352600483019190602083019252565b03816001600160a01b0389165afa801561020a57613a99915f9161399e5750610b1a565b94955b613ab7856001600160a01b03165f52600b60205260405f2090565b5491613ac16150fa565b6139965787938793909290916001600160801b039182841691868310613b3857505050936001600160a01b03613b0e83866100fc98613b0686613b339860801c612284565b921603615369565b9788613b2b826001600160a01b03165f52600b60205260405f2090565b555b166145b9565b611513565b919650929450613b489150610ef4565b15613c2d57613b5d6137a361379587856153ab565b604051635d043b2960e11b8152600481018290523060248201819052604482015293906020856064815f6001600160a01b038c165af1801561020a57613beb8995613854846138498e613be28b8f6001600160a01b036100fc9f9c613bdd8f9d613b339f94889f859f613849975f91613c0e575b509586925b1690615658565b612284565b9460801c612284565b9788613c08826001600160a01b03165f52600b60205260405f2090565b55613b2d565b613c27915060203d602011610203576101f581836102cd565b5f613bd1565b613c3d6137a361388b87856155a0565b604051632d182be560e21b81526004810182905230602482018190526044820152906020826064815f6001600160a01b038c165af191821561020a57613beb89956138546001600160a01b036138498e613be28b8f8a6100fc9f613bdd8f93613b339f9e889f958b9f96613849975f91613cbb575b509b8c93613bd6565b613cd4915060203d602011610203576101f581836102cd565b5f613cb2565b613d076020613ce887612276565b60405180938192630a28a47760e01b8352600483019190602083019252565b03816001600160a01b0389165afa801561020a57613d2b915f91613a155750612276565b95613a9c565b805c9060018201809211610941575d565b905f5260205260405f20905f52602052600160405f205d565b9190825191613d6e825182519085614952565b613d7783611e22565b935f5b848110613d8957505050505090565b80670de0b6b3a7640000613dbb613da260019486611e54565b51612ddb613db0858a611e54565b51611ed3868a611e54565b04613dc68289611e54565b5201613d7a565b60051115610efe57565b906005821015610efe5752565b959193613e1561042f989694613e2693611f7d976001600160a01b038092168b521660208a01526040890190613dd7565b60e0606088015260e0870190610432565b91608086015284820360a0860152610432565b925f6001600160a01b03602095969396613e9a613e5d87516001600160a01b031690565b94608088015197613e6d89613dcd565b60a060806060830151930151910151916040519b8c9a8b998a976345421ec760e01b895260048901613de4565b0393165af190811561020a575f91613ec4575b5015613eb557565b6305975b2960e11b5f5260045ffd5b613edd915060203d60201161203c5761202e81836102cd565b5f613ead565b916080838303126100ed5782519067ffffffffffffffff918281116100ed5783613f0e918601612123565b9360208101519360408201518481116100ed5781612213918401612123565b93613f57612268936001600160a01b0361042f98969416875260a0602088015260a0870190610432565b9160408601528482036060860152610432565b9190613f7461147a565b6060613f7e612105565b9160208501613f91815151808652611e22565b60808301958651613fa181613dcd565b613faa81613dcd565b6141e957506060830151613fbe8651611e22565b94613fe28260808b0151613fdc61233189516001600160a01b031690565b90615a38565b995b60608601518084106141d25750613ffd83999899614f55565b60208901975f5b8c8b51821015614111578161401891611e54565b5161402281614f55565b61402c8288611e54565b5161410057614051908d61404a8460a061242a8260c0860151611e54565b5191615355565b8061405c8389611e54565b525b61406c61108e838a51611e54565b60408a0161407b848251611e54565b5183116140cd57508d83611b908e6140bf8f968f976140aa866124b6818b60019e9d612493886140c79f6145b9565b526140b9856060880151611e54565b51612284565b905190610b28565b01614004565b916140dc846110c49451611e54565b516323b6a17960e21b5f526001600160a01b03909216600452602452604452606490565b5061410b8187611e54565b5161405e565b50509396945096509650966141319061254885516001600160a01b031690565b7fa26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca87161416384516001600160a01b031690565b9261418489602087019561417e87516001600160a01b031690565b90615a7f565b6141aa61233161419e6125ee88516001600160a01b031690565b94519661108e88613dcd565b926126306001600160a01b03926141c088613dcd565b88846040519586951698169684612291565b638d261d5d60e01b5f52600484905260245260445ffd5b600387516141f681613dcd565b6141ff81613dcd565b036142215761420e8851615a1c565b6142188151611e22565b945f9199613fe4565b976001875161422f81613dcd565b61423881613dcd565b036142a0576142478851614aec565b614298896142598460408801516157d1565b60808a01519061427361233188516001600160a01b031690565b61427d8c51614b64565b91614292610d258a516001600160a01b031690565b936157ec565b959091613fe4565b9793600287516142af81613dcd565b6142b881613dcd565b03614324579787986142ca8951614aec565b6060850151916142d987614b07565b61431e61431460408b0192808452898b9f8860808201519361430e610d2561277961277261233188516001600160a01b031690565b94615706565b9092519099611e54565b52613fe4565b506004865161433281613dcd565b61433b81613dcd565b036143e35761434a87516156ea565b5f614362610d25610d2586516001600160a01b031690565b60608501519060808a0151918360a0880151986143966040519a8b968795869463e4c4366360e01b86523360048701613f2d565b03925af193841561020a575f905f955f915f916143b8575b5090959199613fe4565b925050506143d99194503d805f833e6143d181836102cd565b810190613ee3565b919592915f6143ae565b636c02b39560e01b5f5260045ffd5b969261042f9896946144489361442c61443a936129b69995610100938d6001600160a01b0380931690521660208d015260408c0190613dd7565b8060608b0152890190610432565b908782036080890152610432565b9160a086015284820360c0860152610432565b949391959296908451614474906001600160a01b031690565b60808601519161448383613dcd565b608086015160a0880151906040968c6040519c8d9788976325da41f360e21b895260048901976144b2986143f2565b03916001600160a01b031691815a5f948591f194851561020a575f905f9661459a575b5015801561458e575b61457f576001809460091c16156144fe57909192809495505f905b614506575b505050505090565b855181101561457a576145198187611e54565b5182850190614529838351611e54565b511061453857508401846144f9565b869061455683612ac081612aba61108e6110c49860208c0151611e54565b5163677d1d7d60e11b5f526001600160a01b03909216600452602452604452606490565b6144fe565b63e124916560e01b5f5260045ffd5b508451865114156144de565b90506145b19195503d805f833e612b2381836102cd565b94905f6144d5565b6145c56100fc92614618565b90614654565b905f5b82518110156145fc576001600160a01b03806145ea8386611e54565b511690831614613570576001016145ce565b6001600160a01b038263ddef98d760e01b5f521660045260245ffd5b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116146425790565b63123baf0360e11b5f5260045260245ffd5b8115614711576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000009116805f528160205261469b60405f205c9384613653565b92836146df57505f197f0000000000000000000000000000000000000000000000000000000000000000805c918201918211610941575d5b5f5260205260405f205d565b6146d35761470c7f0000000000000000000000000000000000000000000000000000000000000000613d31565b6146d3565b5050565b6001600160a01b0392918381168484160361473357505050505f1990565b61475d9361159e92165f52601060205260405f20906001600160a01b03165f5260205260405f2090565b5490565b90604051918281549182825260209260208301915f5260205f20935f905b828210614795575050506100fc925003836102cd565b85546001600160a01b03168452600195860195889550938101939091019061477f565b906147c28261033d565b6147cf60405191826102cd565b82815280926147e0601f199161033d565b01905f5b8281106147f057505050565b6020906147fb612105565b828285010152016147e4565b90604051614814816102b1565b604060ff82945481811661482781610ef4565b84526001600160a01b038160081c16602085015260a81c161515910152565b60608101805151935f5b85811061485f57505050505050565b8061487361108e6001936020880151611e54565b6148956148888389905f5260205260405f2090565b546001600160801b031690565b6148a0838751611e54565b5181116148e7575b50506148ce6148b8828651611e54565b516148c7836080890151611e54565b5190615369565b6148e08288905f5260205260405f2090565b5501614850565b61493261494a9161492c61492361490f868a906001600160a01b03165f5260205260405f2090565b549261491c888c51611e54565b5190610b28565b8260801c612284565b90615cc4565b9185906001600160a01b03165f5260205260405f2090565b555f806148a8565b81148015929190614966575b5050611e1357565b141590505f8061495e565b90670de0b6b3a76400009182810292818404149015171561094157565b8181029291811591840414171561094157565b80516149ac81610ef4565b6149b581610ef4565b806149c8575050670de0b6b3a764000090565b806149d4600192610ef4565b03614a315760206149f3610d258260049401516001600160a01b031690565b6040516333cd77e760e11b815292839182905afa90811561020a575f91614a18575090565b61042f915060203d602011610203576101f581836102cd565b636fa2831960e11b5f5260045ffd5b91906080670de0b6b3a7640000614a84612bc79480614a638660608a0151611e54565b52612ddb614a758660c08a0151611e54565b51611ed38760a08b0151611e54565b04930151611e54565b91906080614ac8612bc79380614aa7856060890151611e54565b52611eda614ab98560c0890151611e54565b51611ed38660a08a0151611e54565b930151611e54565b60061c60011615614add57565b63033c2a5760e61b5f5260045ffd5b60041c600116614af857565b63353d5de760e21b5f5260045ffd5b80519081905f5b828110614b30575050811015614b215790565b631f91af7760e21b5f5260045ffd5b614b3a8183611e54565b51614b48575b600101614b0e565b928203614b555782614b40565b636b8c3be560e01b5f5260045ffd5b62ffffff9060121c1664174876e800908181029181830414901517156109415790565b91906020614b9e5f92604086526040860190610432565b930152565b91906020614b9e600192604086526040860190610432565b9094929192815194614bcc86611e22565b945f5b878110614d9c5750614be5906126de8988611e54565b614bef8887611e54565b5260405194631309bd3d60e31b9283875260208780614c118860048301614b87565b03816001600160a01b0385165afa96871561020a575f97614d7b575b506040519484865260208680614c468660048301614b87565b03816001600160a01b0386165afa93841561020a57613849614ca88c61491c614ca1614cbe96614c9a8f614c8a614cf49f9160209e88935f91614d5c575b506152f5565b92614c95848d615cd7565b611e54565b5190614f33565b9188611e54565b91670de0b6b3a7640000818103911002826152f5565b93614ccd856126de8c86611e54565b614cd78b85611e54565b526001600160a01b03604051809781958294835260048301614ba3565b0392165afa90811561020a57614d3095614d2a935f93614d33575b50614d1c614d2391611e22565b9788611e54565b5283610b28565b90615335565b91565b614d23919350614d54614d1c9160203d602011610203576101f581836102cd565b939150614d0f565b6020614d7592503d602011610203576101f581836102cd565b5f614c84565b614d9591975060203d602011610203576101f581836102cd565b955f614c2d565b80614db2614dac60019388611e54565b51610b1a565b614dbc828a611e54565b5201614bcf565b614ddb60409295949395606083526060830190610432565b9460208201520152565b909491830391838311610941576020614e316001600160a01b0392614e0a87876152f5565b614e148183615cd7565b60405194858094819362b5059f60e51b83528d8a60048501614dc3565b0392165afa801561020a57614d3095611eda88614e7c93614e8598614e8c965f92614e92575b50614e6a826126de61384994958b611e54565b98614e758d8a611e54565b5190615335565b93849251611e22565b9586611e54565b52610b28565b61384992506126de93614eb6614e6a9260203d602011610203576101f581836102cd565b93509350614e57565b634e487b7160e01b5f52601260045260245ffd5b8115614edd570490565b614ebf565b909291614eef8251611e22565b915f5b8151811015614f2c57614f0f83614f098385611e54565b5161498e565b908615614edd578660019204614f258287611e54565b5201614ef2565b5050509150565b90614f3d9161498e565b6001670de0b6b3a76400005f19830104019015150290565b80614f5d5750565b6100fc906152be565b91614f709161498e565b90670de0b6b3a764000090818102918183041490151715610941578115614edd570490565b91949290945f955f9581614faa575050505050565b849750612433614fc38260c0614fcf9697980151611e54565b519160a08a0151611e54565b945160018160031c1615614fe5575b808061154d565b62ffffff91929450602a1c1664174876e800908181029181830414901517156109415761501b670de0b6b3a7640000918661498e565b0492848411615088578061159e61506761504d61507f9461159e876001600160a01b03165f52600660205260405f2090565b54615061886001600160801b038316612284565b90615d5c565b936001600160a01b03165f52600660205260405f2090565b555f8080614fde565b634c69ac5d60e01b5f5260045ffd5b6001600160a01b0390929192165f52602060056020526040805f205f5b606086015180518210156150f157906150e16150d282600194611e54565b516148c78360808b0151611e54565b815f52838652845f2055016150b4565b50505050509050565b3215806151045790565b506001600754161590565b9032615152576001600160a01b0361514392165f52600f60205260405f20906001600160a01b03165f5260205260405f2090565b80549182018092116109415755565b6333fc255960e11b5f5260045ffd5b90916001600160a01b0380841692831561181b576151948561159e836001600160a01b03165f52600f60205260405f2090565b54808411615276578390036151be8661159e846001600160a01b03165f52600f60205260405f2090565b556151e4836151de836001600160a01b03165f52601160205260405f2090565b54610b28565b6151ed81615d6a565b615208826001600160a01b03165f52601160205260405f2090565b551690813b156100ed576040516323de665160e01b81526001600160a01b0390941660048501525f6024850181905260448501829052937fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f916152719186818060648101611619565b0390a4565b63391434e360e21b5f526001600160a01b038616600452602452604483905260645ffd5b670de0b6b3a76400008082040281036152b05790565b600181018091116109415790565b7f0000000000000000000000000000000000000000000000000000000000000000116152e657565b6303da9a2360e31b5f5260045ffd5b90801561532657670de0b6b3a764000091828102928184041490151715610941576001905f19830104019015150290565b630a0c22c760e01b5f5260045ffd5b8215615326576001916153479161498e565b915f19830104019015150290565b9061042f926153639161498e565b906152f5565b906001600160801b038083119081156153a1575b506153925760801b9081018091116109415790565b6389560ca160e01b5f5260045ffd5b905081115f61537d565b906153b88260801c614618565b906001600160801b035f9316806153dc575b50506002916153d89161363b565b0590565b6001600160a01b0393509060246020926040519586938492630a28a47760e01b84526004840152165afa90811561020a576154246153d8926002945f9161542d575b50614618565b928192506153ca565b615446915060203d602011610203576101f581836102cd565b5f61541e565b5f81126154565790565b635467221960e11b5f5260045260245ffd5b60405163095ea7b360e01b602082018181526001600160a01b03851660248401525f6044840152909391929183606481015b03916154ae601f19938481018752866102cd565b5f806001600160a01b0386169287519082855af1906154cb61569d565b82615538575b508161552d575b50156154e5575050505050565b60405160208101959095526001600160a01b031660248501525f604485015260649081018452615523936109179161551d90826102cd565b82615b9b565b5f8080808061154d565b90503b15155f6154d8565b80519192508115918215615550575b5050905f6154d1565b6155639250602080918301019101611f07565b5f80615547565b60405163095ea7b360e01b602082018181526001600160a01b03851660248401526044830195909552939092836064810161549a565b906155b36001600160801b038316614618565b905f9260801c806155cc5750506002916153d89161363b565b6001600160a01b039350906024602092604051958693849263b3d7f6b960e01b84526004840152165afa90811561020a576154246153d8926002945f9161542d5750614618565b9291906001600160a01b038085165f52600860205260405f20549283039283116109415781165f52600860205260405f2054928301809311610941576100fc93615d89565b9291906001600160a01b038085165f52600860205260405f20549283018093116109415781165f52600860205260405f2054928303928311610941576100fc93615d89565b3d156156c7573d906156ae826103c2565b916156bc60405193846102cd565b82523d5f602084013e565b606090565b5f8061042f9360208151910182855af16156e461569d565b91615ec0565b60051c600116156156f757565b63121db02f60e21b5f5260045ffd5b9094916020615735615720866001600160a01b0394612284565b9461572b87876152f5565b614e148183615f1a565b0392165afa801561020a57614d3095613849614ca885614e7c94614e85998c998a615794995f9461579a575b509061578861578161577a61578f946124d69798611e54565b5187610b28565b9c8c611e54565b519061498e565b614ed3565b52612284565b6124d6945061578161577a61578f94936157c56157889460203d602011610203576101f581836102cd565b97509394505050615761565b9060208083516157e2845182611e0c565b60051b930191015e565b9291909383516157fb81611e22565b9161580582611e22565b965f5b8381106159e15750506001600160a01b0381169160405195631309bd3d60e31b9283885260209889898061583f8460048301614b87565b0381895afa98891561020a575f996159c2575b506040518581528a81806158698b60048301614ba3565b03818a5afa90811561020a578a61578f6158a49361589d938f5f926159a5575b9b999d9c9a98979695949392919050614971565b8093615f1a565b5f5b89811061591357505050506158ca9550604051809681948293835260048301614ba3565b03915afa91821561020a578361578f936158f092614d30975f926158f6575b5050610b28565b9061498e565b61590c9250803d10610203576101f581836102cd565b5f806158e9565b869899959750838d83949596988361593761593082600198611e54565b5189615d49565b806159428385611e54565b511161595e575b505050505001908a96949897959392916158a6565b818361597f61599097615989946159788561491c99611e54565b5103614f33565b611af98388611e54565b5192611e54565b61599a828b611e54565b52848d8a835f615949565b6159bb9250803d10610203576101f581836102cd565b5f8f615889565b6159da9199508a3d8c11610203576101f581836102cd565b975f615852565b80615a0b615a066159f46001948c611e54565b516159ff8487611e54565b5190612284565b610b1a565b615a158288611e54565b5201615808565b60071c60011615615a2957565b63efe0265d60e01b5f5260045ffd5b9291615a448451611e22565b935f5b8151811015615a795780615a688585615a6260019587611e54565b51615335565b615a728289611e54565b5201615a47565b50505050565b916001600160a01b03808316938415615b7f57615ab783615ab1836001600160a01b03165f52601160205260405f2090565b54612284565b615ad68561159e846001600160a01b03165f52600f60205260405f2090565b848154019055615ae581615d6a565b615b00826001600160a01b03165f52601160205260405f2090565b5516925f847fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f60405180615b3987829190602083019252565b0390a4823b156100ed576040516323de665160e01b81525f600482018190526001600160a01b0390931660248201526044810191909152918290818381606481016117bd565b63ec442f0560e01b5f526001600160a01b03841660045260245ffd5b6001600160a01b03615baf911691826156cc565b8051908115159182615bd7575b5050615bc55750565b635274afe760e01b5f5260045260245ffd5b615bea9250602080918301019101611f07565b155f80615bbc565b9064ffffffffff615c0282611e22565b92605a1c165f5b828110615c165750505090565b60058082029082820414821517156109415782601f911c1690604d821161094157600191600a0a615c478287611e54565b5201615c09565b62ffffff9060421c1664174876e800908181029181830414901517156109415790565b9093925f94615c84846080850151611e54565b51818111615c93575050505050565b615cb995965091615ca8916124339303614f33565b9260a061242a8260c0860151611e54565b905f8080808061154d565b906001600160801b0361042f9216615369565b9060206001600160a01b0392600460405180958193635b3bfd2b60e11b8352165afa91821561020a575f92615d28575b50818110615d13575050565b63718e4adf60e11b5f5260045260245260445ffd5b615d4291925060203d602011610203576101f581836102cd565b905f615d07565b670de0b6b3a764000091612de09161498e565b9061042f9160801c90615369565b620f42408110615d775750565b6334e3483f60e21b5f5260045260245ffd5b6040516370a0823160e01b808252306004830152602095939490926001600160a01b03929187836024818786165afa92831561020a575f93615ea1575b50808310615e7a5750615dea906001600160a01b03165f52600860205260405f2090565b556040519182523060048301528316908481602481855afa94851561020a575f95615e5b575b5050818410615e39575050615e36906001600160a01b03165f52600860205260405f2090565b55565b631149424d60e01b5f526001600160a01b03166004526024525060445260645ffd5b615e72929550803d10610203576101f581836102cd565b925f80615e10565b631c6a537560e01b5f9081529387166001600160a01b031660045260245250604452606490fd5b615eb9919350883d8a11610203576101f581836102cd565b915f615dc6565b90615ee45750805115615ed557805190602001fd5b630a12f52160e11b5f5260045ffd5b81511580615f11575b615ef5575090565b6001600160a01b0390639996b31560e01b5f521660045260245ffd5b50803b15615eed565b9060206001600160a01b039260046040518095819363273c1adf60e01b8352165afa91821561020a575f92615f6b575b50818111615f56575050565b630fa2583760e21b5f5260045260245260445ffd5b615f8591925060203d602011610203576101f581836102cd565b905f615f4a565b91909163ffffffff808094169116019182116109415756fea26469706673582212206683429dd8621233bf9dfafe00f40360d4204093d879bd8a2517bc175dc511eb64736f6c634300081a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x18 JUMPI JUMPDEST CALLDATASIZE PUSH2 0x1430 JUMPI PUSH2 0x1421 JUMP JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x15AFD409 EQ PUSH2 0xD7 JUMPI DUP1 PUSH4 0x15DACBEA EQ PUSH2 0xD2 JUMPI DUP1 PUSH4 0x21457897 EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x2BFB780C EQ PUSH2 0xC8 JUMPI DUP1 PUSH4 0x43583BE5 EQ PUSH2 0xC3 JUMPI DUP1 PUSH4 0x48C89491 EQ PUSH2 0xBE JUMPI DUP1 PUSH4 0x4AF29EC4 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0xAE639329 EQ PUSH2 0xB4 JUMPI DUP1 PUSH4 0xB9A8EFFA EQ PUSH2 0xAF JUMPI DUP1 PUSH4 0xBEABACC8 EQ PUSH2 0xAA JUMPI DUP1 PUSH4 0xC9C1661B EQ PUSH2 0xA5 JUMPI PUSH4 0xD2C725E0 SUB PUSH2 0xE JUMPI PUSH2 0xAAE JUMP JUMPDEST PUSH2 0x9C9 JUMP JUMPDEST PUSH2 0x993 JUMP JUMPDEST PUSH2 0x950 JUMP JUMPDEST PUSH2 0x866 JUMP JUMPDEST PUSH2 0x796 JUMP JUMPDEST PUSH2 0x6FD JUMP JUMPDEST PUSH2 0x671 JUMP JUMPDEST PUSH2 0x599 JUMP JUMPDEST PUSH2 0x4B4 JUMP JUMPDEST PUSH2 0x20F JUMP JUMPDEST PUSH2 0xFE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SUB PUSH2 0xED JUMPI JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLDATALOAD SWAP1 PUSH2 0xFC DUP3 PUSH2 0xDC JUMP JUMPDEST JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x11B DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x126 PUSH2 0x147A JUMP JUMPDEST PUSH2 0x12E PUSH2 0x14DB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP2 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP5 SWAP3 DUP3 SWAP1 PUSH1 0x24 SWAP1 DUP3 SWAP1 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x20A JUMPI PUSH2 0x1CD SWAP5 PUSH2 0x1A1 SWAP3 PUSH0 SWAP2 PUSH2 0x1DB JUMPI JUMPDEST POP DUP1 PUSH2 0x19B DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0xB28 JUMP JUMPDEST SWAP2 DUP1 DUP4 GT PUSH2 0x1D1 JUMPI JUMPDEST POP DUP2 PUSH2 0x1B5 SWAP2 PUSH2 0x1513 JUMP JUMPDEST PUSH2 0x1BD PUSH2 0x14B6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST SWAP2 POP PUSH2 0x1B5 PUSH2 0x1AA JUMP JUMPDEST PUSH2 0x1FD SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI JUMPDEST PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xAEC JUMP JUMPDEST PUSH0 PUSH2 0x17E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1EB JUMP JUMPDEST PUSH2 0xAFB JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x80 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xED JUMPI PUSH2 0x25D PUSH1 0x4 CALLDATALOAD PUSH2 0x22F DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x23B DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH2 0x248 DUP3 PUSH2 0xDC JUMP JUMPDEST PUSH2 0x257 PUSH1 0x64 CALLDATALOAD DUP1 SWAP5 DUP4 CALLER PUSH2 0x1535 JUMP JUMPDEST CALLER PUSH2 0x16B5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x290 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x268 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x290 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x290 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F DUP1 NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x290 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0xC0 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x290 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0xFC DUP3 PUSH2 0x295 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x180 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x290 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x290 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xED JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x36F DUP2 PUSH2 0x33D JUMP JUMPDEST SWAP4 PUSH2 0x37D PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2CD JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xED JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x3A6 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x398 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x4 DUP3 LT ISZERO PUSH2 0xED JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x290 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x3EA DUP3 PUSH2 0x3C2 JUMP JUMPDEST SWAP2 PUSH2 0x3F8 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x2CD JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0xED JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xED JUMPI DUP2 PUSH1 0x20 PUSH2 0x42F SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x3DE JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x451 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x443 JUMP JUMPDEST DUP1 MLOAD DUP1 DUP4 MSTORE PUSH1 0x20 SWAP3 SWAP2 DUP2 SWAP1 DUP5 ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND ADD ADD SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x4A6 SWAP1 PUSH2 0x42F SWAP5 SWAP3 DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x3 NOT PUSH1 0x20 CALLDATASIZE DUP3 ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 GT PUSH2 0xED JUMPI PUSH1 0xC0 SWAP1 DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0xED JUMPI PUSH2 0x4EE PUSH2 0x2EF JUMP JUMPDEST PUSH2 0x4FA DUP3 PUSH1 0x4 ADD PUSH2 0xF1 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x508 PUSH1 0x24 DUP4 ADD PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x44 DUP3 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x64 DUP3 ADD CALLDATALOAD DUP4 DUP2 GT PUSH2 0xED JUMPI PUSH2 0x533 SWAP1 PUSH1 0x4 CALLDATASIZE SWAP2 DUP6 ADD ADD PUSH2 0x355 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x544 PUSH1 0x84 DUP4 ADD PUSH2 0x3B5 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA4 DUP3 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0xED JUMPI PUSH2 0x56B PUSH2 0x575 SWAP3 PUSH1 0x4 PUSH2 0x1CD SWAP6 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x414 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xB35 JUMP JUMPDEST PUSH1 0x40 SWAP4 SWAP2 SWAP4 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x489 JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0xED JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH2 0xFC DUP3 PUSH2 0x584 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x3 NOT PUSH1 0x20 CALLDATASIZE DUP3 ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 GT PUSH2 0xED JUMPI PUSH1 0xE0 SWAP1 DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0xED JUMPI PUSH2 0x5D3 PUSH2 0x30F JUMP JUMPDEST PUSH2 0x5DF DUP3 PUSH1 0x4 ADD PUSH2 0x58E JUMP JUMPDEST DUP2 MSTORE PUSH2 0x5ED PUSH1 0x24 DUP4 ADD PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x5FE PUSH1 0x44 DUP4 ADD PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x60F PUSH1 0x64 DUP4 ADD PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x84 DUP3 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA4 DUP3 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC4 DUP3 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0xED JUMPI PUSH2 0x64A PUSH2 0x654 SWAP3 PUSH1 0x4 PUSH2 0x1CD SWAP6 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x414 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0xCBF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x60 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0xA0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x290 JUMPI PUSH2 0x1CD SWAP2 PUSH2 0x654 SWAP2 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATALOAD PUSH2 0x6B3 DUP2 PUSH2 0x584 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x24 CALLDATALOAD PUSH2 0x6C1 DUP2 PUSH2 0x584 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH2 0x6D2 DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0xF03 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x42F SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xED JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0xED JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0xED JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0xED JUMPI CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0xED JUMPI PUSH2 0x1CD SWAP2 PUSH1 0x24 PUSH2 0x754 SWAP3 ADD PUSH2 0x11C9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x6EC JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xED JUMPI JUMP JUMPDEST PUSH2 0x783 PUSH2 0x42F SWAP5 SWAP3 PUSH1 0x60 DUP4 MSTORE PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x3 NOT PUSH1 0x20 CALLDATASIZE DUP3 ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 GT PUSH2 0xED JUMPI PUSH1 0xC0 SWAP1 DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0xED JUMPI PUSH2 0x7D0 PUSH2 0x2EF JUMP JUMPDEST PUSH2 0x7DC DUP3 PUSH1 0x4 ADD PUSH2 0xF1 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x7EA PUSH1 0x24 DUP4 ADD PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x44 DUP3 ADD CALLDATALOAD DUP4 DUP2 GT PUSH2 0xED JUMPI PUSH2 0x80B SWAP1 PUSH1 0x4 CALLDATASIZE SWAP2 DUP6 ADD ADD PUSH2 0x355 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x64 DUP3 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x826 PUSH1 0x84 DUP4 ADD PUSH2 0x760 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA4 DUP3 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0xED JUMPI PUSH2 0x84D PUSH2 0x857 SWAP3 PUSH1 0x4 PUSH2 0x1CD SWAP6 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x414 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x127D JUMP JUMPDEST PUSH1 0x40 SWAP4 SWAP2 SWAP4 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x76D JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x883 DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x890 DUP3 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH2 0x89C PUSH2 0x147A JUMP JUMPDEST PUSH2 0x8A4 PUSH2 0x14DB JUMP JUMPDEST PUSH2 0x8B6 PUSH2 0x8B0 DUP4 PUSH2 0x4618 JUMP JUMPDEST DUP3 PUSH2 0x4654 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP4 DUP4 DUP6 SUB SWAP5 DUP6 GT PUSH2 0x941 JUMPI SWAP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP1 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 MSTORE PUSH2 0x91C SWAP2 SWAP1 PUSH2 0x917 PUSH1 0x64 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH2 0x5B9B JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH2 0xB06 JUMP JUMPDEST PUSH0 SWAP2 SUB SLT PUSH2 0xED JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xED JUMPI PUSH2 0x25D PUSH1 0x4 CALLDATALOAD PUSH2 0x9B3 DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x9BF DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 CALLER PUSH2 0x16B5 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x9E6 DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x9F3 DUP3 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP2 DUP3 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 SWAP3 PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0xA9C JUMPI PUSH0 SWAP4 SWAP3 SWAP4 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH1 0x20 DUP7 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP6 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP3 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xA6F JUMPI DUP7 PUSH2 0xA5C DUP8 PUSH2 0xA56 DUP4 DUP13 SUB DUP5 PUSH2 0x2CD JUMP JUMPDEST DUP3 PUSH2 0x45CB JUMP JUMPDEST SWAP1 MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST SWAP1 SWAP2 SWAP3 DUP1 PUSH2 0xA90 DUP7 SWAP10 DUP5 DUP4 SWAP9 SLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP3 AND DUP2 MSTORE ADD SWAP1 JUMP JUMPDEST SWAP9 ADD SWAP5 SWAP4 SWAP3 ADD SWAP1 PUSH2 0xA3E JUMP JUMPDEST PUSH4 0x27946F57 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xED JUMPI MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 NOT DUP2 ADD SWAP2 SWAP1 DUP3 GT PUSH2 0x941 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x941 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0xB3E PUSH2 0x14DB JUMP JUMPDEST PUSH2 0xB51 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 MLOAD AND PUSH2 0x1837 JUMP JUMPDEST PUSH2 0xB6A PUSH2 0xB65 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x186B JUMP JUMPDEST PUSH2 0xB83 PUSH2 0xB7E DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1961 JUMP JUMPDEST SWAP1 PUSH2 0xBD7 PUSH1 0x20 DUP4 ADD MLOAD MLOAD PUSH2 0xB9E PUSH1 0x60 DUP7 ADD SWAP2 DUP3 MLOAD MLOAD SWAP1 PUSH2 0x1E0C JUMP JUMPDEST DUP1 MLOAD PUSH1 0xC0 DUP6 ADD SWAP1 PUSH2 0xBB8 DUP3 MLOAD SWAP2 PUSH1 0xA0 DUP9 ADD SWAP3 DUP4 MLOAD SWAP2 PUSH2 0x1E7C JUMP JUMPDEST SWAP3 PUSH2 0xBC8 DUP8 MLOAD PUSH1 0x1 SWAP1 PUSH1 0x10 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0xC50 JUMPI JUMPDEST POP POP POP DUP5 DUP5 PUSH2 0x22BC JUMP JUMPDEST SWAP5 SWAP1 SWAP2 SWAP6 DUP7 PUSH2 0xBEB DUP4 MLOAD PUSH1 0x1 SWAP1 PUSH1 0x11 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0xBF9 JUMPI JUMPDEST POP POP POP POP SWAP3 SWAP2 SWAP1 JUMP JUMPDEST DUP5 SWAP8 POP SWAP4 PUSH2 0xC46 SWAP5 PUSH2 0xC3C PUSH2 0xC2F PUSH2 0xC18 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 DUP5 MLOAD CALLER SWAP1 PUSH2 0x29C4 JUMP JUMPDEST SWAP3 PUSH0 DUP1 DUP1 DUP1 PUSH2 0xBF0 JUMP JUMPDEST PUSH2 0xC78 PUSH2 0xCB7 SWAP5 DUP9 DUP11 PUSH2 0xC70 PUSH2 0xC2F PUSH2 0xC18 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 CALLER SWAP1 PUSH2 0x1F8B JUMP JUMPDEST PUSH2 0xCAC PUSH2 0xCA6 PUSH2 0xC8F DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP9 PUSH2 0x2043 JUMP JUMPDEST MLOAD SWAP2 MLOAD SWAP1 MLOAD SWAP2 PUSH2 0x1E7C JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0xBCD JUMP JUMPDEST SWAP1 PUSH2 0xCC8 PUSH2 0x14DB JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xCE1 DUP2 DUP5 MLOAD AND PUSH2 0x1837 JUMP JUMPDEST PUSH2 0xCF5 PUSH2 0xB65 DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD ISZERO PUSH2 0xED1 JUMPI PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0xD31 PUSH2 0xD25 PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP2 AND EQ PUSH2 0xEC2 JUMPI PUSH2 0xD4C PUSH2 0xB7E DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 PUSH2 0xD57 DUP5 DUP3 PUSH2 0x2B33 JUMP JUMPDEST SWAP1 PUSH2 0xD63 DUP6 DUP4 DUP4 PUSH2 0x2BCA JUMP JUMPDEST DUP6 MLOAD PUSH1 0xC SHR PUSH1 0x1 AND PUSH2 0xE47 JUMPI JUMPDEST DUP6 MLOAD PUSH2 0xD8A SWAP2 SWAP1 PUSH1 0xB SHR PUSH1 0x1 AND PUSH2 0xE06 JUMPI JUMPDEST DUP7 DUP5 DUP5 PUSH2 0x2F05 JUMP JUMPDEST SWAP8 SWAP2 SWAP8 SWAP5 SWAP1 SWAP8 DUP4 SWAP8 PUSH2 0xDA1 DUP5 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xD SHR AND SWAP1 JUMP JUMPDEST PUSH2 0xDD1 JUMPI JUMPDEST POP POP POP POP POP MLOAD PUSH2 0xDB5 DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0xDBE DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0xDC9 JUMPI POP DUP2 SWAP3 SWAP2 SWAP1 JUMP JUMPDEST SWAP2 DUP1 SWAP4 POP SWAP2 SWAP1 JUMP JUMPDEST DUP6 SWAP9 POP SWAP1 PUSH2 0xDF0 PUSH2 0xC2F PUSH2 0xC18 PUSH2 0xDFB SWAP9 SWAP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 DUP5 MLOAD SWAP2 CALLER SWAP3 PUSH2 0x338A JUMP JUMPDEST SWAP3 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0xDA6 JUMP JUMPDEST DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xE40 PUSH1 0x60 DUP7 ADD SWAP2 DUP3 MLOAD PUSH2 0xE39 PUSH2 0xC2F DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 DUP6 PUSH2 0x2E43 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0xD82 JUMP JUMPDEST PUSH2 0xE80 SWAP1 PUSH2 0xE5C DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0xE7A PUSH2 0xC2F DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x2D01 JUMP JUMPDEST PUSH2 0xE9D PUSH2 0xE97 PUSH2 0xC8F DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP7 PUSH2 0x2043 JUMP JUMPDEST PUSH2 0xEA8 DUP3 DUP7 DUP4 PUSH2 0x2D88 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xD8A PUSH2 0xEBB DUP7 DUP5 DUP5 PUSH2 0x2BCA JUMP JUMPDEST SWAP1 POP PUSH2 0xD70 JUMP JUMPDEST PUSH4 0xA54B181D PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x57A456B7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0xEFE JUMPI JUMP JUMPDEST PUSH2 0xEE0 JUMP JUMPDEST PUSH2 0xF0B PUSH2 0x14DB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x7 SLOAD PUSH1 0x2 SHR AND PUSH2 0x11A5 JUMPI PUSH1 0x40 DUP2 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP2 MLOAD AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x1192 JUMPI PUSH1 0x4 SWAP5 POP PUSH2 0xF4B PUSH2 0x147A JUMP JUMPDEST PUSH1 0x20 PUSH2 0xF61 PUSH2 0xD25 DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x38D52E0F PUSH1 0xE0 SHL DUP2 MSTORE SWAP7 DUP8 SWAP2 DUP3 SWAP1 GAS STATICCALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH1 0x80 SWAP6 PUSH0 SWAP2 PUSH2 0x1163 JUMPI JUMPDEST POP AND PUSH2 0xFA1 DUP2 PUSH2 0xF9C DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x35B8 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0xFBD PUSH1 0x60 DUP7 ADD SWAP3 DUP4 MLOAD SWAP1 PUSH2 0x35F5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0xFCD DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0xFD6 DUP2 PUSH2 0xEF4 JUMP JUMPDEST SUB PUSH2 0x10F8 JUMPI PUSH2 0xFFE SWAP2 DUP6 MLOAD SWAP2 PUSH2 0xFEB DUP4 PUSH2 0xEF4 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 MLOAD SWAP3 PUSH2 0x3A34 JUMP JUMPDEST PUSH32 0xEEB740C90BF2B18C9532EB7D473137767036D893DFF3E009F32718F821B2A4C0 DUP3 SWAP7 SWAP3 SWAP8 SWAP4 SWAP8 SWAP7 DUP9 PUSH2 0x105C PUSH2 0x103E PUSH2 0xD25 DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 PUSH1 0x60 DUP3 ADD SWAP6 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 JUMPDEST DUP1 MLOAD PUSH2 0x106B DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x1074 DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x10C7 JUMPI ADD MLOAD DUP1 DUP5 LT PUSH2 0x10AD JUMPI POP PUSH2 0x10A0 PUSH2 0x109B SWAP2 DUP5 SWAP3 DUP4 SWAP2 JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x35F5 JUMP JUMPDEST PUSH2 0x10A8 PUSH2 0x14B6 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 JUMP JUMPDEST PUSH4 0xE2EA151B PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 DUP5 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH0 REVERT JUMPDEST ADD MLOAD DUP1 DUP6 GT PUSH2 0x10E1 JUMPI POP PUSH2 0x10A0 PUSH2 0x109B SWAP2 DUP6 SWAP3 DUP4 SWAP2 PUSH2 0x108E JUMP JUMPDEST PUSH4 0xE2EA151B PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 DUP6 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x111B SWAP2 DUP6 MLOAD SWAP2 PUSH2 0x1108 DUP4 PUSH2 0xEF4 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 MLOAD SWAP3 PUSH2 0x366E JUMP JUMPDEST PUSH32 0x3771D13C67011E31E12031C54BB59B0BF544A80B81D280A3711E172AA8B7F47B DUP3 SWAP7 SWAP3 SWAP8 SWAP4 SWAP8 SWAP7 DUP9 PUSH2 0x115B PUSH2 0x103E PUSH2 0xD25 DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 PUSH2 0x1060 JUMP JUMPDEST PUSH2 0x1185 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x118B JUMPI JUMPDEST PUSH2 0x117D DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x11B4 JUMP JUMPDEST PUSH0 PUSH2 0xF85 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1173 JUMP JUMPDEST DUP5 PUSH4 0x85F41299 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0xF27DF09 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xED JUMPI MLOAD PUSH2 0x42F DUP2 PUSH2 0xDC JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH2 0x120B PUSH2 0x1205 PUSH32 0x0 SWAP3 DUP4 TLOAD ISZERO SWAP6 DUP7 PUSH2 0x1274 JUMPI JUMPDEST CALLDATASIZE SWAP2 PUSH2 0x3DE JUMP JUMPDEST CALLER PUSH2 0x56CC JUMP JUMPDEST SWAP3 PUSH2 0x1213 JUMPI POP JUMP JUMPDEST PUSH32 0x0 TLOAD PUSH2 0x1265 JUMPI PUSH0 SWAP1 TSTORE PUSH2 0xFC PUSH32 0x0 PUSH2 0x3D31 JUMP JUMPDEST PUSH4 0x20F1D86D PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 DUP6 TSTORE PUSH2 0x11FE JUMP JUMPDEST SWAP1 PUSH2 0x1286 PUSH2 0x14DB JUMP JUMPDEST PUSH2 0x1299 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 MLOAD AND PUSH2 0x1837 JUMP JUMPDEST PUSH2 0x12AD PUSH2 0xB65 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x130A PUSH32 0x0 TLOAD PUSH2 0x12E3 DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0x3D42 JUMP JUMPDEST PUSH2 0x1323 PUSH2 0x131E DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1BF0 JUMP JUMPDEST SWAP1 PUSH2 0x1377 PUSH1 0x20 DUP4 ADD MLOAD MLOAD PUSH2 0x133E PUSH1 0x40 DUP7 ADD SWAP2 DUP3 MLOAD MLOAD SWAP1 PUSH2 0x1E0C JUMP JUMPDEST DUP1 MLOAD PUSH1 0xC0 DUP6 ADD SWAP1 PUSH2 0x1358 DUP3 MLOAD SWAP2 PUSH1 0xA0 DUP9 ADD SWAP3 DUP4 MLOAD SWAP2 PUSH2 0x3D5B JUMP JUMPDEST SWAP3 PUSH2 0x1368 DUP8 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xE SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x13CA JUMPI JUMPDEST POP POP POP DUP5 DUP5 PUSH2 0x3F6A JUMP JUMPDEST SWAP5 SWAP1 SWAP6 DUP7 DUP5 PUSH2 0x138B DUP5 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xF SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x139A JUMPI JUMPDEST POP POP POP POP POP SWAP3 SWAP2 SWAP1 JUMP JUMPDEST PUSH2 0x13C0 SWAP6 POP PUSH2 0x13B6 PUSH2 0xC2F PUSH2 0xC18 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 DUP5 MLOAD CALLER SWAP1 PUSH2 0x445B JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP7 DUP2 PUSH2 0x1390 JUMP JUMPDEST PUSH2 0x13F1 PUSH2 0x1419 SWAP5 DUP9 DUP11 PUSH2 0x13EA PUSH2 0xC2F PUSH2 0xC18 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 CALLER PUSH2 0x3E39 JUMP JUMPDEST PUSH2 0x140E PUSH2 0x1408 PUSH2 0xC8F DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP9 PUSH2 0x20A7 JUMP JUMPDEST MLOAD SWAP2 MLOAD SWAP1 MLOAD SWAP2 PUSH2 0x3D5B JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x136D JUMP JUMPDEST PUSH4 0x7911C44B PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x1421 JUMPI CALLDATASIZE PUSH0 DUP1 CALLDATACOPY PUSH0 DUP1 CALLDATASIZE DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS DELEGATECALL RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY ISZERO PUSH2 0x1476 JUMPI RETURNDATASIZE PUSH0 RETURN JUMPDEST RETURNDATASIZE PUSH0 REVERT JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x14A7 JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH4 0x3EE5AEB5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE JUMP JUMPDEST PUSH32 0x0 TLOAD ISZERO PUSH2 0x1504 JUMPI JUMP JUMPDEST PUSH4 0x604DD39B PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x151D SWAP1 PUSH2 0x4618 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ PUSH2 0x941 JUMPI PUSH2 0xFC SWAP2 PUSH0 SUB SWAP1 PUSH2 0x4654 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 SWAP2 PUSH2 0x1544 DUP3 DUP5 DUP7 PUSH2 0x4715 JUMP JUMPDEST PUSH1 0x1 DUP2 ADD PUSH2 0x1554 JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 GT PUSH2 0x1693 JUMPI SUB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP2 AND SWAP4 DUP5 ISZERO PUSH2 0x1677 JUMPI DUP1 DUP4 AND SWAP6 DUP7 ISZERO PUSH2 0x165B JUMPI DUP5 PUSH2 0x15B4 DUP6 PUSH2 0x159E DUP7 PUSH2 0x159E DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD0FE57 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0xA0175360A15BCA328BAF7EA85C7B784D58B222A50D0CE760B10DBA336D226A61 SWAP2 PUSH2 0x1635 SWAP2 PUSH0 DUP2 DUP1 PUSH1 0x64 DUP2 ADD JUMPDEST SUB DUP2 DUP4 DUP10 GAS CALL PUSH2 0x1642 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x154D JUMP JUMPDEST DUP1 PUSH2 0x164F PUSH2 0x1655 SWAP3 PUSH2 0x27C JUMP JUMPDEST DUP1 PUSH2 0x946 JUMP JUMPDEST PUSH0 PUSH2 0x1624 JUMP JUMPDEST PUSH4 0x4A1406B1 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0xE602DF05 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 PUSH4 0x7DC7A0D9 PUSH1 0xE1 SHL PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x181B JUMPI DUP1 DUP7 AND SWAP2 DUP3 ISZERO PUSH2 0x17FF JUMPI PUSH2 0x16F5 DUP7 PUSH2 0x159E DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD DUP1 DUP7 GT PUSH2 0x17DB JUMPI DUP6 SWAP1 SUB PUSH2 0x171F DUP8 PUSH2 0x159E DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x173F DUP8 PUSH2 0x159E DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP6 DUP2 SLOAD ADD SWAP1 SSTORE AND SWAP2 DUP3 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F PUSH1 0x40 MLOAD DUP1 PUSH2 0x177C DUP9 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB SWAP1 LOG4 DUP1 EXTCODESIZE ISZERO PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH4 0x23DE6651 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 SWAP1 SWAP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH0 SWAP1 DUP3 SWAP1 DUP2 DUP4 DUP2 PUSH1 0x64 DUP2 ADD JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH2 0x17CE JUMPI POP JUMP JUMPDEST DUP1 PUSH2 0x164F PUSH2 0xFC SWAP3 PUSH2 0x27C JUMP JUMPDEST PUSH4 0x391434E3 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP6 SWAP1 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH4 0xEC442F05 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x4B637E8F PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 SHR AND ISZERO PUSH2 0x1859 JUMPI POP JUMP JUMPDEST PUSH4 0x4BDACE13 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP1 PUSH32 0x0 AND TIMESTAMP GT ISZERO DUP1 PUSH2 0x1953 JUMPI JUMPDEST PUSH2 0x1944 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x2 SHR AND SWAP1 PUSH2 0x18C6 PUSH1 0x5A SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x28 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x941 JUMPI DUP3 PUSH2 0x18FE JUMPI JUMPDEST POP POP SWAP1 POP PUSH2 0x18E3 JUMPI POP JUMP JUMPDEST PUSH4 0xD971F597 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x1930 SWAP3 POP PUSH2 0x1939 SWAP4 PUSH32 0x0 SWAP3 SHR AND PUSH2 0x5F8C JUMP JUMPDEST PUSH4 0xFFFFFFFF AND SWAP1 JUMP JUMPDEST TIMESTAMP GT ISZERO DUP1 PUSH0 DUP1 PUSH2 0x18D8 JUMP JUMPDEST PUSH4 0x36A7E2CD PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD DUP2 SHR AND PUSH2 0x189C JUMP JUMPDEST PUSH1 0x40 SWAP1 DUP2 MLOAD SWAP2 PUSH2 0x1970 DUP4 PUSH2 0x295 JUMP JUMPDEST PUSH0 DUP4 MSTORE DUP3 PUSH1 0x20 DUP2 ADD SWAP2 PUSH1 0x60 DUP1 DUP5 MSTORE DUP2 DUP4 ADD SWAP1 DUP1 DUP3 MSTORE DUP1 DUP5 ADD SWAP1 DUP1 DUP3 MSTORE PUSH1 0x80 SWAP4 PUSH1 0x80 DUP7 ADD DUP3 DUP2 MSTORE PUSH1 0xA0 DUP8 ADD DUP4 DUP2 MSTORE PUSH1 0xC0 DUP9 ADD SWAP4 DUP5 MSTORE PUSH2 0x19AC PUSH2 0x147A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP4 PUSH0 PUSH1 0x20 MSTORE DUP4 PUSH0 KECCAK256 SLOAD SWAP3 PUSH1 0x4 PUSH1 0x20 MSTORE PUSH2 0x19E8 DUP6 PUSH0 KECCAK256 SWAP5 PUSH1 0x3 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SWAP1 DUP2 SLOAD SWAP13 MSTORE PUSH2 0x4761 JUMP JUMPDEST DUP12 MSTORE PUSH2 0x19F3 DUP11 PUSH2 0x47B8 JUMP JUMPDEST DUP9 MSTORE PUSH2 0x19FE DUP11 PUSH2 0x1E22 JUMP JUMPDEST DUP8 MSTORE PUSH2 0x1A09 DUP11 PUSH2 0x1E22 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x1A16 DUP10 DUP14 MLOAD PUSH2 0x5BF2 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x1A21 DUP9 PUSH2 0x1E22 JUMP JUMPDEST DUP2 MSTORE DUP11 MLOAD SWAP2 PUSH1 0x1 SWAP10 PUSH1 0x1 DUP5 DUP2 SHR AND SWAP4 DUP5 PUSH2 0x1BDC JUMPI JUMPDEST POP DUP4 PUSH2 0x1BCA JUMPI JUMPDEST PUSH0 JUMPDEST DUP14 DUP12 DUP3 LT PUSH2 0x1A9D JUMPI POP POP POP POP POP POP POP POP POP POP POP POP POP DUP1 PUSH2 0x1A8E PUSH2 0x1A76 PUSH2 0x1A95 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x4846 JUMP JUMPDEST PUSH2 0x42F PUSH2 0x14B6 JUMP JUMPDEST SWAP1 DUP11 DUP14 SWAP3 DUP3 DUP13 DUP13 DUP13 PUSH2 0x1AFF DUP5 PUSH2 0x1AEB DUP2 PUSH2 0x1ADD PUSH2 0x1AD8 DUP16 DUP16 PUSH2 0x108E DUP6 PUSH2 0x1AC3 SWAP3 MLOAD PUSH2 0x1E54 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x4807 JUMP JUMPDEST SWAP5 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP5 MLOAD DUP4 PUSH2 0x1AF9 DUP4 DUP4 PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH2 0x1E54 JUMP JUMPDEST POP PUSH2 0x1B09 DUP2 PUSH2 0x49A1 JUMP JUMPDEST PUSH2 0x1B14 DUP6 DUP14 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH2 0x1B29 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP5 AND DUP6 DUP8 PUSH2 0x4A40 JUMP JUMPDEST DUP8 DUP14 DUP14 ISZERO PUSH2 0x1BBD JUMPI DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP3 PUSH2 0x1B9F JUMPI JUMPDEST POP POP PUSH2 0x1B50 JUMPI JUMPDEST POP POP POP POP POP JUMPDEST ADD PUSH2 0x1A3F JUMP JUMPDEST DUP3 PUSH2 0x1B73 SWAP3 PUSH2 0x1B6A DUP3 PUSH2 0x1B63 DUP9 MLOAD PUSH2 0x5C4E JUMP JUMPDEST SWAP5 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP7 SHR DUP6 PUSH2 0x5C71 JUMP JUMPDEST SWAP3 DUP4 PUSH2 0x1B83 JUMPI JUMPDEST DUP15 SWAP4 POP DUP13 PUSH2 0x1B44 JUMP JUMPDEST PUSH2 0x1B96 SWAP4 PUSH2 0x1B90 SWAP2 PUSH2 0xB28 JUMP JUMPDEST SWAP2 PUSH2 0x4A40 JUMP JUMPDEST PUSH0 DUP16 DUP3 DUP3 PUSH2 0x1B7A JUMP JUMPDEST SWAP1 SWAP2 POP MLOAD PUSH2 0x1BAC DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x1BB5 DUP2 PUSH2 0xEF4 JUMP JUMPDEST EQ DUP8 PUSH0 PUSH2 0x1B3D JUMP JUMPDEST POP POP POP POP POP POP POP POP PUSH2 0x1B4A JUMP JUMPDEST DUP13 MLOAD SWAP1 SWAP4 POP PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 PUSH2 0x1A3D JUMP JUMPDEST PUSH2 0x1BE7 SWAP2 SWAP5 POP PUSH2 0x5C4E JUMP JUMPDEST ISZERO ISZERO SWAP3 PUSH0 PUSH2 0x1A36 JUMP JUMPDEST PUSH1 0x40 SWAP1 DUP2 MLOAD SWAP2 PUSH2 0x1BFF DUP4 PUSH2 0x295 JUMP JUMPDEST PUSH0 DUP4 MSTORE DUP3 PUSH1 0x20 DUP2 ADD SWAP2 PUSH1 0x60 DUP1 DUP5 MSTORE DUP2 DUP4 ADD SWAP1 DUP1 DUP3 MSTORE DUP1 DUP5 ADD SWAP1 DUP1 DUP3 MSTORE PUSH1 0x80 SWAP4 PUSH1 0x80 DUP7 ADD DUP3 DUP2 MSTORE PUSH1 0xA0 DUP8 ADD DUP4 DUP2 MSTORE PUSH1 0xC0 DUP9 ADD SWAP4 DUP5 MSTORE PUSH2 0x1C3B PUSH2 0x147A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP4 PUSH0 PUSH1 0x20 MSTORE DUP4 PUSH0 KECCAK256 SLOAD SWAP3 PUSH1 0x4 PUSH1 0x20 MSTORE PUSH2 0x1C77 DUP6 PUSH0 KECCAK256 SWAP5 PUSH1 0x3 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SWAP1 DUP2 SLOAD SWAP13 MSTORE PUSH2 0x4761 JUMP JUMPDEST DUP12 MSTORE PUSH2 0x1C82 DUP11 PUSH2 0x47B8 JUMP JUMPDEST DUP9 MSTORE PUSH2 0x1C8D DUP11 PUSH2 0x1E22 JUMP JUMPDEST DUP8 MSTORE PUSH2 0x1C98 DUP11 PUSH2 0x1E22 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x1CA5 DUP10 DUP14 MLOAD PUSH2 0x5BF2 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x1CB0 DUP9 PUSH2 0x1E22 JUMP JUMPDEST DUP2 MSTORE DUP11 MLOAD SWAP2 PUSH1 0x1 SWAP10 PUSH1 0x1 DUP5 DUP2 SHR AND SWAP4 DUP5 PUSH2 0x1DF8 JUMPI JUMPDEST POP DUP4 PUSH2 0x1DE6 JUMPI JUMPDEST PUSH0 JUMPDEST DUP14 DUP12 DUP3 LT PUSH2 0x1D05 JUMPI POP POP POP POP POP POP POP POP POP POP POP POP POP DUP1 PUSH2 0x1A8E PUSH2 0x1A76 PUSH2 0x1A95 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP11 DUP14 SWAP3 DUP3 DUP13 DUP13 DUP13 PUSH2 0x1D2B DUP5 PUSH2 0x1AEB DUP2 PUSH2 0x1ADD PUSH2 0x1AD8 DUP16 DUP16 PUSH2 0x108E DUP6 PUSH2 0x1AC3 SWAP3 MLOAD PUSH2 0x1E54 JUMP JUMPDEST POP PUSH2 0x1D35 DUP2 PUSH2 0x49A1 JUMP JUMPDEST PUSH2 0x1D40 DUP6 DUP14 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH2 0x1D55 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP5 AND DUP6 DUP8 PUSH2 0x4A8D JUMP JUMPDEST DUP8 DUP14 DUP14 ISZERO PUSH2 0x1DD9 JUMPI DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP3 PUSH2 0x1DBB JUMPI JUMPDEST POP POP PUSH2 0x1D7C JUMPI JUMPDEST POP POP POP POP POP JUMPDEST ADD PUSH2 0x1CCE JUMP JUMPDEST DUP3 PUSH2 0x1D8F SWAP3 PUSH2 0x1B6A DUP3 PUSH2 0x1B63 DUP9 MLOAD PUSH2 0x5C4E JUMP JUMPDEST SWAP3 DUP4 PUSH2 0x1D9F JUMPI JUMPDEST DUP15 SWAP4 POP DUP13 PUSH2 0x1D70 JUMP JUMPDEST PUSH2 0x1DB2 SWAP4 PUSH2 0x1DAC SWAP2 PUSH2 0xB28 JUMP JUMPDEST SWAP2 PUSH2 0x4A8D JUMP JUMPDEST PUSH0 DUP16 DUP3 DUP3 PUSH2 0x1D96 JUMP JUMPDEST SWAP1 SWAP2 POP MLOAD PUSH2 0x1DC8 DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x1DD1 DUP2 PUSH2 0xEF4 JUMP JUMPDEST EQ DUP8 PUSH0 PUSH2 0x1D69 JUMP JUMPDEST POP POP POP POP POP POP POP POP PUSH2 0x1D76 JUMP JUMPDEST DUP13 MLOAD SWAP1 SWAP4 POP PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 PUSH2 0x1CCC JUMP JUMPDEST PUSH2 0x1E03 SWAP2 SWAP5 POP PUSH2 0x5C4E JUMP JUMPDEST ISZERO ISZERO SWAP3 PUSH0 PUSH2 0x1CC5 JUMP JUMPDEST SUB PUSH2 0x1E13 JUMPI JUMP JUMPDEST PUSH4 0xAAAD13F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x1E2C DUP3 PUSH2 0x33D JUMP JUMPDEST PUSH2 0x1E39 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x2CD JUMP JUMPDEST DUP3 DUP2 MSTORE DUP1 SWAP3 PUSH2 0x1E4A PUSH1 0x1F NOT SWAP2 PUSH2 0x33D JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1E68 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 MLOAD SWAP2 PUSH2 0x1E8F DUP3 MLOAD DUP3 MLOAD SWAP1 DUP6 PUSH2 0x4952 JUMP JUMPDEST PUSH2 0x1E98 DUP4 PUSH2 0x1E22 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x1EAA JUMPI POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x1EDF PUSH2 0x1EBA PUSH1 0x1 SWAP4 DUP6 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x1EDA PUSH2 0x1EC8 DUP5 DUP10 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x1ED3 DUP6 DUP10 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x498E JUMP JUMPDEST PUSH2 0x4F33 JUMP JUMPDEST PUSH2 0x1EE9 DUP3 DUP10 PUSH2 0x1E54 JUMP JUMPDEST MSTORE ADD PUSH2 0x1E9B JUMP JUMPDEST PUSH1 0x4 GT ISZERO PUSH2 0xEFE JUMPI JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0xED JUMPI JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xED JUMPI PUSH2 0x42F SWAP1 PUSH2 0x1EFA JUMP JUMPDEST SWAP1 PUSH1 0x4 DUP3 LT ISZERO PUSH2 0xEFE JUMPI MSTORE JUMP JUMPDEST SWAP6 SWAP3 SWAP4 PUSH2 0x1F59 PUSH2 0x1F7D SWAP6 PUSH2 0x42F SWAP10 SWAP8 SWAP4 PUSH2 0x1F6F SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP12 MSTORE AND PUSH1 0x20 DUP11 ADD MSTORE PUSH1 0x40 DUP10 ADD SWAP1 PUSH2 0x1F1B JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0xE0 PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0xE0 DUP7 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP1 DUP5 DUP3 SUB PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x432 JUMP JUMPDEST SWAP2 PUSH1 0xC0 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP6 SWAP7 SWAP4 PUSH2 0x1FEA PUSH2 0x1FAD DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH1 0x80 DUP9 ADD MLOAD SWAP8 PUSH2 0x1FBD DUP10 PUSH2 0x1EF0 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x80 PUSH1 0x40 DUP4 ADD MLOAD SWAP13 ADD MLOAD SWAP2 ADD MLOAD SWAP2 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP11 DUP12 SWAP10 DUP11 SWAP8 PUSH4 0x2E97E7D PUSH1 0xE6 SHL DUP10 MSTORE PUSH1 0x4 DUP10 ADD PUSH2 0x1F28 JUMP JUMPDEST SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP2 PUSH2 0x2014 JUMPI JUMPDEST POP ISZERO PUSH2 0x2005 JUMPI JUMP JUMPDEST PUSH4 0x1557C433 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x2036 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203C JUMPI JUMPDEST PUSH2 0x202E DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1F07 JUMP JUMPDEST PUSH0 PUSH2 0x1FFD JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2024 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x205B JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x20A1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x40 PUSH2 0x2081 PUSH2 0x207B DUP6 DUP4 DUP12 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x49A1 JUMP JUMPDEST PUSH2 0x208F DUP6 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MSTORE DUP4 PUSH0 MSTORE DUP6 DUP8 MSTORE PUSH0 KECCAK256 SLOAD AND DUP3 DUP8 PUSH2 0x4A40 JUMP JUMPDEST ADD PUSH2 0x204D JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x20BF JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x20FF PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x40 PUSH2 0x20DF PUSH2 0x207B DUP6 DUP4 DUP12 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST PUSH2 0x20ED DUP6 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MSTORE DUP4 PUSH0 MSTORE DUP6 DUP8 MSTORE PUSH0 KECCAK256 SLOAD AND DUP3 DUP8 PUSH2 0x4A8D JUMP JUMPDEST ADD PUSH2 0x20B1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x2112 DUP3 PUSH2 0x2B1 JUMP JUMPDEST PUSH0 PUSH1 0x40 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xED JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x213E DUP2 PUSH2 0x33D JUMP JUMPDEST SWAP4 PUSH2 0x214C PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2CD JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xED JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x2175 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2167 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0xED JUMPI DUP1 MLOAD SWAP1 PUSH2 0x219B DUP3 PUSH2 0x3C2 JUMP JUMPDEST SWAP3 PUSH2 0x21A9 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x2CD JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0xED JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP2 DUP4 SUB SLT PUSH2 0xED JUMPI DUP1 MLOAD SWAP3 PUSH1 0x20 DUP3 ADD MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0xED JUMPI DUP5 PUSH2 0x21FA SWAP2 DUP4 ADD PUSH2 0x2123 JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0xED JUMPI DUP2 PUSH2 0x2213 SWAP2 DUP5 ADD PUSH2 0x2123 JUMP JUMPDEST SWAP4 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0xED JUMPI PUSH2 0x42F SWAP3 ADD PUSH2 0x2184 JUMP JUMPDEST SWAP4 SWAP1 PUSH2 0x42F SWAP6 SWAP4 PUSH2 0x2268 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x225A SWAP4 AND DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP8 ADD MSTORE PUSH1 0xA0 DUP7 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP1 DUP5 DUP3 SUB PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x432 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x941 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x941 JUMPI JUMP JUMPDEST SWAP2 PUSH2 0x22AE SWAP1 PUSH2 0x42F SWAP5 SWAP3 DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x432 JUMP JUMPDEST SWAP3 PUSH2 0x22C5 PUSH2 0x147A JUMP JUMPDEST PUSH1 0x60 SWAP2 PUSH2 0x22D0 PUSH2 0x2105 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x22E4 DUP3 MLOAD MLOAD DUP1 DUP8 MSTORE PUSH2 0x1E22 JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP5 ADD SWAP7 DUP8 MLOAD PUSH2 0x22F5 DUP2 PUSH2 0x1EF0 JUMP JUMPDEST PUSH2 0x22FE DUP2 PUSH2 0x1EF0 JUMP JUMPDEST PUSH2 0x2701 JUMPI POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 PUSH2 0x2313 DUP8 MLOAD PUSH2 0x1E22 JUMP JUMPDEST SWAP6 PUSH2 0x234F DUP4 PUSH1 0x80 DUP13 ADD MLOAD PUSH2 0x2349 PUSH2 0x2331 DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x4EE2 JUMP JUMPDEST SWAP3 PUSH2 0x23C0 PUSH32 0x0 TLOAD PUSH2 0x2386 DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2684 JUMPI JUMPDEST PUSH1 0x40 DUP8 ADD MLOAD DUP1 DUP3 GT PUSH2 0x266C JUMPI POP PUSH2 0x23DE DUP2 SWAP11 SWAP10 SWAP11 PUSH2 0x4F55 JUMP JUMPDEST PUSH1 0x20 DUP11 ADD SWAP9 PUSH0 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x2527 JUMPI DUP13 PUSH2 0x23F9 DUP3 DUP9 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x2403 DUP2 PUSH2 0x4F55 JUMP JUMPDEST PUSH2 0x240D DUP4 DUP11 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x2515 JUMPI DUP2 PUSH2 0x2433 DUP5 PUSH1 0xA0 PUSH2 0x242A DUP3 PUSH1 0xC0 PUSH2 0x243A SWAP9 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP4 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0x4F66 JUMP JUMPDEST DUP1 PUSH2 0x2445 DUP4 DUP11 PUSH2 0x1E54 JUMP JUMPDEST MSTORE JUMPDEST PUSH2 0x2455 PUSH2 0x108E DUP4 DUP12 MLOAD PUSH2 0x1E54 JUMP JUMPDEST PUSH1 0x60 DUP12 ADD PUSH2 0x2464 DUP5 DUP3 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD DUP4 LT PUSH2 0x24E2 JUMPI POP DUP15 DUP4 PUSH2 0x1B90 DUP16 DUP16 DUP16 SWAP7 PUSH2 0x24D6 SWAP2 PUSH2 0x24BE DUP7 PUSH2 0x24B6 DUP2 DUP12 PUSH1 0x1 SWAP15 SWAP14 PUSH2 0x2493 DUP9 PUSH2 0x24DC SWAP16 PUSH2 0x1513 JUMP JUMPDEST PUSH2 0x24AF PUSH2 0x24A0 DUP5 DUP10 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 DUP14 PUSH2 0x4F95 JUMP JUMPDEST DUP8 MSTORE SWAP3 PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH2 0x24CD DUP6 PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP3 MLOAD SWAP1 PUSH2 0x2284 JUMP JUMPDEST SWAP1 PUSH2 0xB28 JUMP JUMPDEST ADD PUSH2 0x23E5 JUMP JUMPDEST SWAP2 PUSH2 0x24F1 DUP5 PUSH2 0x10C4 SWAP5 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH4 0x17BC2F23 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST POP POP PUSH2 0x2521 DUP2 DUP9 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x2447 JUMP JUMPDEST POP SWAP4 SWAP10 POP SWAP6 SWAP5 POP SWAP6 SWAP3 SWAP9 PUSH2 0x254D SWAP2 SWAP8 POP PUSH2 0x2548 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x5097 JUMP JUMPDEST PUSH32 0xFBE5B0D79FB94F1E81C0A92BF86AE9D3A19E9D1BF6202C0D3E75120F65D5D8A5 PUSH2 0x257F DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 PUSH2 0x25A1 DUP7 PUSH1 0x20 DUP8 ADD SWAP6 PUSH2 0x259A DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST CALLER SWAP2 PUSH2 0x1535 JUMP JUMPDEST PUSH2 0x25A9 PUSH2 0x50FA JUMP JUMPDEST PUSH2 0x2641 JUMPI JUMPDEST PUSH2 0x25D4 DUP7 PUSH2 0x25C3 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x5161 JUMP JUMPDEST PUSH2 0x2608 PUSH2 0x2331 PUSH2 0x25FC PUSH2 0x25EE DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 MLOAD SWAP7 PUSH2 0x108E DUP9 PUSH2 0x1EF0 JUMP JUMPDEST SWAP3 PUSH2 0x2630 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x261E DUP9 PUSH2 0x1EF0 JUMP JUMPDEST DUP13 DUP5 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP6 AND SWAP9 AND SWAP7 DUP5 PUSH2 0x2291 JUMP JUMPDEST SUB SWAP1 LOG4 PUSH2 0x263B PUSH2 0x14B6 JUMP JUMPDEST SWAP4 SWAP3 SWAP2 SWAP1 JUMP JUMPDEST PUSH2 0x2667 DUP7 PUSH2 0x2656 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH2 0x25AE JUMP JUMPDEST PUSH4 0x31D38E0B PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP9 SWAP5 SWAP2 PUSH2 0x2697 DUP12 SWAP8 SWAP5 SWAP10 SWAP6 SWAP3 SWAP12 MLOAD PUSH2 0x4B64 JUMP JUMPDEST SWAP11 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x26F1 JUMPI DUP1 DUP12 PUSH2 0x26EA DUP16 SWAP4 PUSH2 0x26E4 PUSH2 0x26D3 DUP16 DUP4 SWAP1 PUSH2 0x26C9 PUSH1 0x1 SWAP10 PUSH2 0x26C3 DUP5 DUP11 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x4F33 JUMP JUMPDEST PUSH2 0x1AF9 DUP4 DUP4 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x26DE DUP4 DUP7 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0xB28 JUMP JUMPDEST SWAP3 PUSH2 0x1E54 JUMP JUMPDEST MSTORE ADD PUSH2 0x269A JUMP JUMPDEST POP SWAP2 SWAP5 SWAP9 SWAP4 SWAP7 SWAP11 POP SWAP2 SWAP5 SWAP9 PUSH2 0x23C5 JUMP JUMPDEST SWAP5 SWAP1 PUSH1 0x1 DUP9 MLOAD PUSH2 0x2710 DUP2 PUSH2 0x1EF0 JUMP JUMPDEST PUSH2 0x2719 DUP2 PUSH2 0x1EF0 JUMP JUMPDEST SUB PUSH2 0x279D JUMPI PUSH2 0x2728 DUP10 MLOAD PUSH2 0x4AEC JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP2 DUP7 SWAP3 DUP11 PUSH2 0x2797 PUSH2 0x278D DUP12 DUP11 PUSH1 0x40 PUSH2 0x2748 PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x4B07 JUMP JUMPDEST SWAP3 ADD SWAP5 DUP3 DUP7 MSTORE DUP7 PUSH1 0x80 DUP3 ADD MLOAD SWAP4 PUSH2 0x2787 PUSH2 0xD25 PUSH2 0x2779 PUSH2 0x2772 PUSH2 0x2331 DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP6 MLOAD PUSH2 0x4B64 JUMP JUMPDEST SWAP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH2 0x4DE5 JUMP JUMPDEST SWAP1 SWAP3 MLOAD SWAP1 SWAP11 PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH2 0x23C5 JUMP JUMPDEST PUSH1 0x2 DUP9 SWAP7 SWAP3 SWAP7 MLOAD PUSH2 0x27AD DUP2 PUSH2 0x1EF0 JUMP JUMPDEST PUSH2 0x27B6 DUP2 PUSH2 0x1EF0 JUMP JUMPDEST SUB PUSH2 0x2849 JUMPI PUSH2 0x27C5 DUP10 MLOAD PUSH2 0x4AEC JUMP JUMPDEST PUSH2 0x2842 DUP3 PUSH1 0x60 DUP8 ADD SWAP1 PUSH2 0x27E9 PUSH2 0x27DB DUP4 MLOAD PUSH2 0x4B07 JUMP JUMPDEST PUSH1 0x40 DUP13 ADD SWAP4 DUP2 DUP6 MSTORE MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x27F5 DUP4 MLOAD DUP9 PUSH2 0x1E54 JUMP JUMPDEST MSTORE DUP12 PUSH2 0x2808 PUSH1 0x80 DUP3 ADD MLOAD SWAP4 MLOAD DUP1 SWAP4 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x2827 PUSH2 0x2820 PUSH2 0x2331 DUP13 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 MLOAD PUSH2 0x4B64 JUMP JUMPDEST SWAP3 PUSH2 0x283C PUSH2 0xD25 DUP13 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH2 0x4BBB JUMP JUMPDEST SWAP7 SWAP1 PUSH2 0x23C5 JUMP JUMPDEST POP SWAP4 PUSH1 0x3 DUP8 MLOAD PUSH2 0x2858 DUP2 PUSH2 0x1EF0 JUMP JUMPDEST PUSH2 0x2861 DUP2 PUSH2 0x1EF0 JUMP JUMPDEST SUB PUSH2 0x2909 JUMPI PUSH2 0x2870 DUP9 MLOAD PUSH2 0x4AD0 JUMP JUMPDEST PUSH0 PUSH2 0x2888 PUSH2 0xD25 PUSH2 0xD25 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP7 DUP2 ADD MLOAD PUSH1 0x80 DUP13 ADD MLOAD PUSH1 0xA0 DUP10 ADD MLOAD SWAP3 MLOAD PUSH4 0x2ADA38A3 PUSH1 0xE2 SHL DUP2 MSTORE SWAP10 DUP11 SWAP5 SWAP4 DUP6 SWAP4 DUP8 SWAP4 DUP6 SWAP4 PUSH2 0x28BD SWAP4 SWAP3 CALLER PUSH1 0x4 DUP8 ADD PUSH2 0x222A JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP5 DUP6 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP2 PUSH0 SWAP7 PUSH0 SWAP3 PUSH0 SWAP2 PUSH2 0x28DE JUMPI JUMPDEST POP SWAP2 SWAP7 SWAP3 PUSH2 0x23C5 JUMP JUMPDEST SWAP3 POP POP SWAP6 POP PUSH2 0x28FF SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x28F7 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x21CA JUMP JUMPDEST SWAP2 SWAP7 SWAP1 SWAP2 PUSH0 PUSH2 0x28D5 JUMP JUMPDEST PUSH4 0x137A9A39 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SLT PUSH2 0xED JUMPI PUSH2 0x292E DUP2 PUSH2 0x1EFA JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xED JUMPI PUSH2 0x42F SWAP3 ADD PUSH2 0x2123 JUMP JUMPDEST SWAP7 SWAP4 SWAP5 PUSH2 0x42F SWAP9 SWAP7 SWAP3 PUSH2 0x29B6 SWAP7 PUSH2 0x2987 PUSH2 0x29A8 SWAP7 PUSH2 0x299A SWAP6 PUSH2 0x100 SWAP5 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x20 DUP14 ADD MSTORE PUSH1 0x40 DUP13 ADD SWAP1 PUSH2 0x1F1B JUMP JUMPDEST PUSH1 0x60 DUP11 ADD MSTORE DUP1 PUSH1 0x80 DUP11 ADD MSTORE DUP9 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP1 DUP7 DUP3 SUB PUSH1 0xA0 DUP9 ADD MSTORE PUSH2 0x432 JUMP JUMPDEST SWAP1 DUP5 DUP3 SUB PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x432 JUMP JUMPDEST SWAP2 PUSH1 0xE0 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP5 SWAP4 SWAP6 SWAP3 SWAP7 SWAP2 SWAP1 DUP5 MLOAD PUSH2 0x29DD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP7 ADD MLOAD SWAP3 PUSH2 0x29ED DUP5 PUSH2 0x1EF0 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD DUP11 PUSH1 0xA0 DUP10 ADD MLOAD SWAP3 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP8 DUP9 SWAP8 PUSH4 0x2754888D PUSH1 0xE0 SHL DUP10 MSTORE PUSH1 0x4 DUP10 ADD SWAP8 PUSH2 0x2A19 SWAP9 PUSH2 0x294D JUMP JUMPDEST SUB SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP2 GAS PUSH0 SWAP5 DUP6 SWAP2 CALL SWAP4 DUP5 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP1 PUSH0 SWAP6 PUSH2 0x2B0C JUMPI JUMPDEST POP ISZERO DUP1 ISZERO PUSH2 0x2B00 JUMPI JUMPDEST PUSH2 0x2AF1 JUMPI PUSH1 0x1 DUP1 SWAP4 PUSH1 0x9 SHR AND ISZERO PUSH2 0x2A63 JUMPI SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH0 DUP4 JUMPDEST PUSH2 0x2A6A JUMPI JUMPDEST POP POP POP POP SWAP1 JUMP JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x2AEC JUMPI PUSH2 0x2A7D DUP2 DUP7 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x2A8E DUP4 DUP4 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD GT PUSH2 0x2A9D JUMPI POP DUP4 ADD DUP4 PUSH2 0x2A5E JUMP JUMPDEST PUSH2 0x2AC8 DUP3 PUSH2 0x2AC0 DUP2 PUSH2 0x2ABA PUSH2 0x108E DUP12 SWAP8 PUSH1 0x20 PUSH2 0x10C4 SWAP11 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST SWAP6 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP3 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH4 0x3EF629C9 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST PUSH2 0x2A63 JUMP JUMPDEST PUSH4 0x3A6723B PUSH1 0xE3 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP4 MLOAD DUP6 MLOAD EQ ISZERO PUSH2 0x2A45 JUMP JUMPDEST SWAP1 POP PUSH2 0x2B2B SWAP2 SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2B23 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2918 JUMP JUMPDEST SWAP4 SWAP1 PUSH0 PUSH2 0x2A3C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 SWAP2 PUSH1 0x80 DUP5 ADD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT DUP6 DUP4 LT OR PUSH2 0x290 JUMPI PUSH2 0x2BBA SWAP2 PUSH1 0x40 MSTORE PUSH0 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP5 PUSH0 DUP7 MSTORE PUSH2 0x2BB2 PUSH1 0x40 DUP3 ADD SWAP2 PUSH0 DUP4 MSTORE DUP4 PUSH1 0x60 DUP3 ADD SWAP7 PUSH0 DUP9 MSTORE DUP3 SWAP10 PUSH2 0x2BAB PUSH1 0x20 DUP5 ADD DUP1 MLOAD SWAP1 PUSH2 0x2B9B PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 PUSH1 0x40 DUP9 ADD MLOAD AND SWAP1 PUSH2 0x45CB JUMP JUMPDEST DUP8 MSTORE MLOAD SWAP1 PUSH1 0x60 DUP6 ADD MLOAD AND SWAP1 PUSH2 0x45CB JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x2D88 JUMP JUMPDEST SWAP1 MSTORE MLOAD PUSH2 0x4B64 JUMP JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x2BC7 DUP3 PUSH2 0xEF4 JUMP JUMPDEST MSTORE JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x60 PUSH1 0xC0 PUSH1 0x40 MLOAD PUSH2 0x2BDD DUP2 PUSH2 0x295 JUMP JUMPDEST PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH0 DUP4 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH0 PUSH1 0xA0 DUP3 ADD MSTORE ADD MSTORE DUP1 MLOAD SWAP3 PUSH2 0x2C0B DUP5 PUSH2 0xEF4 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 DUP3 ADD MLOAD SWAP4 ADD MLOAD PUSH1 0xC0 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD MLOAD SWAP4 ADD MLOAD SWAP4 PUSH2 0x2C34 PUSH2 0x2C2D PUSH2 0x30F JUMP JUMPDEST SWAP7 DUP8 PUSH2 0x2BBE JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE CALLER PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x2BC7 DUP3 PUSH2 0xEF4 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0xE0 DUP2 ADD SWAP1 DUP4 MLOAD PUSH2 0x2C72 DUP2 PUSH2 0xEF4 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP6 ADD MLOAD SWAP3 PUSH1 0xE0 PUSH1 0x40 DUP5 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH2 0x100 DUP5 ADD SWAP5 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x2CED JUMPI POP POP POP POP PUSH1 0xC0 DUP5 PUSH1 0x60 PUSH2 0x42F SWAP6 SWAP7 ADD MLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x2CDD PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0xA0 DUP6 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xC0 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST DUP4 MLOAD DUP7 MSTORE SWAP5 DUP2 ADD SWAP5 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2C9D JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP3 PUSH2 0x2D38 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH4 0x5211FA77 PUSH1 0xE0 SHL DUP6 MSTORE PUSH1 0x40 PUSH1 0x4 DUP7 ADD MSTORE PUSH1 0x44 DUP6 ADD SWAP1 PUSH2 0x2C60 JUMP JUMPDEST SWAP2 AND PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP2 PUSH2 0x2D69 JUMPI JUMPDEST POP ISZERO PUSH2 0x2D5A JUMPI JUMP JUMPDEST PUSH4 0xE91E17E7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x2D82 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203C JUMPI PUSH2 0x202E DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 PUSH2 0x2D52 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 DUP1 MLOAD PUSH2 0x2D96 DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x2D9F DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x2DE4 JUMPI SWAP1 PUSH2 0x2DDB PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH2 0x1ED3 PUSH1 0x80 PUSH2 0x2DE0 SWAP6 ADD MLOAD SWAP4 PUSH1 0xA0 PUSH2 0x2DCF PUSH1 0xC0 DUP6 ADD MLOAD DUP4 MLOAD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP4 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST PUSH2 0x498E JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH2 0x42F SWAP3 PUSH2 0x2E20 PUSH2 0x2E1A PUSH1 0x80 PUSH2 0x1EDA SWAP5 ADD MLOAD SWAP5 PUSH1 0xA0 PUSH2 0x2E0E PUSH1 0x20 PUSH1 0xC0 DUP8 ADD MLOAD SWAP4 ADD SWAP3 DUP4 MLOAD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP5 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x529A JUMP JUMPDEST SWAP3 PUSH2 0x498E JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH2 0x2E3D DUP4 PUSH2 0x1EFA JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x283A3D6B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x60 PUSH1 0x4 DUP3 ADD MSTORE SWAP5 SWAP1 SWAP4 DUP6 SWAP4 SWAP2 SWAP3 DUP5 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP5 SWAP3 DUP5 SWAP1 PUSH2 0x2E7C SWAP1 PUSH1 0x64 DUP7 ADD SWAP1 PUSH2 0x2C60 JUMP JUMPDEST SWAP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE SUB SWAP3 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x2ED3 JUMPI JUMPDEST POP ISZERO PUSH2 0x2EC4 JUMPI PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x2EB5 JUMPI SWAP1 JUMP JUMPDEST PUSH4 0x1D1B965 PUSH1 0xE6 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x14FE5DB5 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH2 0x2EF7 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x2EFE JUMPI JUMPDEST PUSH2 0x2EEF DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2E26 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x2E9D JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2EE5 JUMP JUMPDEST PUSH0 SWAP5 SWAP2 SWAP4 SWAP3 SWAP4 PUSH2 0x2F13 PUSH2 0x147A JUMP JUMPDEST PUSH2 0x2F1B PUSH2 0x2105 JUMP JUMPDEST SWAP2 DUP1 MLOAD PUSH2 0x2F27 DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x2F30 DUP2 PUSH2 0xEF4 JUMP JUMPDEST ISZERO PUSH2 0x328A JUMPI JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP7 ADD PUSH2 0x2F46 DUP2 MLOAD PUSH2 0x52BE JUMP JUMPDEST DUP4 PUSH2 0x2F82 DUP2 DUP6 ADD SWAP9 PUSH2 0x2F65 PUSH2 0xD25 PUSH2 0xD25 DUP13 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP13 DUP14 DUP1 SWAP5 DUP2 SWAP4 PUSH4 0x3964C0C3 PUSH1 0xE1 SHL DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x32B2 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP9 DUP10 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP10 PUSH2 0x326B JUMPI JUMPDEST POP DUP9 PUSH2 0x2F9F DUP2 PUSH2 0x52BE JUMP JUMPDEST DUP4 MLOAD PUSH2 0x2FAA DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x2FB3 DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x31F3 JUMPI POP PUSH1 0x40 DUP3 ADD MLOAD SWAP1 MSTORE PUSH2 0x2FF2 PUSH1 0xC0 DUP9 ADD MLOAD PUSH2 0x2FEB PUSH2 0x2E1A PUSH2 0x2FDC DUP8 DUP7 ADD SWAP4 DUP5 MLOAD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP3 PUSH1 0xA0 DUP13 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST SWAP1 DUP11 PUSH2 0x4F66 JUMP JUMPDEST SWAP4 PUSH1 0x80 DUP4 ADD MLOAD SWAP7 DUP6 SWAP8 SWAP9 PUSH1 0xA0 DUP6 ADD MLOAD DUP1 DUP9 LT PUSH2 0x31DC JUMPI POP JUMPDEST PUSH1 0x40 DUP6 ADD SWAP5 DUP11 DUP7 MLOAD PUSH2 0x3022 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x302C SWAP2 PUSH2 0x45B9 JUMP JUMPDEST PUSH1 0x60 ADD SWAP6 DUP10 DUP8 MLOAD PUSH2 0x3043 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x304D SWAP2 PUSH2 0x1513 JUMP JUMPDEST DUP4 MLOAD DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MLOAD SWAP2 PUSH2 0x3072 SWAP4 DUP7 PUSH2 0x4F95 JUMP JUMPDEST SWAP2 SWAP1 DUP2 DUP7 ADD SWAP6 PUSH1 0x40 ADD SWAP3 DUP4 MSTORE DUP6 MSTORE DUP6 MLOAD PUSH1 0x60 DUP5 ADD SWAP3 DUP14 DUP3 DUP6 MLOAD SWAP1 PUSH2 0x3095 SWAP2 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x30A0 SWAP2 PUSH2 0x2284 JUMP JUMPDEST SWAP1 MLOAD PUSH2 0x30AB SWAP2 PUSH2 0xB28 JUMP JUMPDEST PUSH2 0x30B5 SWAP2 DUP6 PUSH2 0x4A40 JUMP JUMPDEST DUP6 ADD SWAP2 DUP3 MLOAD DUP12 DUP2 DUP5 MLOAD SWAP1 PUSH2 0x30C8 SWAP2 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x30D3 SWAP2 PUSH2 0xB28 JUMP JUMPDEST PUSH2 0x30DD SWAP2 DUP4 PUSH2 0x4A40 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 DUP1 MLOAD DUP8 MLOAD PUSH2 0x3103 SWAP2 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP2 PUSH1 0x80 ADD SWAP2 DUP3 MLOAD DUP9 MLOAD PUSH2 0x3116 SWAP2 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x3120 SWAP2 PUSH2 0x5369 JUMP JUMPDEST DUP8 MLOAD PUSH2 0x3134 SWAP1 DUP6 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE MLOAD DUP4 MLOAD PUSH2 0x3141 SWAP2 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP1 MLOAD DUP4 MLOAD PUSH2 0x314F SWAP2 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x3159 SWAP2 PUSH2 0x5369 JUMP JUMPDEST SWAP2 MLOAD PUSH2 0x316C SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE MLOAD SWAP3 MLOAD SWAP4 MLOAD PUSH1 0x60 SWAP3 DUP4 ADD MLOAD SWAP2 MLOAD PUSH1 0x40 DUP1 MLOAD DUP12 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP12 SWAP1 MSTORE SWAP1 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP4 DUP3 AND SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH32 0x874B2D545CB271CDBDA4E093020C452328B24AF12382ED62C4D00F5C26709DB SWAP1 PUSH1 0x80 SWAP1 LOG4 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xFC PUSH2 0x14B6 JUMP JUMPDEST PUSH4 0xE2EA151B PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 DUP9 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 POP DUP2 SWAP9 POP PUSH2 0x321A PUSH1 0x60 PUSH2 0x3223 SWAP4 ADD MLOAD PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP1 DUP3 LT MUL SWAP1 DUP4 PUSH2 0x5335 JUMP JUMPDEST SWAP1 DUP2 DUP7 MSTORE PUSH2 0x2284 JUMP JUMPDEST SWAP7 PUSH2 0x3250 PUSH2 0x3237 PUSH1 0xC0 DUP10 ADD MLOAD DUP4 MLOAD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x3248 PUSH1 0xA0 DUP11 ADD MLOAD DUP5 MLOAD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP1 DUP11 PUSH2 0x5355 JUMP JUMPDEST SWAP4 PUSH1 0x80 DUP4 ADD MLOAD SWAP7 DUP6 SWAP9 PUSH1 0xA0 DUP6 ADD MLOAD DUP1 DUP9 GT PUSH2 0x31DC JUMPI POP PUSH2 0x300A JUMP JUMPDEST PUSH2 0x3283 SWAP2 SWAP10 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP8 PUSH0 PUSH2 0x2F94 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD PUSH2 0x32AB PUSH2 0x32A1 DUP3 MLOAD PUSH1 0x60 DUP7 ADD MLOAD SWAP1 PUSH2 0x4F33 JUMP JUMPDEST DUP1 DUP7 MSTORE DUP3 MLOAD PUSH2 0xB28 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x2F36 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x42F SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x2C60 JUMP JUMPDEST PUSH2 0x1A0 PUSH2 0x42F SWAP3 PUSH1 0x20 DUP4 MSTORE PUSH2 0x32DC PUSH1 0x20 DUP5 ADD DUP3 MLOAD PUSH2 0x2C56 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH2 0x100 SWAP1 DUP2 DUP6 ADD MSTORE DUP2 ADD MLOAD PUSH2 0x120 SWAP1 DUP2 DUP6 ADD MSTORE DUP2 ADD MLOAD PUSH2 0x335D PUSH2 0x140 SWAP2 DUP3 DUP7 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP2 ADD MLOAD SWAP1 PUSH2 0x3379 PUSH2 0x160 SWAP3 DUP4 DUP7 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST ADD MLOAD SWAP2 PUSH2 0x180 DUP1 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP4 SWAP6 SWAP1 SWAP2 SWAP5 SWAP3 DUP7 MLOAD PUSH2 0x339B DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x33A4 DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x35A9 JUMPI DUP7 PUSH1 0x40 DUP6 ADD MLOAD SWAP2 DUP5 JUMPDEST DUP3 MLOAD SWAP5 PUSH2 0x33BD DUP7 PUSH2 0xEF4 JUMP JUMPDEST PUSH1 0x40 SWAP8 DUP9 SWAP8 DUP9 DUP7 ADD MLOAD PUSH2 0x33D6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP7 PUSH1 0x60 DUP8 ADD MLOAD PUSH2 0x33EC SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP4 PUSH1 0x80 ADD SWAP3 DUP4 MLOAD DUP2 MLOAD PUSH2 0x33FE SWAP2 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP4 MLOAD SWAP1 PUSH1 0x20 ADD MLOAD PUSH2 0x340F SWAP2 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x20 DUP9 ADD MLOAD PUSH2 0x3426 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP8 PUSH1 0xC0 ADD MLOAD SWAP9 PUSH2 0x3434 PUSH2 0x31C JUMP JUMPDEST SWAP11 PUSH2 0x343F SWAP1 DUP13 PUSH2 0x2BBE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP12 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 DUP12 ADD MSTORE PUSH1 0x60 DUP10 ADD MSTORE PUSH1 0x80 DUP9 ADD MSTORE PUSH1 0xA0 DUP8 ADD MSTORE PUSH1 0xC0 DUP7 ADD MSTORE PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 DUP5 ADD DUP9 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x120 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE DUP2 MLOAD PUSH4 0x18B6EB55 PUSH1 0xE0 SHL DUP2 MSTORE SWAP7 DUP8 SWAP2 DUP3 SWAP1 DUP2 SWAP1 PUSH2 0x34BF SWAP1 PUSH1 0x4 DUP4 ADD PUSH2 0x32C3 JUMP JUMPDEST SUB SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS SWAP1 PUSH0 SWAP2 CALL SWAP5 DUP6 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP2 PUSH0 SWAP7 PUSH2 0x3585 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x3576 JUMPI PUSH1 0x9 SHR PUSH1 0x1 AND ISZERO PUSH2 0x3570 JUMPI POP DUP1 MLOAD PUSH2 0x34FD DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x3506 DUP2 PUSH2 0xEF4 JUMP JUMPDEST ISZERO DUP1 PUSH2 0x3563 JUMPI JUMPDEST DUP1 ISZERO PUSH2 0x3538 JUMPI JUMPDEST PUSH2 0x351C JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0xA0 ADD MLOAD PUSH4 0xCC0E4A99 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH1 0x1 DUP2 MLOAD PUSH2 0x3546 DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x354F DUP2 PUSH2 0xEF4 JUMP JUMPDEST EQ DUP1 ISZERO PUSH2 0x3514 JUMPI POP PUSH1 0xA0 DUP2 ADD MLOAD DUP3 GT PUSH2 0x3514 JUMP JUMPDEST POP PUSH1 0xA0 DUP2 ADD MLOAD DUP3 LT PUSH2 0x350D JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH4 0x568A77B PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x35A0 SWAP4 SWAP7 POP DUP1 SWAP2 SWAP3 POP SWAP1 RETURNDATASIZE LT PUSH2 0x2EFE JUMPI PUSH2 0x2EEF DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP4 SWAP1 PUSH0 DUP1 PUSH2 0x34DF JUMP JUMPDEST DUP7 PUSH1 0x40 DUP6 ADD MLOAD SWAP2 DUP5 SWAP3 SWAP5 PUSH2 0x33B1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP3 AND DUP1 SWAP3 SUB PUSH2 0x35E0 JUMPI POP POP JUMP JUMPDEST PUSH4 0x36B18D09 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 PUSH32 0x0 GT PUSH2 0x361F JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH4 0x18FE7385 PUSH1 0xE0 SHL PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 DUP2 SUB SWAP3 SWAP2 PUSH0 SGT DUP1 ISZERO DUP3 DUP6 SGT AND SWAP2 DUP5 SLT AND OR PUSH2 0x941 JUMPI JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH0 DUP4 DUP3 ADD SWAP4 DUP5 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x941 JUMPI JUMP JUMPDEST SWAP4 SWAP1 SWAP2 PUSH2 0x367A DUP6 PUSH2 0xEF4 JUMP JUMPDEST DUP5 ISZERO DUP1 ISZERO PUSH2 0x39BD JUMPI PUSH2 0x36AF PUSH1 0x20 PUSH2 0x3690 DUP8 PUSH2 0xB1A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH4 0xEF8B30F7 PUSH1 0xE0 SHL DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH2 0x36D4 SWAP2 PUSH0 SWAP2 PUSH2 0x399E JUMPI JUMPDEST POP PUSH2 0xB1A JUMP JUMPDEST SWAP5 SWAP6 JUMPDEST PUSH2 0x36F2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP2 PUSH2 0x36FC PUSH2 0x50FA JUMP JUMPDEST PUSH2 0x3996 JUMPI DUP7 SWAP3 DUP9 SWAP3 SWAP1 SWAP2 PUSH1 0x80 DUP4 SWAP1 SHR SWAP2 DUP6 DUP4 LT PUSH2 0x3771 JUMPI POP POP POP SWAP3 PUSH2 0x376B DUP3 PUSH2 0x3748 DUP7 PUSH2 0x3743 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP10 PUSH2 0xFC SWAP12 PUSH1 0x80 SHR SUB SWAP4 AND PUSH2 0x2284 JUMP JUMPDEST PUSH2 0x5369 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0x3765 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x45B9 JUMP JUMPDEST AND PUSH2 0x1513 JUMP JUMPDEST SWAP1 SWAP3 SWAP4 POP PUSH2 0x3780 SWAP2 SWAP5 POP PUSH2 0xEF4 JUMP JUMPDEST ISZERO PUSH2 0x3879 JUMPI PUSH2 0x37A8 PUSH2 0x37A3 PUSH2 0x3795 DUP6 DUP5 PUSH2 0x55A0 JUMP JUMPDEST PUSH2 0x379E DUP11 PUSH2 0x4618 JUMP JUMPDEST PUSH2 0x3653 JUMP JUMPDEST PUSH2 0x544C JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP4 PUSH2 0x37BF DUP2 DUP7 DUP10 PUSH2 0x556A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6E553F65 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP5 PUSH1 0x20 SWAP1 DUP7 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 PUSH0 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH2 0x3748 DUP10 SWAP6 PUSH2 0x3854 DUP8 PUSH2 0x3849 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 SWAP7 DUP9 DUP16 DUP10 PUSH2 0xFC SWAP16 DUP6 SWAP15 PUSH2 0x3843 DUP16 PUSH2 0x376B SWAP16 PUSH2 0x3849 SWAP7 PUSH2 0x384E SWAP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP7 PUSH0 SWAP2 PUSH2 0x385A JUMPI JUMPDEST POP SWAP11 DUP12 SWAP4 JUMPDEST AND SWAP1 PUSH2 0x383E DUP3 DUP3 PUSH2 0x5468 JUMP JUMPDEST PUSH2 0x5613 JUMP JUMPDEST AND PUSH2 0x2284 JUMP JUMPDEST PUSH2 0xB28 JUMP JUMPDEST SWAP5 PUSH2 0x2284 JUMP JUMPDEST SWAP1 PUSH2 0x5369 JUMP JUMPDEST PUSH2 0x3873 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 PUSH2 0x382D JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x3899 PUSH2 0x37A3 PUSH2 0x388B DUP4 DUP6 PUSH2 0x53AB JUMP JUMPDEST PUSH2 0x3894 DUP10 PUSH2 0x4618 JUMP JUMPDEST PUSH2 0x363B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xB3D7F6B9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP4 PUSH1 0x20 SWAP4 SWAP3 SWAP1 SWAP2 DUP5 DUP2 PUSH1 0x24 DUP2 DUP10 GAS STATICCALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH2 0x38DF SWAP2 PUSH0 SWAP2 PUSH2 0x3979 JUMPI JUMPDEST POP DUP7 DUP11 PUSH2 0x556A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x94BF804D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP5 DUP5 SWAP1 DUP7 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 PUSH0 SWAP1 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x20A JUMPI PUSH2 0xFC SWAP7 PUSH2 0x3854 DUP12 PUSH2 0x3849 DUP6 DUP16 SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP8 SWAP16 SWAP11 DUP5 SWAP16 DUP16 SWAP7 PUSH2 0x376B SWAP16 SWAP8 PUSH2 0x3849 SWAP7 PUSH2 0x3748 SWAP16 SWAP10 PUSH2 0x384E SWAP11 PUSH2 0x3843 SWAP6 PUSH0 SWAP3 PUSH2 0x395C JUMPI JUMPDEST POP POP SWAP9 DUP10 SWAP3 PUSH2 0x3832 JUMP JUMPDEST PUSH2 0x3972 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x3952 JUMP JUMPDEST PUSH2 0x3990 SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 PUSH2 0x38D7 JUMP JUMPDEST POP SWAP1 SWAP4 POP POP POP JUMP JUMPDEST PUSH2 0x39B7 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 PUSH2 0x36CE JUMP JUMPDEST PUSH2 0x39EA PUSH1 0x20 PUSH2 0x39CB DUP8 PUSH2 0x2276 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH4 0xB3D7F6B9 PUSH1 0xE0 SHL DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH2 0x3A0F SWAP2 PUSH0 SWAP2 PUSH2 0x3A15 JUMPI JUMPDEST POP PUSH2 0x2276 JUMP JUMPDEST SWAP6 PUSH2 0x36D7 JUMP JUMPDEST PUSH2 0x3A2E SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 PUSH2 0x3A09 JUMP JUMPDEST SWAP4 SWAP1 PUSH2 0x3A3F DUP6 PUSH2 0xEF4 JUMP JUMPDEST DUP5 ISZERO SWAP5 DUP6 ISZERO PUSH2 0x3CDA JUMPI PUSH2 0x3A75 PUSH1 0x20 PUSH2 0x3A56 DUP8 PUSH2 0xB1A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH4 0x266D6A83 PUSH1 0xE1 SHL DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH2 0x3A99 SWAP2 PUSH0 SWAP2 PUSH2 0x399E JUMPI POP PUSH2 0xB1A JUMP JUMPDEST SWAP5 SWAP6 JUMPDEST PUSH2 0x3AB7 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP2 PUSH2 0x3AC1 PUSH2 0x50FA JUMP JUMPDEST PUSH2 0x3996 JUMPI DUP8 SWAP4 DUP8 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP2 DUP3 DUP5 AND SWAP2 DUP7 DUP4 LT PUSH2 0x3B38 JUMPI POP POP POP SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x3B0E DUP4 DUP7 PUSH2 0xFC SWAP9 PUSH2 0x3B06 DUP7 PUSH2 0x3B33 SWAP9 PUSH1 0x80 SHR PUSH2 0x2284 JUMP JUMPDEST SWAP3 AND SUB PUSH2 0x5369 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0x3B2B DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE JUMPDEST AND PUSH2 0x45B9 JUMP JUMPDEST PUSH2 0x1513 JUMP JUMPDEST SWAP2 SWAP7 POP SWAP3 SWAP5 POP PUSH2 0x3B48 SWAP2 POP PUSH2 0xEF4 JUMP JUMPDEST ISZERO PUSH2 0x3C2D JUMPI PUSH2 0x3B5D PUSH2 0x37A3 PUSH2 0x3795 DUP8 DUP6 PUSH2 0x53AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5D043B29 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP4 SWAP1 PUSH1 0x20 DUP6 PUSH1 0x64 DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND GAS CALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH2 0x3BEB DUP10 SWAP6 PUSH2 0x3854 DUP5 PUSH2 0x3849 DUP15 PUSH2 0x3BE2 DUP12 DUP16 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xFC SWAP16 SWAP13 PUSH2 0x3BDD DUP16 SWAP14 PUSH2 0x3B33 SWAP16 SWAP5 DUP9 SWAP16 DUP6 SWAP16 PUSH2 0x3849 SWAP8 PUSH0 SWAP2 PUSH2 0x3C0E JUMPI JUMPDEST POP SWAP6 DUP7 SWAP3 JUMPDEST AND SWAP1 PUSH2 0x5658 JUMP JUMPDEST PUSH2 0x2284 JUMP JUMPDEST SWAP5 PUSH1 0x80 SHR PUSH2 0x2284 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0x3C08 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x3B2D JUMP JUMPDEST PUSH2 0x3C27 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 PUSH2 0x3BD1 JUMP JUMPDEST PUSH2 0x3C3D PUSH2 0x37A3 PUSH2 0x388B DUP8 DUP6 PUSH2 0x55A0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2D182BE5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 PUSH1 0x20 DUP3 PUSH1 0x64 DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x20A JUMPI PUSH2 0x3BEB DUP10 SWAP6 PUSH2 0x3854 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x3849 DUP15 PUSH2 0x3BE2 DUP12 DUP16 DUP11 PUSH2 0xFC SWAP16 PUSH2 0x3BDD DUP16 SWAP4 PUSH2 0x3B33 SWAP16 SWAP15 DUP9 SWAP16 SWAP6 DUP12 SWAP16 SWAP7 PUSH2 0x3849 SWAP8 PUSH0 SWAP2 PUSH2 0x3CBB JUMPI JUMPDEST POP SWAP12 DUP13 SWAP4 PUSH2 0x3BD6 JUMP JUMPDEST PUSH2 0x3CD4 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 PUSH2 0x3CB2 JUMP JUMPDEST PUSH2 0x3D07 PUSH1 0x20 PUSH2 0x3CE8 DUP8 PUSH2 0x2276 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH4 0xA28A477 PUSH1 0xE0 SHL DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH2 0x3D2B SWAP2 PUSH0 SWAP2 PUSH2 0x3A15 JUMPI POP PUSH2 0x2276 JUMP JUMPDEST SWAP6 PUSH2 0x3A9C JUMP JUMPDEST DUP1 TLOAD SWAP1 PUSH1 0x1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x941 JUMPI TSTORE JUMP JUMPDEST SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 TSTORE JUMP JUMPDEST SWAP2 SWAP1 DUP3 MLOAD SWAP2 PUSH2 0x3D6E DUP3 MLOAD DUP3 MLOAD SWAP1 DUP6 PUSH2 0x4952 JUMP JUMPDEST PUSH2 0x3D77 DUP4 PUSH2 0x1E22 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x3D89 JUMPI POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x3DBB PUSH2 0x3DA2 PUSH1 0x1 SWAP5 DUP7 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x2DDB PUSH2 0x3DB0 DUP6 DUP11 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x1ED3 DUP7 DUP11 PUSH2 0x1E54 JUMP JUMPDEST DIV PUSH2 0x3DC6 DUP3 DUP10 PUSH2 0x1E54 JUMP JUMPDEST MSTORE ADD PUSH2 0x3D7A JUMP JUMPDEST PUSH1 0x5 GT ISZERO PUSH2 0xEFE JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xEFE JUMPI MSTORE JUMP JUMPDEST SWAP6 SWAP2 SWAP4 PUSH2 0x3E15 PUSH2 0x42F SWAP9 SWAP7 SWAP5 PUSH2 0x3E26 SWAP4 PUSH2 0x1F7D SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP12 MSTORE AND PUSH1 0x20 DUP11 ADD MSTORE PUSH1 0x40 DUP10 ADD SWAP1 PUSH2 0x3DD7 JUMP JUMPDEST PUSH1 0xE0 PUSH1 0x60 DUP9 ADD MSTORE PUSH1 0xE0 DUP8 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP7 ADD MSTORE DUP5 DUP3 SUB PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x432 JUMP JUMPDEST SWAP3 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP6 SWAP7 SWAP4 SWAP7 PUSH2 0x3E9A PUSH2 0x3E5D DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH1 0x80 DUP9 ADD MLOAD SWAP8 PUSH2 0x3E6D DUP10 PUSH2 0x3DCD JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x80 PUSH1 0x60 DUP4 ADD MLOAD SWAP4 ADD MLOAD SWAP2 ADD MLOAD SWAP2 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP11 DUP12 SWAP10 DUP11 SWAP8 PUSH4 0x45421EC7 PUSH1 0xE0 SHL DUP10 MSTORE PUSH1 0x4 DUP10 ADD PUSH2 0x3DE4 JUMP JUMPDEST SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP2 PUSH2 0x3EC4 JUMPI JUMPDEST POP ISZERO PUSH2 0x3EB5 JUMPI JUMP JUMPDEST PUSH4 0x5975B29 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3EDD SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203C JUMPI PUSH2 0x202E DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 PUSH2 0x3EAD JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0xED JUMPI DUP3 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 GT PUSH2 0xED JUMPI DUP4 PUSH2 0x3F0E SWAP2 DUP7 ADD PUSH2 0x2123 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP2 ADD MLOAD SWAP4 PUSH1 0x40 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0xED JUMPI DUP2 PUSH2 0x2213 SWAP2 DUP5 ADD PUSH2 0x2123 JUMP JUMPDEST SWAP4 PUSH2 0x3F57 PUSH2 0x2268 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x42F SWAP9 SWAP7 SWAP5 AND DUP8 MSTORE PUSH1 0xA0 PUSH1 0x20 DUP9 ADD MSTORE PUSH1 0xA0 DUP8 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP7 ADD MSTORE DUP5 DUP3 SUB PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x432 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x3F74 PUSH2 0x147A JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3F7E PUSH2 0x2105 JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP6 ADD PUSH2 0x3F91 DUP2 MLOAD MLOAD DUP1 DUP7 MSTORE PUSH2 0x1E22 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD SWAP6 DUP7 MLOAD PUSH2 0x3FA1 DUP2 PUSH2 0x3DCD JUMP JUMPDEST PUSH2 0x3FAA DUP2 PUSH2 0x3DCD JUMP JUMPDEST PUSH2 0x41E9 JUMPI POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x3FBE DUP7 MLOAD PUSH2 0x1E22 JUMP JUMPDEST SWAP5 PUSH2 0x3FE2 DUP3 PUSH1 0x80 DUP12 ADD MLOAD PUSH2 0x3FDC PUSH2 0x2331 DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x5A38 JUMP JUMPDEST SWAP10 JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD DUP1 DUP5 LT PUSH2 0x41D2 JUMPI POP PUSH2 0x3FFD DUP4 SWAP10 SWAP9 SWAP10 PUSH2 0x4F55 JUMP JUMPDEST PUSH1 0x20 DUP10 ADD SWAP8 PUSH0 JUMPDEST DUP13 DUP12 MLOAD DUP3 LT ISZERO PUSH2 0x4111 JUMPI DUP2 PUSH2 0x4018 SWAP2 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x4022 DUP2 PUSH2 0x4F55 JUMP JUMPDEST PUSH2 0x402C DUP3 DUP9 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x4100 JUMPI PUSH2 0x4051 SWAP1 DUP14 PUSH2 0x404A DUP5 PUSH1 0xA0 PUSH2 0x242A DUP3 PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0x5355 JUMP JUMPDEST DUP1 PUSH2 0x405C DUP4 DUP10 PUSH2 0x1E54 JUMP JUMPDEST MSTORE JUMPDEST PUSH2 0x406C PUSH2 0x108E DUP4 DUP11 MLOAD PUSH2 0x1E54 JUMP JUMPDEST PUSH1 0x40 DUP11 ADD PUSH2 0x407B DUP5 DUP3 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD DUP4 GT PUSH2 0x40CD JUMPI POP DUP14 DUP4 PUSH2 0x1B90 DUP15 PUSH2 0x40BF DUP16 SWAP7 DUP16 SWAP8 PUSH2 0x40AA DUP7 PUSH2 0x24B6 DUP2 DUP12 PUSH1 0x1 SWAP15 SWAP14 PUSH2 0x2493 DUP9 PUSH2 0x40C7 SWAP16 PUSH2 0x45B9 JUMP JUMPDEST MSTORE PUSH2 0x40B9 DUP6 PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x2284 JUMP JUMPDEST SWAP1 MLOAD SWAP1 PUSH2 0xB28 JUMP JUMPDEST ADD PUSH2 0x4004 JUMP JUMPDEST SWAP2 PUSH2 0x40DC DUP5 PUSH2 0x10C4 SWAP5 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH4 0x23B6A179 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST POP PUSH2 0x410B DUP2 DUP8 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x405E JUMP JUMPDEST POP POP SWAP4 SWAP7 SWAP5 POP SWAP7 POP SWAP7 POP SWAP7 PUSH2 0x4131 SWAP1 PUSH2 0x2548 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH32 0xA26A52D8D53702BBA7F137907B8E1F99FF87F6D450144270CA25E72481CCA871 PUSH2 0x4163 DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 PUSH2 0x4184 DUP10 PUSH1 0x20 DUP8 ADD SWAP6 PUSH2 0x417E DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x5A7F JUMP JUMPDEST PUSH2 0x41AA PUSH2 0x2331 PUSH2 0x419E PUSH2 0x25EE DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 MLOAD SWAP7 PUSH2 0x108E DUP9 PUSH2 0x3DCD JUMP JUMPDEST SWAP3 PUSH2 0x2630 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x41C0 DUP9 PUSH2 0x3DCD JUMP JUMPDEST DUP9 DUP5 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP6 AND SWAP9 AND SWAP7 DUP5 PUSH2 0x2291 JUMP JUMPDEST PUSH4 0x8D261D5D PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 DUP5 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH1 0x3 DUP8 MLOAD PUSH2 0x41F6 DUP2 PUSH2 0x3DCD JUMP JUMPDEST PUSH2 0x41FF DUP2 PUSH2 0x3DCD JUMP JUMPDEST SUB PUSH2 0x4221 JUMPI PUSH2 0x420E DUP9 MLOAD PUSH2 0x5A1C JUMP JUMPDEST PUSH2 0x4218 DUP2 MLOAD PUSH2 0x1E22 JUMP JUMPDEST SWAP5 PUSH0 SWAP2 SWAP10 PUSH2 0x3FE4 JUMP JUMPDEST SWAP8 PUSH1 0x1 DUP8 MLOAD PUSH2 0x422F DUP2 PUSH2 0x3DCD JUMP JUMPDEST PUSH2 0x4238 DUP2 PUSH2 0x3DCD JUMP JUMPDEST SUB PUSH2 0x42A0 JUMPI PUSH2 0x4247 DUP9 MLOAD PUSH2 0x4AEC JUMP JUMPDEST PUSH2 0x4298 DUP10 PUSH2 0x4259 DUP5 PUSH1 0x40 DUP9 ADD MLOAD PUSH2 0x57D1 JUMP JUMPDEST PUSH1 0x80 DUP11 ADD MLOAD SWAP1 PUSH2 0x4273 PUSH2 0x2331 DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x427D DUP13 MLOAD PUSH2 0x4B64 JUMP JUMPDEST SWAP2 PUSH2 0x4292 PUSH2 0xD25 DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP4 PUSH2 0x57EC JUMP JUMPDEST SWAP6 SWAP1 SWAP2 PUSH2 0x3FE4 JUMP JUMPDEST SWAP8 SWAP4 PUSH1 0x2 DUP8 MLOAD PUSH2 0x42AF DUP2 PUSH2 0x3DCD JUMP JUMPDEST PUSH2 0x42B8 DUP2 PUSH2 0x3DCD JUMP JUMPDEST SUB PUSH2 0x4324 JUMPI SWAP8 DUP8 SWAP9 PUSH2 0x42CA DUP10 MLOAD PUSH2 0x4AEC JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MLOAD SWAP2 PUSH2 0x42D9 DUP8 PUSH2 0x4B07 JUMP JUMPDEST PUSH2 0x431E PUSH2 0x4314 PUSH1 0x40 DUP12 ADD SWAP3 DUP1 DUP5 MSTORE DUP10 DUP12 SWAP16 DUP9 PUSH1 0x80 DUP3 ADD MLOAD SWAP4 PUSH2 0x430E PUSH2 0xD25 PUSH2 0x2779 PUSH2 0x2772 PUSH2 0x2331 DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH2 0x5706 JUMP JUMPDEST SWAP1 SWAP3 MLOAD SWAP1 SWAP10 PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH2 0x3FE4 JUMP JUMPDEST POP PUSH1 0x4 DUP7 MLOAD PUSH2 0x4332 DUP2 PUSH2 0x3DCD JUMP JUMPDEST PUSH2 0x433B DUP2 PUSH2 0x3DCD JUMP JUMPDEST SUB PUSH2 0x43E3 JUMPI PUSH2 0x434A DUP8 MLOAD PUSH2 0x56EA JUMP JUMPDEST PUSH0 PUSH2 0x4362 PUSH2 0xD25 PUSH2 0xD25 DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MLOAD SWAP1 PUSH1 0x80 DUP11 ADD MLOAD SWAP2 DUP4 PUSH1 0xA0 DUP9 ADD MLOAD SWAP9 PUSH2 0x4396 PUSH1 0x40 MLOAD SWAP11 DUP12 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH4 0xE4C43663 PUSH1 0xE0 SHL DUP7 MSTORE CALLER PUSH1 0x4 DUP8 ADD PUSH2 0x3F2D JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP1 PUSH0 SWAP6 PUSH0 SWAP2 PUSH0 SWAP2 PUSH2 0x43B8 JUMPI JUMPDEST POP SWAP1 SWAP6 SWAP2 SWAP10 PUSH2 0x3FE4 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x43D9 SWAP2 SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x43D1 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3EE3 JUMP JUMPDEST SWAP2 SWAP6 SWAP3 SWAP2 PUSH0 PUSH2 0x43AE JUMP JUMPDEST PUSH4 0x6C02B395 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP7 SWAP3 PUSH2 0x42F SWAP9 SWAP7 SWAP5 PUSH2 0x4448 SWAP4 PUSH2 0x442C PUSH2 0x443A SWAP4 PUSH2 0x29B6 SWAP10 SWAP6 PUSH2 0x100 SWAP4 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x20 DUP14 ADD MSTORE PUSH1 0x40 DUP13 ADD SWAP1 PUSH2 0x3DD7 JUMP JUMPDEST DUP1 PUSH1 0x60 DUP12 ADD MSTORE DUP10 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP1 DUP8 DUP3 SUB PUSH1 0x80 DUP10 ADD MSTORE PUSH2 0x432 JUMP JUMPDEST SWAP2 PUSH1 0xA0 DUP7 ADD MSTORE DUP5 DUP3 SUB PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x432 JUMP JUMPDEST SWAP5 SWAP4 SWAP2 SWAP6 SWAP3 SWAP7 SWAP1 DUP5 MLOAD PUSH2 0x4474 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD SWAP2 PUSH2 0x4483 DUP4 PUSH2 0x3DCD JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0xA0 DUP9 ADD MLOAD SWAP1 PUSH1 0x40 SWAP7 DUP13 PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP8 DUP9 SWAP8 PUSH4 0x25DA41F3 PUSH1 0xE2 SHL DUP10 MSTORE PUSH1 0x4 DUP10 ADD SWAP8 PUSH2 0x44B2 SWAP9 PUSH2 0x43F2 JUMP JUMPDEST SUB SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP2 GAS PUSH0 SWAP5 DUP6 SWAP2 CALL SWAP5 DUP6 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP1 PUSH0 SWAP7 PUSH2 0x459A JUMPI JUMPDEST POP ISZERO DUP1 ISZERO PUSH2 0x458E JUMPI JUMPDEST PUSH2 0x457F JUMPI PUSH1 0x1 DUP1 SWAP5 PUSH1 0x9 SHR AND ISZERO PUSH2 0x44FE JUMPI SWAP1 SWAP2 SWAP3 DUP1 SWAP5 SWAP6 POP PUSH0 SWAP1 JUMPDEST PUSH2 0x4506 JUMPI JUMPDEST POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x457A JUMPI PUSH2 0x4519 DUP2 DUP8 PUSH2 0x1E54 JUMP JUMPDEST MLOAD DUP3 DUP6 ADD SWAP1 PUSH2 0x4529 DUP4 DUP4 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD LT PUSH2 0x4538 JUMPI POP DUP5 ADD DUP5 PUSH2 0x44F9 JUMP JUMPDEST DUP7 SWAP1 PUSH2 0x4556 DUP4 PUSH2 0x2AC0 DUP2 PUSH2 0x2ABA PUSH2 0x108E PUSH2 0x10C4 SWAP9 PUSH1 0x20 DUP13 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH4 0x677D1D7D PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST PUSH2 0x44FE JUMP JUMPDEST PUSH4 0xE1249165 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP5 MLOAD DUP7 MLOAD EQ ISZERO PUSH2 0x44DE JUMP JUMPDEST SWAP1 POP PUSH2 0x45B1 SWAP2 SWAP6 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2B23 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP5 SWAP1 PUSH0 PUSH2 0x44D5 JUMP JUMPDEST PUSH2 0x45C5 PUSH2 0xFC SWAP3 PUSH2 0x4618 JUMP JUMPDEST SWAP1 PUSH2 0x4654 JUMP JUMPDEST SWAP1 PUSH0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x45FC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x45EA DUP4 DUP7 PUSH2 0x1E54 JUMP JUMPDEST MLOAD AND SWAP1 DUP4 AND EQ PUSH2 0x3570 JUMPI PUSH1 0x1 ADD PUSH2 0x45CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 PUSH4 0xDDEF98D7 PUSH1 0xE0 SHL PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x4642 JUMPI SWAP1 JUMP JUMPDEST PUSH4 0x123BAF03 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x4711 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 SWAP2 AND DUP1 PUSH0 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH2 0x469B PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP4 DUP5 PUSH2 0x3653 JUMP JUMPDEST SWAP3 DUP4 PUSH2 0x46DF JUMPI POP PUSH0 NOT PUSH32 0x0 DUP1 TLOAD SWAP2 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x941 JUMPI TSTORE JUMPDEST PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE JUMP JUMPDEST PUSH2 0x46D3 JUMPI PUSH2 0x470C PUSH32 0x0 PUSH2 0x3D31 JUMP JUMPDEST PUSH2 0x46D3 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP2 DUP4 DUP2 AND DUP5 DUP5 AND SUB PUSH2 0x4733 JUMPI POP POP POP POP PUSH0 NOT SWAP1 JUMP JUMPDEST PUSH2 0x475D SWAP4 PUSH2 0x159E SWAP3 AND PUSH0 MSTORE PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP3 DUP2 SLOAD SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP3 PUSH1 0x20 DUP4 ADD SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP4 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x4795 JUMPI POP POP POP PUSH2 0xFC SWAP3 POP SUB DUP4 PUSH2 0x2CD JUMP JUMPDEST DUP6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 MSTORE PUSH1 0x1 SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x477F JUMP JUMPDEST SWAP1 PUSH2 0x47C2 DUP3 PUSH2 0x33D JUMP JUMPDEST PUSH2 0x47CF PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x2CD JUMP JUMPDEST DUP3 DUP2 MSTORE DUP1 SWAP3 PUSH2 0x47E0 PUSH1 0x1F NOT SWAP2 PUSH2 0x33D JUMP JUMPDEST ADD SWAP1 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x47F0 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH2 0x47FB PUSH2 0x2105 JUMP JUMPDEST DUP3 DUP3 DUP6 ADD ADD MSTORE ADD PUSH2 0x47E4 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD PUSH2 0x4814 DUP2 PUSH2 0x2B1 JUMP JUMPDEST PUSH1 0x40 PUSH1 0xFF DUP3 SWAP5 SLOAD DUP2 DUP2 AND PUSH2 0x4827 DUP2 PUSH2 0xEF4 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 PUSH1 0x8 SHR AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0xA8 SHR AND ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD DUP1 MLOAD MLOAD SWAP4 PUSH0 JUMPDEST DUP6 DUP2 LT PUSH2 0x485F JUMPI POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x4873 PUSH2 0x108E PUSH1 0x1 SWAP4 PUSH1 0x20 DUP9 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST PUSH2 0x4895 PUSH2 0x4888 DUP4 DUP10 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x48A0 DUP4 DUP8 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD DUP2 GT PUSH2 0x48E7 JUMPI JUMPDEST POP POP PUSH2 0x48CE PUSH2 0x48B8 DUP3 DUP7 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x48C7 DUP4 PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x5369 JUMP JUMPDEST PUSH2 0x48E0 DUP3 DUP9 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE ADD PUSH2 0x4850 JUMP JUMPDEST PUSH2 0x4932 PUSH2 0x494A SWAP2 PUSH2 0x492C PUSH2 0x4923 PUSH2 0x490F DUP7 DUP11 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP3 PUSH2 0x491C DUP9 DUP13 MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0xB28 JUMP JUMPDEST DUP3 PUSH1 0x80 SHR PUSH2 0x2284 JUMP JUMPDEST SWAP1 PUSH2 0x5CC4 JUMP JUMPDEST SWAP2 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH0 DUP1 PUSH2 0x48A8 JUMP JUMPDEST DUP2 EQ DUP1 ISZERO SWAP3 SWAP2 SWAP1 PUSH2 0x4966 JUMPI JUMPDEST POP POP PUSH2 0x1E13 JUMPI JUMP JUMPDEST EQ ISZERO SWAP1 POP PUSH0 DUP1 PUSH2 0x495E JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x941 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x941 JUMPI JUMP JUMPDEST DUP1 MLOAD PUSH2 0x49AC DUP2 PUSH2 0xEF4 JUMP JUMPDEST PUSH2 0x49B5 DUP2 PUSH2 0xEF4 JUMP JUMPDEST DUP1 PUSH2 0x49C8 JUMPI POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x49D4 PUSH1 0x1 SWAP3 PUSH2 0xEF4 JUMP JUMPDEST SUB PUSH2 0x4A31 JUMPI PUSH1 0x20 PUSH2 0x49F3 PUSH2 0xD25 DUP3 PUSH1 0x4 SWAP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x33CD77E7 PUSH1 0xE1 SHL DUP2 MSTORE SWAP3 DUP4 SWAP2 DUP3 SWAP1 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP2 PUSH2 0x4A18 JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0x42F SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH4 0x6FA28319 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x80 PUSH8 0xDE0B6B3A7640000 PUSH2 0x4A84 PUSH2 0x2BC7 SWAP5 DUP1 PUSH2 0x4A63 DUP7 PUSH1 0x60 DUP11 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH2 0x2DDB PUSH2 0x4A75 DUP7 PUSH1 0xC0 DUP11 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x1ED3 DUP8 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST DIV SWAP4 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x80 PUSH2 0x4AC8 PUSH2 0x2BC7 SWAP4 DUP1 PUSH2 0x4AA7 DUP6 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH2 0x1EDA PUSH2 0x4AB9 DUP6 PUSH1 0xC0 DUP10 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x1ED3 DUP7 PUSH1 0xA0 DUP11 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST SWAP4 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST PUSH1 0x6 SHR PUSH1 0x1 AND ISZERO PUSH2 0x4ADD JUMPI JUMP JUMPDEST PUSH4 0x33C2A57 PUSH1 0xE6 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 SHR PUSH1 0x1 AND PUSH2 0x4AF8 JUMPI JUMP JUMPDEST PUSH4 0x353D5DE7 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD SWAP1 DUP2 SWAP1 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x4B30 JUMPI POP POP DUP2 LT ISZERO PUSH2 0x4B21 JUMPI SWAP1 JUMP JUMPDEST PUSH4 0x1F91AF77 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x4B3A DUP2 DUP4 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x4B48 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4B0E JUMP JUMPDEST SWAP3 DUP3 SUB PUSH2 0x4B55 JUMPI DUP3 PUSH2 0x4B40 JUMP JUMPDEST PUSH4 0x6B8C3BE5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x12 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x941 JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x20 PUSH2 0x4B9E PUSH0 SWAP3 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP4 ADD MSTORE JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x20 PUSH2 0x4B9E PUSH1 0x1 SWAP3 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP1 SWAP5 SWAP3 SWAP2 SWAP3 DUP2 MLOAD SWAP5 PUSH2 0x4BCC DUP7 PUSH2 0x1E22 JUMP JUMPDEST SWAP5 PUSH0 JUMPDEST DUP8 DUP2 LT PUSH2 0x4D9C JUMPI POP PUSH2 0x4BE5 SWAP1 PUSH2 0x26DE DUP10 DUP9 PUSH2 0x1E54 JUMP JUMPDEST PUSH2 0x4BEF DUP9 DUP8 PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP5 PUSH4 0x1309BD3D PUSH1 0xE3 SHL SWAP3 DUP4 DUP8 MSTORE PUSH1 0x20 DUP8 DUP1 PUSH2 0x4C11 DUP9 PUSH1 0x4 DUP4 ADD PUSH2 0x4B87 JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP8 PUSH2 0x4D7B JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP5 DUP7 MSTORE PUSH1 0x20 DUP7 DUP1 PUSH2 0x4C46 DUP7 PUSH1 0x4 DUP4 ADD PUSH2 0x4B87 JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x20A JUMPI PUSH2 0x3849 PUSH2 0x4CA8 DUP13 PUSH2 0x491C PUSH2 0x4CA1 PUSH2 0x4CBE SWAP7 PUSH2 0x4C9A DUP16 PUSH2 0x4C8A PUSH2 0x4CF4 SWAP16 SWAP2 PUSH1 0x20 SWAP15 DUP9 SWAP4 PUSH0 SWAP2 PUSH2 0x4D5C JUMPI JUMPDEST POP PUSH2 0x52F5 JUMP JUMPDEST SWAP3 PUSH2 0x4C95 DUP5 DUP14 PUSH2 0x5CD7 JUMP JUMPDEST PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x4F33 JUMP JUMPDEST SWAP2 DUP9 PUSH2 0x1E54 JUMP JUMPDEST SWAP2 PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP2 LT MUL DUP3 PUSH2 0x52F5 JUMP JUMPDEST SWAP4 PUSH2 0x4CCD DUP6 PUSH2 0x26DE DUP13 DUP7 PUSH2 0x1E54 JUMP JUMPDEST PUSH2 0x4CD7 DUP12 DUP6 PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x4BA3 JUMP JUMPDEST SUB SWAP3 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x20A JUMPI PUSH2 0x4D30 SWAP6 PUSH2 0x4D2A SWAP4 PUSH0 SWAP4 PUSH2 0x4D33 JUMPI JUMPDEST POP PUSH2 0x4D1C PUSH2 0x4D23 SWAP2 PUSH2 0x1E22 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0x1E54 JUMP JUMPDEST MSTORE DUP4 PUSH2 0xB28 JUMP JUMPDEST SWAP1 PUSH2 0x5335 JUMP JUMPDEST SWAP2 JUMP JUMPDEST PUSH2 0x4D23 SWAP2 SWAP4 POP PUSH2 0x4D54 PUSH2 0x4D1C SWAP2 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP4 SWAP2 POP PUSH2 0x4D0F JUMP JUMPDEST PUSH1 0x20 PUSH2 0x4D75 SWAP3 POP RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 PUSH2 0x4C84 JUMP JUMPDEST PUSH2 0x4D95 SWAP2 SWAP8 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP6 PUSH0 PUSH2 0x4C2D JUMP JUMPDEST DUP1 PUSH2 0x4DB2 PUSH2 0x4DAC PUSH1 0x1 SWAP4 DUP9 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0xB1A JUMP JUMPDEST PUSH2 0x4DBC DUP3 DUP11 PUSH2 0x1E54 JUMP JUMPDEST MSTORE ADD PUSH2 0x4BCF JUMP JUMPDEST PUSH2 0x4DDB PUSH1 0x40 SWAP3 SWAP6 SWAP5 SWAP4 SWAP6 PUSH1 0x60 DUP4 MSTORE PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x432 JUMP JUMPDEST SWAP5 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 SWAP5 SWAP2 DUP4 SUB SWAP2 DUP4 DUP4 GT PUSH2 0x941 JUMPI PUSH1 0x20 PUSH2 0x4E31 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x4E0A DUP8 DUP8 PUSH2 0x52F5 JUMP JUMPDEST PUSH2 0x4E14 DUP2 DUP4 PUSH2 0x5CD7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH3 0xB5059F PUSH1 0xE5 SHL DUP4 MSTORE DUP14 DUP11 PUSH1 0x4 DUP6 ADD PUSH2 0x4DC3 JUMP JUMPDEST SUB SWAP3 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH2 0x4D30 SWAP6 PUSH2 0x1EDA DUP9 PUSH2 0x4E7C SWAP4 PUSH2 0x4E85 SWAP9 PUSH2 0x4E8C SWAP7 PUSH0 SWAP3 PUSH2 0x4E92 JUMPI JUMPDEST POP PUSH2 0x4E6A DUP3 PUSH2 0x26DE PUSH2 0x3849 SWAP5 SWAP6 DUP12 PUSH2 0x1E54 JUMP JUMPDEST SWAP9 PUSH2 0x4E75 DUP14 DUP11 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x5335 JUMP JUMPDEST SWAP4 DUP5 SWAP3 MLOAD PUSH2 0x1E22 JUMP JUMPDEST SWAP6 DUP7 PUSH2 0x1E54 JUMP JUMPDEST MSTORE PUSH2 0xB28 JUMP JUMPDEST PUSH2 0x3849 SWAP3 POP PUSH2 0x26DE SWAP4 PUSH2 0x4EB6 PUSH2 0x4E6A SWAP3 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP4 POP SWAP4 POP PUSH2 0x4E57 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x4EDD JUMPI DIV SWAP1 JUMP JUMPDEST PUSH2 0x4EBF JUMP JUMPDEST SWAP1 SWAP3 SWAP2 PUSH2 0x4EEF DUP3 MLOAD PUSH2 0x1E22 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x4F2C JUMPI PUSH2 0x4F0F DUP4 PUSH2 0x4F09 DUP4 DUP6 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x498E JUMP JUMPDEST SWAP1 DUP7 ISZERO PUSH2 0x4EDD JUMPI DUP7 PUSH1 0x1 SWAP3 DIV PUSH2 0x4F25 DUP3 DUP8 PUSH2 0x1E54 JUMP JUMPDEST MSTORE ADD PUSH2 0x4EF2 JUMP JUMPDEST POP POP POP SWAP2 POP JUMP JUMPDEST SWAP1 PUSH2 0x4F3D SWAP2 PUSH2 0x498E JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x4F5D JUMPI POP JUMP JUMPDEST PUSH2 0xFC SWAP1 PUSH2 0x52BE JUMP JUMPDEST SWAP2 PUSH2 0x4F70 SWAP2 PUSH2 0x498E JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x941 JUMPI DUP2 ISZERO PUSH2 0x4EDD JUMPI DIV SWAP1 JUMP JUMPDEST SWAP2 SWAP5 SWAP3 SWAP1 SWAP5 PUSH0 SWAP6 PUSH0 SWAP6 DUP2 PUSH2 0x4FAA JUMPI POP POP POP POP POP JUMP JUMPDEST DUP5 SWAP8 POP PUSH2 0x2433 PUSH2 0x4FC3 DUP3 PUSH1 0xC0 PUSH2 0x4FCF SWAP7 SWAP8 SWAP9 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP2 PUSH1 0xA0 DUP11 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST SWAP5 MLOAD PUSH1 0x1 DUP2 PUSH1 0x3 SHR AND ISZERO PUSH2 0x4FE5 JUMPI JUMPDEST DUP1 DUP1 PUSH2 0x154D JUMP JUMPDEST PUSH3 0xFFFFFF SWAP2 SWAP3 SWAP5 POP PUSH1 0x2A SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x941 JUMPI PUSH2 0x501B PUSH8 0xDE0B6B3A7640000 SWAP2 DUP7 PUSH2 0x498E JUMP JUMPDEST DIV SWAP3 DUP5 DUP5 GT PUSH2 0x5088 JUMPI DUP1 PUSH2 0x159E PUSH2 0x5067 PUSH2 0x504D PUSH2 0x507F SWAP5 PUSH2 0x159E DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x5061 DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND PUSH2 0x2284 JUMP JUMPDEST SWAP1 PUSH2 0x5D5C JUMP JUMPDEST SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH0 DUP1 DUP1 PUSH2 0x4FDE JUMP JUMPDEST PUSH4 0x4C69AC5D PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 SWAP2 SWAP3 AND PUSH0 MSTORE PUSH1 0x20 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH0 JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x50F1 JUMPI SWAP1 PUSH2 0x50E1 PUSH2 0x50D2 DUP3 PUSH1 0x1 SWAP5 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x48C7 DUP4 PUSH1 0x80 DUP12 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST DUP2 PUSH0 MSTORE DUP4 DUP7 MSTORE DUP5 PUSH0 KECCAK256 SSTORE ADD PUSH2 0x50B4 JUMP JUMPDEST POP POP POP POP POP SWAP1 POP JUMP JUMPDEST ORIGIN ISZERO DUP1 PUSH2 0x5104 JUMPI SWAP1 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD AND ISZERO SWAP1 JUMP JUMPDEST SWAP1 ORIGIN PUSH2 0x5152 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x5143 SWAP3 AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 SLOAD SWAP2 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x941 JUMPI SSTORE JUMP JUMPDEST PUSH4 0x33FC2559 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 DUP4 ISZERO PUSH2 0x181B JUMPI PUSH2 0x5194 DUP6 PUSH2 0x159E DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD DUP1 DUP5 GT PUSH2 0x5276 JUMPI DUP4 SWAP1 SUB PUSH2 0x51BE DUP7 PUSH2 0x159E DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x51E4 DUP4 PUSH2 0x51DE DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0xB28 JUMP JUMPDEST PUSH2 0x51ED DUP2 PUSH2 0x5D6A JUMP JUMPDEST PUSH2 0x5208 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP1 DUP2 EXTCODESIZE ISZERO PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH4 0x23DE6651 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND PUSH1 0x4 DUP6 ADD MSTORE PUSH0 PUSH1 0x24 DUP6 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP6 ADD DUP3 SWAP1 MSTORE SWAP4 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F SWAP2 PUSH2 0x5271 SWAP2 DUP7 DUP2 DUP1 PUSH1 0x64 DUP2 ADD PUSH2 0x1619 JUMP JUMPDEST SUB SWAP1 LOG4 JUMP JUMPDEST PUSH4 0x391434E3 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP4 SWAP1 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP1 DUP3 DIV MUL DUP2 SUB PUSH2 0x52B0 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x941 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 GT PUSH2 0x52E6 JUMPI JUMP JUMPDEST PUSH4 0x3DA9A23 PUSH1 0xE3 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x5326 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x941 JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH4 0xA0C22C7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP3 ISZERO PUSH2 0x5326 JUMPI PUSH1 0x1 SWAP2 PUSH2 0x5347 SWAP2 PUSH2 0x498E JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x42F SWAP3 PUSH2 0x5363 SWAP2 PUSH2 0x498E JUMP JUMPDEST SWAP1 PUSH2 0x52F5 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP4 GT SWAP1 DUP2 ISZERO PUSH2 0x53A1 JUMPI JUMPDEST POP PUSH2 0x5392 JUMPI PUSH1 0x80 SHL SWAP1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x941 JUMPI SWAP1 JUMP JUMPDEST PUSH4 0x89560CA1 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP2 GT PUSH0 PUSH2 0x537D JUMP JUMPDEST SWAP1 PUSH2 0x53B8 DUP3 PUSH1 0x80 SHR PUSH2 0x4618 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH0 SWAP4 AND DUP1 PUSH2 0x53DC JUMPI JUMPDEST POP POP PUSH1 0x2 SWAP2 PUSH2 0x53D8 SWAP2 PUSH2 0x363B JUMP JUMPDEST SDIV SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 POP SWAP1 PUSH1 0x24 PUSH1 0x20 SWAP3 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH4 0xA28A477 PUSH1 0xE0 SHL DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x20A JUMPI PUSH2 0x5424 PUSH2 0x53D8 SWAP3 PUSH1 0x2 SWAP5 PUSH0 SWAP2 PUSH2 0x542D JUMPI JUMPDEST POP PUSH2 0x4618 JUMP JUMPDEST SWAP3 DUP2 SWAP3 POP PUSH2 0x53CA JUMP JUMPDEST PUSH2 0x5446 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 PUSH2 0x541E JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0x5456 JUMPI SWAP1 JUMP JUMPDEST PUSH4 0x54672219 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x95EA7B3 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH0 PUSH1 0x44 DUP5 ADD MSTORE SWAP1 SWAP4 SWAP2 SWAP3 SWAP2 DUP4 PUSH1 0x64 DUP2 ADD JUMPDEST SUB SWAP2 PUSH2 0x54AE PUSH1 0x1F NOT SWAP4 DUP5 DUP2 ADD DUP8 MSTORE DUP7 PUSH2 0x2CD JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP3 DUP8 MLOAD SWAP1 DUP3 DUP6 GAS CALL SWAP1 PUSH2 0x54CB PUSH2 0x569D JUMP JUMPDEST DUP3 PUSH2 0x5538 JUMPI JUMPDEST POP DUP2 PUSH2 0x552D JUMPI JUMPDEST POP ISZERO PUSH2 0x54E5 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x24 DUP6 ADD MSTORE PUSH0 PUSH1 0x44 DUP6 ADD MSTORE PUSH1 0x64 SWAP1 DUP2 ADD DUP5 MSTORE PUSH2 0x5523 SWAP4 PUSH2 0x917 SWAP2 PUSH2 0x551D SWAP1 DUP3 PUSH2 0x2CD JUMP JUMPDEST DUP3 PUSH2 0x5B9B JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x154D JUMP JUMPDEST SWAP1 POP EXTCODESIZE ISZERO ISZERO PUSH0 PUSH2 0x54D8 JUMP JUMPDEST DUP1 MLOAD SWAP2 SWAP3 POP DUP2 ISZERO SWAP2 DUP3 ISZERO PUSH2 0x5550 JUMPI JUMPDEST POP POP SWAP1 PUSH0 PUSH2 0x54D1 JUMP JUMPDEST PUSH2 0x5563 SWAP3 POP PUSH1 0x20 DUP1 SWAP2 DUP4 ADD ADD SWAP2 ADD PUSH2 0x1F07 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x5547 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x95EA7B3 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 SWAP1 SWAP3 DUP4 PUSH1 0x64 DUP2 ADD PUSH2 0x549A JUMP JUMPDEST SWAP1 PUSH2 0x55B3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND PUSH2 0x4618 JUMP JUMPDEST SWAP1 PUSH0 SWAP3 PUSH1 0x80 SHR DUP1 PUSH2 0x55CC JUMPI POP POP PUSH1 0x2 SWAP2 PUSH2 0x53D8 SWAP2 PUSH2 0x363B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 POP SWAP1 PUSH1 0x24 PUSH1 0x20 SWAP3 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH4 0xB3D7F6B9 PUSH1 0xE0 SHL DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x20A JUMPI PUSH2 0x5424 PUSH2 0x53D8 SWAP3 PUSH1 0x2 SWAP5 PUSH0 SWAP2 PUSH2 0x542D JUMPI POP PUSH2 0x4618 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 SUB SWAP3 DUP4 GT PUSH2 0x941 JUMPI DUP2 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 ADD DUP1 SWAP4 GT PUSH2 0x941 JUMPI PUSH2 0xFC SWAP4 PUSH2 0x5D89 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 ADD DUP1 SWAP4 GT PUSH2 0x941 JUMPI DUP2 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 SUB SWAP3 DUP4 GT PUSH2 0x941 JUMPI PUSH2 0xFC SWAP4 PUSH2 0x5D89 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x56C7 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x56AE DUP3 PUSH2 0x3C2 JUMP JUMPDEST SWAP2 PUSH2 0x56BC PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x2CD JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x42F SWAP4 PUSH1 0x20 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL PUSH2 0x56E4 PUSH2 0x569D JUMP JUMPDEST SWAP2 PUSH2 0x5EC0 JUMP JUMPDEST PUSH1 0x5 SHR PUSH1 0x1 AND ISZERO PUSH2 0x56F7 JUMPI JUMP JUMPDEST PUSH4 0x121DB02F PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP5 SWAP2 PUSH1 0x20 PUSH2 0x5735 PUSH2 0x5720 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH2 0x2284 JUMP JUMPDEST SWAP5 PUSH2 0x572B DUP8 DUP8 PUSH2 0x52F5 JUMP JUMPDEST PUSH2 0x4E14 DUP2 DUP4 PUSH2 0x5F1A JUMP JUMPDEST SUB SWAP3 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x20A JUMPI PUSH2 0x4D30 SWAP6 PUSH2 0x3849 PUSH2 0x4CA8 DUP6 PUSH2 0x4E7C SWAP5 PUSH2 0x4E85 SWAP10 DUP13 SWAP10 DUP11 PUSH2 0x5794 SWAP10 PUSH0 SWAP5 PUSH2 0x579A JUMPI JUMPDEST POP SWAP1 PUSH2 0x5788 PUSH2 0x5781 PUSH2 0x577A PUSH2 0x578F SWAP5 PUSH2 0x24D6 SWAP8 SWAP9 PUSH2 0x1E54 JUMP JUMPDEST MLOAD DUP8 PUSH2 0xB28 JUMP JUMPDEST SWAP13 DUP13 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x498E JUMP JUMPDEST PUSH2 0x4ED3 JUMP JUMPDEST MSTORE PUSH2 0x2284 JUMP JUMPDEST PUSH2 0x24D6 SWAP5 POP PUSH2 0x5781 PUSH2 0x577A PUSH2 0x578F SWAP5 SWAP4 PUSH2 0x57C5 PUSH2 0x5788 SWAP5 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP8 POP SWAP4 SWAP5 POP POP POP PUSH2 0x5761 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP1 DUP4 MLOAD PUSH2 0x57E2 DUP5 MLOAD DUP3 PUSH2 0x1E0C JUMP JUMPDEST PUSH1 0x5 SHL SWAP4 ADD SWAP2 ADD MCOPY JUMP JUMPDEST SWAP3 SWAP2 SWAP1 SWAP4 DUP4 MLOAD PUSH2 0x57FB DUP2 PUSH2 0x1E22 JUMP JUMPDEST SWAP2 PUSH2 0x5805 DUP3 PUSH2 0x1E22 JUMP JUMPDEST SWAP7 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x59E1 JUMPI POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP2 PUSH1 0x40 MLOAD SWAP6 PUSH4 0x1309BD3D PUSH1 0xE3 SHL SWAP3 DUP4 DUP9 MSTORE PUSH1 0x20 SWAP9 DUP10 DUP10 DUP1 PUSH2 0x583F DUP5 PUSH1 0x4 DUP4 ADD PUSH2 0x4B87 JUMP JUMPDEST SUB DUP2 DUP10 GAS STATICCALL SWAP9 DUP10 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP10 PUSH2 0x59C2 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD DUP6 DUP2 MSTORE DUP11 DUP2 DUP1 PUSH2 0x5869 DUP12 PUSH1 0x4 DUP4 ADD PUSH2 0x4BA3 JUMP JUMPDEST SUB DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x20A JUMPI DUP11 PUSH2 0x578F PUSH2 0x58A4 SWAP4 PUSH2 0x589D SWAP4 DUP16 PUSH0 SWAP3 PUSH2 0x59A5 JUMPI JUMPDEST SWAP12 SWAP10 SWAP14 SWAP13 SWAP11 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 POP PUSH2 0x4971 JUMP JUMPDEST DUP1 SWAP4 PUSH2 0x5F1A JUMP JUMPDEST PUSH0 JUMPDEST DUP10 DUP2 LT PUSH2 0x5913 JUMPI POP POP POP POP PUSH2 0x58CA SWAP6 POP PUSH1 0x40 MLOAD DUP1 SWAP7 DUP2 SWAP5 DUP3 SWAP4 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x4BA3 JUMP JUMPDEST SUB SWAP2 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x20A JUMPI DUP4 PUSH2 0x578F SWAP4 PUSH2 0x58F0 SWAP3 PUSH2 0x4D30 SWAP8 PUSH0 SWAP3 PUSH2 0x58F6 JUMPI JUMPDEST POP POP PUSH2 0xB28 JUMP JUMPDEST SWAP1 PUSH2 0x498E JUMP JUMPDEST PUSH2 0x590C SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x58E9 JUMP JUMPDEST DUP7 SWAP9 SWAP10 SWAP6 SWAP8 POP DUP4 DUP14 DUP4 SWAP5 SWAP6 SWAP7 SWAP9 DUP4 PUSH2 0x5937 PUSH2 0x5930 DUP3 PUSH1 0x1 SWAP9 PUSH2 0x1E54 JUMP JUMPDEST MLOAD DUP10 PUSH2 0x5D49 JUMP JUMPDEST DUP1 PUSH2 0x5942 DUP4 DUP6 PUSH2 0x1E54 JUMP JUMPDEST MLOAD GT PUSH2 0x595E JUMPI JUMPDEST POP POP POP POP POP ADD SWAP1 DUP11 SWAP7 SWAP5 SWAP9 SWAP8 SWAP6 SWAP4 SWAP3 SWAP2 PUSH2 0x58A6 JUMP JUMPDEST DUP2 DUP4 PUSH2 0x597F PUSH2 0x5990 SWAP8 PUSH2 0x5989 SWAP5 PUSH2 0x5978 DUP6 PUSH2 0x491C SWAP10 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SUB PUSH2 0x4F33 JUMP JUMPDEST PUSH2 0x1AF9 DUP4 DUP9 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x1E54 JUMP JUMPDEST PUSH2 0x599A DUP3 DUP12 PUSH2 0x1E54 JUMP JUMPDEST MSTORE DUP5 DUP14 DUP11 DUP4 PUSH0 PUSH2 0x5949 JUMP JUMPDEST PUSH2 0x59BB SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST PUSH0 DUP16 PUSH2 0x5889 JUMP JUMPDEST PUSH2 0x59DA SWAP2 SWAP10 POP DUP11 RETURNDATASIZE DUP13 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP8 PUSH0 PUSH2 0x5852 JUMP JUMPDEST DUP1 PUSH2 0x5A0B PUSH2 0x5A06 PUSH2 0x59F4 PUSH1 0x1 SWAP5 DUP13 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x59FF DUP5 DUP8 PUSH2 0x1E54 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2284 JUMP JUMPDEST PUSH2 0xB1A JUMP JUMPDEST PUSH2 0x5A15 DUP3 DUP9 PUSH2 0x1E54 JUMP JUMPDEST MSTORE ADD PUSH2 0x5808 JUMP JUMPDEST PUSH1 0x7 SHR PUSH1 0x1 AND ISZERO PUSH2 0x5A29 JUMPI JUMP JUMPDEST PUSH4 0xEFE0265D PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP3 SWAP2 PUSH2 0x5A44 DUP5 MLOAD PUSH2 0x1E22 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x5A79 JUMPI DUP1 PUSH2 0x5A68 DUP6 DUP6 PUSH2 0x5A62 PUSH1 0x1 SWAP6 DUP8 PUSH2 0x1E54 JUMP JUMPDEST MLOAD PUSH2 0x5335 JUMP JUMPDEST PUSH2 0x5A72 DUP3 DUP10 PUSH2 0x1E54 JUMP JUMPDEST MSTORE ADD PUSH2 0x5A47 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP4 DUP5 ISZERO PUSH2 0x5B7F JUMPI PUSH2 0x5AB7 DUP4 PUSH2 0x5AB1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x2284 JUMP JUMPDEST PUSH2 0x5AD6 DUP6 PUSH2 0x159E DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP5 DUP2 SLOAD ADD SWAP1 SSTORE PUSH2 0x5AE5 DUP2 PUSH2 0x5D6A JUMP JUMPDEST PUSH2 0x5B00 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP3 PUSH0 DUP5 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F PUSH1 0x40 MLOAD DUP1 PUSH2 0x5B39 DUP8 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB SWAP1 LOG4 DUP3 EXTCODESIZE ISZERO PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH4 0x23DE6651 PUSH1 0xE0 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP3 SWAP1 DUP2 DUP4 DUP2 PUSH1 0x64 DUP2 ADD PUSH2 0x17BD JUMP JUMPDEST PUSH4 0xEC442F05 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x5BAF SWAP2 AND SWAP2 DUP3 PUSH2 0x56CC JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x5BD7 JUMPI JUMPDEST POP POP PUSH2 0x5BC5 JUMPI POP JUMP JUMPDEST PUSH4 0x5274AFE7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x5BEA SWAP3 POP PUSH1 0x20 DUP1 SWAP2 DUP4 ADD ADD SWAP2 ADD PUSH2 0x1F07 JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x5BBC JUMP JUMPDEST SWAP1 PUSH5 0xFFFFFFFFFF PUSH2 0x5C02 DUP3 PUSH2 0x1E22 JUMP JUMPDEST SWAP3 PUSH1 0x5A SHR AND PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x5C16 JUMPI POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x5 DUP1 DUP3 MUL SWAP1 DUP3 DUP3 DIV EQ DUP3 ISZERO OR ISZERO PUSH2 0x941 JUMPI DUP3 PUSH1 0x1F SWAP2 SHR AND SWAP1 PUSH1 0x4D DUP3 GT PUSH2 0x941 JUMPI PUSH1 0x1 SWAP2 PUSH1 0xA EXP PUSH2 0x5C47 DUP3 DUP8 PUSH2 0x1E54 JUMP JUMPDEST MSTORE ADD PUSH2 0x5C09 JUMP JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x42 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x941 JUMPI SWAP1 JUMP JUMPDEST SWAP1 SWAP4 SWAP3 PUSH0 SWAP5 PUSH2 0x5C84 DUP5 PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST MLOAD DUP2 DUP2 GT PUSH2 0x5C93 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH2 0x5CB9 SWAP6 SWAP7 POP SWAP2 PUSH2 0x5CA8 SWAP2 PUSH2 0x2433 SWAP4 SUB PUSH2 0x4F33 JUMP JUMPDEST SWAP3 PUSH1 0xA0 PUSH2 0x242A DUP3 PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x1E54 JUMP JUMPDEST SWAP1 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x154D JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH2 0x42F SWAP3 AND PUSH2 0x5369 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x4 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH4 0x5B3BFD2B PUSH1 0xE1 SHL DUP4 MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP3 PUSH2 0x5D28 JUMPI JUMPDEST POP DUP2 DUP2 LT PUSH2 0x5D13 JUMPI POP POP JUMP JUMPDEST PUSH4 0x718E4ADF PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x5D42 SWAP2 SWAP3 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x5D07 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0x2DE0 SWAP2 PUSH2 0x498E JUMP JUMPDEST SWAP1 PUSH2 0x42F SWAP2 PUSH1 0x80 SHR SWAP1 PUSH2 0x5369 JUMP JUMPDEST PUSH3 0xF4240 DUP2 LT PUSH2 0x5D77 JUMPI POP JUMP JUMPDEST PUSH4 0x34E3483F PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP1 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 SWAP6 SWAP4 SWAP5 SWAP1 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP2 DUP8 DUP4 PUSH1 0x24 DUP2 DUP8 DUP7 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP4 PUSH2 0x5EA1 JUMPI JUMPDEST POP DUP1 DUP4 LT PUSH2 0x5E7A JUMPI POP PUSH2 0x5DEA SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH1 0x40 MLOAD SWAP2 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 DUP5 DUP2 PUSH1 0x24 DUP2 DUP6 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP6 PUSH2 0x5E5B JUMPI JUMPDEST POP POP DUP2 DUP5 LT PUSH2 0x5E39 JUMPI POP POP PUSH2 0x5E36 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE JUMP JUMPDEST PUSH4 0x1149424D PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE POP PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH2 0x5E72 SWAP3 SWAP6 POP DUP1 RETURNDATASIZE LT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP3 PUSH0 DUP1 PUSH2 0x5E10 JUMP JUMPDEST PUSH4 0x1C6A5375 PUSH1 0xE0 SHL PUSH0 SWAP1 DUP2 MSTORE SWAP4 DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE POP PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH2 0x5EB9 SWAP2 SWAP4 POP DUP9 RETURNDATASIZE DUP11 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x5DC6 JUMP JUMPDEST SWAP1 PUSH2 0x5EE4 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x5ED5 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH4 0xA12F521 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x5F11 JUMPI JUMPDEST PUSH2 0x5EF5 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH4 0x9996B315 PUSH1 0xE0 SHL PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x5EED JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x4 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH4 0x273C1ADF PUSH1 0xE0 SHL DUP4 MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x20A JUMPI PUSH0 SWAP3 PUSH2 0x5F6B JUMPI JUMPDEST POP DUP2 DUP2 GT PUSH2 0x5F56 JUMPI POP POP JUMP JUMPDEST PUSH4 0xFA25837 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x5F85 SWAP2 SWAP3 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x203 JUMPI PUSH2 0x1F5 DUP2 DUP4 PUSH2 0x2CD JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x5F4A JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH4 0xFFFFFFFF DUP1 DUP1 SWAP5 AND SWAP2 AND ADD SWAP2 DUP3 GT PUSH2 0x941 JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH7 0x83429DD8621233 0xBF SWAP14 STATICCALL INVALID STOP DELEGATECALL SUB PUSH1 0xD4 KECCAK256 BLOCKHASH SWAP4 0xD8 PUSH26 0xBD8A2517BC175DC511EB64736F6C634300081A00330000000000 ","sourceMap":"2550:79546:53:-:0;;;;;;;;;-1:-1:-1;2550:79546:53;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;-1:-1:-1;;;;;2550:79546:53;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;:::o;:::-;;;;;;-1:-1:-1;;2550:79546:53;;;;;;;;;:::i;:::-;;;1083:103:27;;:::i;:::-;2707:73:54;;:::i;:::-;-1:-1:-1;;;;;2550:79546:53;;-1:-1:-1;2550:79546:53;;;7242:11;2550:79546;;;;;;;;;;;;-1:-1:-1;;;7296:30:53;;7320:4;2550:79546;7296:30;;2550:79546;;;;;;;;;;7296:30;;;;;;;2550:79546;7296:30;7391:32;7296:30;-1:-1:-1;7296:30:53;;;2550:79546;7336:18;;;;-1:-1:-1;;;;;2550:79546:53;;;7242:11;2550:79546;;;;;;;7336:18;2550:79546;7391:32;:::i;:::-;7656:19;;;;7652:532;;2550:79546;8215:6;;;;;:::i;:::-;1148:1:27;;:::i;:::-;2550:79546:53;;;;;;;;;;;;;;;;;7652:532;;-1:-1:-1;8215:6:53;7652:532;;7296:30;;;;2550:79546;7296:30;2550:79546;7296:30;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;:::i;2550:79546::-;;;;;;-1:-1:-1;;2550:79546:53;;;;54102:6;2550:79546;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;:::i;:::-;54053:6;2550:79546;;54026:10;;;;54053:6;:::i;:::-;54026:10;54102:6;:::i;:::-;2550:79546;;;54126:4;2550:79546;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;2550:79546:53;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;2550:79546:53;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;2550:79546:53;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2550:79546:53;;;;;;;;-1:-1:-1;;2550:79546:53;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2550:79546:53;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;-1:-1:-1;2550:79546:53;;;:::o;:::-;;;;;;:::i;:::-;;;;-1:-1:-1;;2550:79546:53;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10931:17;2550:79546;;;;;;;;;:::i;:::-;;;;;10931:17;:::i;:::-;2550:79546;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2550:79546:53;;;;;;;;;;;;;;;;;;;;54702:20;2550:79546;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;54702:20;:::i;2550:79546::-;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;2550:79546:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6980:19;2550:79546;;6980:19;:::i;:::-;2550:79546;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2550:79546:53;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;2550:79546:53;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;1083:103:27;;;:::i;:::-;2707:73:54;;:::i;:::-;3891:15;;;;:::i;:::-;;;:::i;:::-;-1:-1:-1;;;;;2550:79546:53;;-1:-1:-1;2550:79546:53;8407:11;2550:79546;;;-1:-1:-1;2550:79546:53;;;;;;;;;;;;;;;;;-1:-1:-1;;;2550:79546:53;1412:43:37;;;-1:-1:-1;;;;;2550:79546:53;;;;1412:43:37;;2550:79546:53;;;;;;;;;1412:43:37;;;;;2550:79546:53;1412:43:37;2550:79546:53;;1412:43:37;:::i;:::-;;:::i;:::-;-1:-1:-1;551:66:27;3051:52:29;2550:79546:53;;;:::i;:::-;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;2550:79546:53;;;;;;;-1:-1:-1;;;;;81346:15:53;2550:79546;;;;;;;;;;-1:-1:-1;;2550:79546:53;;;;53823:6;2550:79546;;;;;:::i;:::-;;;;;;:::i;:::-;;;53800:10;;53823:6;:::i;2550:79546::-;;;;;;-1:-1:-1;;2550:79546:53;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;-1:-1:-1;;;;;2550:79546:53;;;;;-1:-1:-1;2550:79546:53;-1:-1:-1;2550:79546:53;;7916:84:24;2550:79546:53;7916:84:24;2550:79546:53;-1:-1:-1;2550:79546:53;;7916:84:24;8984:24:54;8980:85;;-1:-1:-1;2550:79546:53;;;;53304:11;2550:79546;;;-1:-1:-1;2550:79546:53;;;;;;;;;;;;;;;-1:-1:-1;2550:79546:53;;-1:-1:-1;2550:79546:53;;-1:-1:-1;2550:79546:53;;;;;;;;53348:34;2550:79546;;;;;;;:::i;:::-;53348:34;;:::i;:::-;2550:79546;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;;;;;;;;;8980:85:54;9031:23;;;-1:-1:-1;9031:23:54;2550:79546:53;;;-1:-1:-1;9031:23:54;2550:79546:53;;;;;;-1:-1:-1;;2550:79546:53;;;;;551:66:27;2806:53:29;2550:79546:53;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2550:79546:53;;;;;;;;:::o;:::-;;;;;;;;;;:::o;37298:4015::-;;2707:73:54;;:::i;:::-;8882:4;-1:-1:-1;;;;;2550:79546:53;;;8882:4:54;:::i;:::-;37889:11:53;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;;37889:11;:::i;:::-;38387:75;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;;38387:75;:::i;:::-;38508:15;40511:103;38508:15;;;;2550:79546;38532:27;2550:79546;38532:20;;;;;2550:79546;38532:27;;:::i;:::-;38893:20;;38963:30;;;;38893:143;38963:30;;39007:19;;;;;;;38893:143;;:::i;:::-;2550:79546;39130:57;2550:79546;;2370:1:58;5866:205:57;958:1:58;7916:84:24;;5866:205:57;;39130:57:53;39126:897;;37298:4015;40511:103;;;;;;:::i;:::-;40451:163;;;;;40816:56;2550:79546;;7916:84:24;6405:203:57;958:1:58;7916:84:24;;6405:203:57;;40816:56:53;40812:495;;37298:4015;37524:23;;;;;;37298:4015;:::o;40812:495::-;2550:79546;;;;41028:268;2550:79546;40972:28;;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;;-1:-1:-1;;;;;2550:79546:53;;;39382:15;2550:79546;;;;;;;40972:28;2550:79546;-1:-1:-1;;;;;2550:79546:53;;;40972:28;2550:79546;;;41098:10;41028:268;;:::i;:::-;40812:495;;;;;;;39126:897;39382:28;39857:155;2550:79546;;;39382:28;;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;39382:28;39304:10;;39382:28;;:::i;:::-;39715:19;39682:31;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;;-1:-1:-1;;;;;2550:79546:53;;;39682:18;2550:79546;;;;;;;39682:31;39715:19;;:::i;:::-;39857:20;39931:30;;39979:19;;39857:155;;:::i;:::-;39126:897;;;;;2707:73:54;;;;:::i;:::-;10848:20:53;;;2550:79546;-1:-1:-1;;;;;8882:4:54;2550:79546:53;;;;8882:4:54;:::i;:::-;10980:20:53;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;10980:20;11016:30;;;2550:79546;11016:35;11012:90;;11116:23;;;2550:79546;-1:-1:-1;;;;;2550:79546:53;11143:24;11116:51;2550:79546;11143:24;;;2550:79546;-1:-1:-1;;;;;2550:79546:53;;;;-1:-1:-1;;;;;2550:79546:53;;;11116:51;2550:79546;;11116:51;11112:110;;11694:84;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;11694:84;11817:41;;;;;:::i;:::-;11907:58;;;;;;:::i;:::-;2550:79546;;958:1:58;7916:84:24;2042:1:58;7916:84:24;11976:992:53;;2707:73:54;2550:79546:53;;19097:20;;2550:79546;958:1:58;7916:84:24;;;13433:346:53;;2707:73:54;19097:20:53;;;;:::i;:::-;14060:185;;;;;;;2550:79546;14488:45;2550:79546;;7916:84:24;4435:180:57;958:1:58;7916:84:24;;4435:180:57;;14488:45:53;14484:507;;2707:73:54;2550:79546:53;;;;;;;;;:::i;:::-;;;;:::i;:::-;15005:41;;15062:28;;2772:1:54;;2707:73;:::o;15001:158:53:-;15121:27;;;;2772:1:54;2707:73;:::o;14484:507:53:-;2550:79546;;;;14633:37;;2550:79546;14704:276;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;14633:37;2550:79546;;;14839:10;;14704:276;;:::i;:::-;14484:507;;;;;;;;13433:346;2550:79546;;-1:-1:-1;;;;;2550:79546:53;13540:228;11143:24;13672:27;;2550:79546;;;13717:37;;;-1:-1:-1;;;;;2550:79546:53;;;39382:15;2550:79546;;;;;;;13717:37;13540:228;;;:::i;:::-;2550:79546;;13433:346;;11976:992;12163:37;2550:79546;;;;-1:-1:-1;;;;;2550:79546:53;;;;12163:37;;;-1:-1:-1;;;;;2550:79546:53;;;39382:15;2550:79546;;;;;;;12163:37;;;:::i;:::-;12617:19;12575:40;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;12575:40;12617:19;;:::i;:::-;12802:65;;;;;:::i;:::-;11116:23;12770:29;;2550:79546;19097:20;12899:58;;;;;:::i;:::-;11976:992;;;;11112:110;11190:21;;;-1:-1:-1;11190:21:53;;-1:-1:-1;11190:21:53;11012:90;11074:17;;;-1:-1:-1;11074:17:53;;-1:-1:-1;11074:17:53;2550:79546;;;;;;;;;;;;;;-1:-1:-1;2550:79546:53;;;:::o;:::-;;:::i;2707:73:54:-;;;:::i;:::-;568:1:61;8248:15:54;2550:79546:53;;7916:84:24;;8244:95:54;;54593:19:53;;;2550:79546;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;10124:13:54;2550:79546:53;;;54593:19;2550:79546;;;;10124:41:54;10120:113;;54770:27:53;1083:103:27;;;;:::i;:::-;2550:79546:53;54770:25;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;54770:25;54593:19;2550:79546;-1:-1:-1;;;54770:27:53;;2550:79546;;;;;54770:27;;;;;;55831:15;54770:27;2550:79546;54770:27;;;2707:73:54;2550:79546:53;;54855:24;2550:79546;;;;-1:-1:-1;;;;;2550:79546:53;;;;54855:24;:::i;:::-;2550:79546;;-1:-1:-1;;;;;2550:79546:53;54935:21;;;;;2550:79546;;;54935:21;;:::i;:::-;568:1:61;2550:79546:53;54972:16;;2550:79546;;;;:::i;:::-;;;;:::i;:::-;54972:44;568:1:61;;55114:169:53;2550:79546;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2550:79546:53;;;55114:169;;:::i;:::-;55302:70;55068:215;;;;;;;;55302:70;;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;55302:70;2550:79546;54593:19;2550:79546;55302:70;;;;2550:79546;;;;;;;;;;;;;;;;;;55302:70;;;;54968:782;2550:79546;;;;;:::i;:::-;;;;:::i;:::-;55764:32;;55831:15;2550:79546;55816:30;;;55812:116;;55941:34;56231:19;2550:79546;55941:34;;55760:417;;;;2550:79546;-1:-1:-1;;;;;2550:79546:53;;;;56231:19;:::i;:::-;1148:1:27;;:::i;:::-;2772::54;;2707:73;:::o;55812:116:53:-;-1:-1:-1;;;2550:79546:53;55873:40;54770:27;2550:79546;;;;;;;55873:40;;2550:79546;55873:40;55760:417;56024:15;2550:79546;56010:29;;;56006:114;;56133:33;56231:19;2550:79546;56133:33;;55760:417;;;;;56006:114;-1:-1:-1;;;2550:79546:53;56066:39;54770:27;2550:79546;;;;;;;55873:40;54968:782;55485:167;2550:79546;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2550:79546:53;;;55485:167;;:::i;:::-;55671:68;55439:213;;;;;;;;55671:68;;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;55671:68;;;;54968:782;;54770:27;;;;2550:79546;54770:27;2550:79546;54770:27;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;10120:113:54;10188:34;;;;2550:79546:53;10188:34:54;;2550:79546:53;;;10188:34:54;8244:95;8305:23;;;2550:79546:53;8305:23:54;;2550:79546:53;8305:23:54;2550:79546:53;;;;;;;;;;;;;:::i;5061:1817::-;;;;2811:38:38;2550:79546:53;9187:17:56;2806:53:29;;;2550:79546:53;5148:82;;;;5061:1817;2550:79546;;;:::i;:::-;7019:10;2811:38:38;:::i;:::-;5339:1533:53;;;5061:1817;:::o;5339:1533::-;9342:26:56;2806:53:29;5384:98:53;;-1:-1:-1;3051:52:29;;6832:27:53;9851:16:56;6832:27:53;:::i;5384:98::-;5448:19;;;-1:-1:-1;5448:19:53;;-1:-1:-1;5448:19:53;5148:82;2550:79546;3051:52:29;;5148:82:53;;25234:4237;;2707:73:54;;:::i;:::-;8882:4;-1:-1:-1;;;;;2550:79546:53;;;8882:4:54;:::i;:::-;25826:11:53;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;25826:11;25914:4;9851:16:56;2806:53:29;2550:79546:53;;;-1:-1:-1;;;;;2550:79546:53;;;;9702:26:56;;25914:4:53;:::i;:::-;26413:73;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;;26413:73;:::i;:::-;26532:15;28685:99;26532:15;;;;2550:79546;26556:26;:19;;;;;;2550:79546;26556:26;;:::i;:::-;26981:19;;27052:30;;;;26981:144;27052:30;;27096:19;;;;;;;26981:144;;:::i;:::-;2550:79546;27140:54;2550:79546;;2191:1:58;4860:199:57;958:1:58;7916:84:24;;4860:199:57;;27140:54:53;27136:890;;25234:4237;28685:99;;;;;;:::i;:::-;28626:158;;;;;28982:53;2550:79546;;7916:84:24;5365:197:57;958:1:58;7916:84:24;;5365:197:57;;28982:53:53;28978:487;;25234:4237;25454:23;;;;;;;25234:4237;:::o;28978:487::-;29190:264;2550:79546;;29135:28;;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;29135:28;2550:79546;;;29257:10;29190:264;;:::i;:::-;28978:487;;;;;;;27136:890;27385:28;27859:156;2550:79546;;;27385:28;;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;27385:28;27269:10;;27385:28;:::i;:::-;27721:17;27688:31;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;27688:31;27721:17;;:::i;:::-;27859:19;27934:30;;27982:19;;27859:156;;:::i;:::-;27136:890;;;;;81600:69;81644:18;;;;;;;;81950:144;82001:9;81997:69;;1019:819:33;82013:1:53;1019:819:33;;82013:1:53;1019:819:33;;81346:15:53;-1:-1:-1;;;;;81346:15:53;2550:79546;1019:819:33;;;82013:1:53;1019:819:33;;;;;;82013:1:53;1019:819:33;;;82013:1:53;1019:819:33;1192:349:27;551:66;2806:53:29;;1316:93:27;;1529:4;3051:52:29;;1192:349:27:o;1316:93::-;1368:30;;;-1:-1:-1;1368:30:27;;-1:-1:-1;1368:30:27;1547:106;1640:5;551:66;3051:52:29;1547:106:27:o;2786:145:54:-;9187:17:56;2806:53:29;2550:79546:53;2837:88:54;;2786:145::o;2837:88::-;2894:20;;;-1:-1:-1;2894:20:54;;-1:-1:-1;2894:20:54;3450:119;;3544:17;3450:119;3544:17;:::i;:::-;2550:79546:53;-1:-1:-1;;;2550:79546:53;;;;3543:18:54;2550:79546:53;-1:-1:-1;2550:79546:53;3543:18:54;;:::i;8289:494:62:-;;;;;8422:32;;;;;:::i;:::-;8468:37;;;8464:313;;8289:494;;;;;;:::o;8464:313::-;8525:25;;;8521:132;;2550:79546:53;;-1:-1:-1;;;;;2550:79546:53;;;;7477:19:62;;;7473:84;;2550:79546:53;;;7571:21:62;;;7567:87;;7664:17;:33;:17;:24;:17;;;-1:-1:-1;;;;;2550:79546:53;;;7664:11:62;2550:79546:53;;;;;;;7664:17:62;2550:79546:53;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;7664:33:62;2550:79546:53;;8004:60:62;;;;;;2550:79546:53;;-1:-1:-1;;;8004:60:62;;-1:-1:-1;;;;;2550:79546:53;;;8004:60:62;;;2550:79546:53;;;;;;;;;;;;;;;8238:38:62;;;;7494:1;2550:79546:53;;;;;8004:60:62;;;;;;;;;8464:313;-1:-1:-1;2550:79546:53;;;;;;;;;;;;;8238:38:62;;;;8464:313;;;;;;;8004:60;;;;;;:::i;:::-;;;:::i;:::-;;;;7567:87;-1:-1:-1;;;7494:1:62;7615:28;-1:-1:-1;;;;;2550:79546:53;;7519:27:62;2550:79546:53;;;55873:40;7473:84:62;-1:-1:-1;;;7494:1:62;7519:27;-1:-1:-1;;;;;2550:79546:53;;7519:27:62;2550:79546:53;;;55873:40;8521:132:62;-1:-1:-1;;;;;8577:61:62;;;;;;2550:79546:53;8577:61:62;2550:79546:53;;;;;;8577:61:62;;6402:966;;;;;-1:-1:-1;;;;;2550:79546:53;;;;6500:18:62;;;6496:80;;2550:79546:53;;;6590:16:62;;;6586:78;;6696:21;:15;;;-1:-1:-1;;;;;2550:79546:53;;;6696:9:62;2550:79546:53;;;;;;;6696:21:62;2550:79546:53;6731:20:62;;;6727:109;;2550:79546:53;;;6870:21:62;:15;;;-1:-1:-1;;;;;2550:79546:53;;;6696:9:62;2550:79546:53;;;;;;;6870:21:62;2550:79546:53;7095:19:62;:15;;;-1:-1:-1;;;;;2550:79546:53;;;6696:9:62;2550:79546:53;;;;;;;7095:19:62;2550:79546:53;;;;;;;;;7150:32:62;2550:79546:53;;7150:32:62;;;;2550:79546:53;;;;;;;;7150:32:62;;;;7307:54;;;;;2550:79546:53;;-1:-1:-1;;;7307:54:62;;-1:-1:-1;;;;;2550:79546:53;;;7307:54:62;;;2550:79546:53;;;;;;;;;;;;;-1:-1:-1;;2550:79546:53;;;-1:-1:-1;2550:79546:53;;;;7307:54:62;;;;;;;;;;;6402:966;:::o;7307:54::-;;;;;;:::i;6727:109::-;-1:-1:-1;;;6516:1:62;6774:51;-1:-1:-1;;;;;2550:79546:53;;6774:51:62;2550:79546:53;;;;;;;;;55873:40;6586:78:62;-1:-1:-1;;;6516:1:62;6629:24;-1:-1:-1;;;;;2550:79546:53;;7519:27:62;2550:79546:53;;;55873:40;6496:80:62;-1:-1:-1;;;6516:1:62;6541:24;-1:-1:-1;;;;;2550:79546:53;;7519:27:62;2550:79546:53;;;55873:40;9293:163:54;-1:-1:-1;;;;;2550:79546:53;;9604:15:54;2550:79546:53;9604:15:54;2550:79546:53;;1038:1:58;2550:79546:53;9604:15:54;2550:79546:53;;7916:84:24;;;9367:25:54;9363:87;;9293:163;:::o;9363:87::-;9415:24;;;9604:15;9415:24;;2550:79546:53;;9604:15:54;9415:24;5894:129;2550:79546:53;6394:25:54;;2550:79546:53;6375:15:54;:44;;:79;;;5894:129;5751:67;;-1:-1:-1;;;;;2550:79546:53;;-1:-1:-1;2550:79546:53;-1:-1:-1;2550:79546:53;;;-1:-1:-1;2550:79546:53;;7916:84:24;;;958:1:58;7916:84:24;;2958:30:58;;2550:79546:53;2790:99:58;;2958:30;2550:79546:53;3212:2:58;2550:79546:53;;;;;;;7592:82:54;;;5894:129;6800:73;;;;;;5894:129;:::o;6800:73::-;-1:-1:-1;;;;6846:16:54;-1:-1:-1;;;;;2550:79546:53;7519:27:62;2550:79546:53;;;55873:40;7592:82:54;7627:47;7648:26;;7608:66;7648:26;;6019:108:24;;;7627:47:54;:::i;:::-;2550:79546:53;;;;7608:66:54;6375:15;7608:66;;7592:82;;;;;5751:67;5794:13;;;-1:-1:-1;5794:13:54;;-1:-1:-1;5794:13:54;6375:79;2550:79546:53;7916:84:24;6423:15:54;2550:79546:53;7916:84:24;;;6375:79:54;;13206:573;2550:79546:53;;;;;;;;:::i;:::-;-1:-1:-1;2550:79546:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1083:103:27;;:::i;:::-;-1:-1:-1;;;;;2550:79546:53;;-1:-1:-1;2550:79546:53;13497:18:54;2550:79546:53;;;-1:-1:-1;2550:79546:53;;-1:-1:-1;2550:79546:53;;;-1:-1:-1;2550:79546:53;;;13570:14:54;2550:79546:53;;;;-1:-1:-1;2550:79546:53;;13604:11:54;2550:79546:53;;;-1:-1:-1;2550:79546:53;;;;;;;:::i;:::-;1947:24:60;;2002:26;;;:::i;:::-;1981:47;;2061:24;;;:::i;:::-;2038:47;;2127:24;;;:::i;:::-;2095:56;;2194:74;2550:79546:53;;;2194:74:60;:::i;:::-;2161:107;;2300:24;;;:::i;:::-;2278:46;;2550:79546:53;;1038:1:58;;7916:84:24;1038:1:58;7916:84:24;;;;2365:119:60;;;;13206:573:54;2365:190:60;;;;13206:573:54;-1:-1:-1;2586:13:60;;;;;;;13719:24:54;;;;;;;;;;;;;;13745:26;13719:24;13745:26;13719:24;-1:-1:-1;;;;;2550:79546:53;;;39682:18;2550:79546;;;;;;;13719:24:54;13745:26;-1:-1:-1;;;;;2550:79546:53;;;13745:20:54;2550:79546:53;;;;;;;13745:26:54;;;;:::i;:::-;1148:1:27;;:::i;2601:3:60:-;2663:15;;;;;;;;2755:33;2663:15;2720:20;2663:15;2550:79546:53;2649:33:60;2663:15;;:18;:15;:18;:15;;:18;:::i;:::-;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;2649:33:60;2550:79546:53;:::i;:::-;2720:20:60;2550:79546:53;;;;;;;;;;2720:20:60;2550:79546:53;2755:18:60;;:33;;;;;:::i;:::-;;;:::i;:::-;;2827:23;;;:::i;:::-;2802:48;:19;;;:48;:::i;:::-;2550:79546:53;2932:17:60;-1:-1:-1;;;;;1460:31:21;;2932:17:60;;;:::i;:::-;2550:79546:53;;;;3059:78:60;;3800:23;;2550:79546:53;;;3800:69:60;;;;2601:3;3977:660;;;;2601:3;;;;;;2571:13;2550:79546:53;2571:13:60;;3977:660;2550:79546:53;4236:195:60;2550:79546:53;4157:23:60;2550:79546:53;4062:56:60;2550:79546:53;;4062:56:60;:::i;:::-;4157:20;;:23;:::i;:::-;2550:79546:53;;;4236:195:60;;:::i;:::-;4454:30;;4450:173;;3977:660;;;;;;;4450:173;4586:17;4545:39;;;;:::i;:::-;4586:17;;:::i;:::-;4450:173;;;;;;3800:69;2550:79546:53;;;;;;;:::i;:::-;;;;:::i;:::-;3827:42:60;3800:69;;;;3059:78;3114:8;;;;;;;;;;2365:190;2550:79546:53;;;;-1:-1:-1;958:1:58;7916:84:24;1192:1:58;7916:84:24;2550:79546:53;2365:190:60;;;:119;2424:56;;;;;:::i;:::-;:60;;2365:119;;;;13206:573:54;2550:79546:53;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1083:103:27;;:::i;:::-;-1:-1:-1;;;;;2550:79546:53;;;;13497:18:54;2550:79546:53;;;;;;;;;;;;;;13570:14:54;2550:79546:53;;;;;;;13604:11:54;2550:79546:53;;;;;;;;;;;:::i;:::-;1947:24:60;;2002:26;;;:::i;:::-;1981:47;;2061:24;;;:::i;:::-;2038:47;;2127:24;;;:::i;:::-;2095:56;;2194:74;2550:79546:53;;;2194:74:60;:::i;:::-;2161:107;;2300:24;;;:::i;:::-;2278:46;;2550:79546:53;;1038:1:58;;7916:84:24;1038:1:58;7916:84:24;;;;2365:119:60;;;;13206:573:54;2365:190:60;;;;13206:573:54;2550:79546:53;2586:13:60;;;;;;;13719:24:54;;;;;;;;;;;;;;13745:26;13719:24;13745:26;13719:24;-1:-1:-1;;;;;2550:79546:53;;;39682:18;2550:79546;;;;;;;2601:3:60;2663:15;;;;;;;;2755:33;2663:15;2720:20;2663:15;2550:79546:53;2649:33:60;2663:15;;:18;:15;:18;:15;;:18;:::i;2755:33::-;;2827:23;;;:::i;:::-;2802:48;:19;;;:48;:::i;:::-;2550:79546:53;2932:17:60;-1:-1:-1;;;;;1460:31:21;;2932:17:60;;;:::i;:::-;2550:79546:53;;;;3059:78:60;;3800:23;;2550:79546:53;;;3800:69:60;;;;2601:3;3977:660;;;;2601:3;;;;;;2571:13;2550:79546:53;2571:13:60;;3977:660;2550:79546:53;4236:195:60;2550:79546:53;4157:23:60;2550:79546:53;4062:56:60;2550:79546:53;;4062:56:60;:::i;4236:195::-;4454:30;;4450:173;;3977:660;;;;;;;4450:173;4586:17;4545:39;;;;:::i;:::-;4586:17;;:::i;:::-;4450:173;;;;;;3800:69;2550:79546:53;;;;;;;:::i;:::-;;;;:::i;:::-;3827:42:60;3800:69;;;;3059:78;3114:8;;;;;;;;;;2365:190;2550:79546:53;;;;-1:-1:-1;958:1:58;7916:84:24;1192:1:58;7916:84:24;2550:79546:53;2365:190:60;;;:119;2424:56;;;;;:::i;:::-;:60;;2365:119;;;;1418:149:20;1500:6;1496:65;;1418:149::o;1496:65::-;1529:21;;;;;;;;2550:79546:53;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;8800:610:22;;;2550:79546:53;;;9122:17:22;2550:79546:53;;;;9122:17:22;;;:::i;:::-;9185:21;;;:::i;:::-;9222:13;9234:1;9237:10;;;;;;9381:22;;;;;8800:610;:::o;9249:3::-;9289:10;2688:41;9289:10;2550:79546:53;9289:10:22;;;:::i;:::-;2550:79546:53;2689:22:22;9327:17;;;;:::i;:::-;2550:79546:53;9346:13:22;;;;:::i;:::-;2550:79546:53;2689:22:22;;:::i;:::-;2688:41;:::i;:::-;9268:92;;;;:::i;:::-;2550:79546:53;;9222:13:22;;2550:79546:53;;-1:-1:-1;2550:79546:53;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;17171:657:57:-;-1:-1:-1;;;;;;17433:291:57;17171:657;;;17433:291;2550:79546:53;;;-1:-1:-1;;;;;2550:79546:53;;;;17541:11:57;;;;2550:79546:53;;;;;:::i;:::-;17695:15:57;17541:11;17570:21;;;2550:79546:53;17648:29:57;;;17695:15;;;2550:79546:53;17570:21:57;2550:79546:53;;;;;;;;;;;17433:291:57;;;;;;:::i;:::-;;2550:79546:53;;17433:291:57;;;;;;;-1:-1:-1;17433:291:57;;;17171:657;2550:79546:53;;17416:406:57;;17171:657::o;17416:406::-;17765:46;;;-1:-1:-1;17765:46:57;17433:291;-1:-1:-1;17765:46:57;17433:291;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;6574:856:60;6819:15;;;;;2550:79546:53;7033:13:60;-1:-1:-1;7048:13:60;;;;;;6574:856;;;;;:::o;7063:3::-;38442:19:53;7120:18:60;7395:17;-1:-1:-1;;;;;7120:18:60;7107:35;7120:21;:18;;;;;:21;:::i;:::-;;7107:35;:::i;:::-;7082:60;:19;;;;;:60;:::i;:::-;2550:79546:53;;-1:-1:-1;2550:79546:53;;;;-1:-1:-1;2550:79546:53;;1460:31:21;7395:17:60;;;:::i;:::-;2550:79546:53;7033:13:60;;6574:856;6819:15;;;;;2550:79546:53;7033:13:60;2550:79546:53;7048:13:60;;;;;;6574:856;;;;;:::o;7063:3::-;2550:79546:53;7120:18:60;7395:17;-1:-1:-1;;;;;7120:18:60;7107:35;7120:21;:18;;;;;:21;:::i;7107:35::-;7082:60;:19;;;;;:60;:::i;:::-;2550:79546:53;;;;;;;;;;1460:31:21;7395:17:60;;;:::i;:::-;2550:79546:53;7033:13:60;;2550:79546:53;;;;;;;:::i;:::-;-1:-1:-1;2550:79546:53;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;2550:79546:53;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;58547:1;2550:79546;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;41784:8110::-;;1083:103:27;;:::i;:::-;2550:79546:53;;;;:::i;:::-;42243:15;;;;;42291:31;42243:15;;2550:79546;;;;42291:31;:::i;:::-;42432;42478:11;;;2550:79546;;;;;;:::i;:::-;;;;:::i;:::-;42478:47;;42555:21;;;;2550:79546;;42607:31;2550:79546;;42607:31;:::i;:::-;42733:29;42673:175;42733:29;42478:11;42733:29;;;42780:25;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;;-1:-1:-1;;;;;2550:79546:53;-1:-1:-1;2550:79546:53;2487:14:62;2550:79546:53;;;-1:-1:-1;2550:79546:53;;2402:112:62;;42780:25:53;42673:175;;:::i;:::-;9851:16:56;43519:65:53;9851:16:56;2806:53:29;2550:79546:53;;;-1:-1:-1;;;;;2550:79546:53;;;;9702:26:56;;2574:386:23;-1:-1:-1;2550:79546:53;;;;-1:-1:-1;2550:79546:53;;-1:-1:-1;2550:79546:53;;;;-1:-1:-1;2550:79546:53;2806:53:29;2574:386:23;;43519:65:53;43515:419;;42474:3712;46214:21;;;2550:79546;46200:35;;;46196:128;;46358:11;;;;;;;:::i;:::-;42243:15;48028:32;;;2550:79546;46423:3;2550:79546;;46401:20;;;;;46567:21;;;;;:::i;:::-;2550:79546;46630:17;;;:::i;:::-;46755:16;;;;:::i;:::-;2550:79546;46755:16;;47076:30;47135:22;47076:30;47135:19;47076:33;:30;;47010:169;47076:30;;;:33;:::i;:::-;2550:79546;47135:19;;;:22;:::i;:::-;2550:79546;47010:169;;:::i;:::-;47201:31;;;;;:::i;:::-;2550:79546;46751:737;47531:18;;:15;;;:18;:::i;:::-;2550:79546;47630:20;;:23;:20;;;:23;:::i;:::-;2550:79546;47615:38;;47611:147;;47853:12;;;48673:75;47853:12;;;;48700:47;47853:12;48008:236;47853:12;48064:180;47853:12;;2550:79546;47853:12;;;;48766:19;47853:12;;:::i;:::-;2550:79546;48142:17;;;;:::i;:::-;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;;48064:180;;;:::i;:::-;2550:79546;;;48008:236;:::i;:::-;2550:79546;48673:23;:20;2550:79546;48673:20;;;:23;:::i;:::-;2550:79546;;;48700:47;;:::i;:::-;48673:75;;:::i;48766:19::-;2550:79546;46386:13;;47611:147;47719:20;:23;:20;47680:63;47719:20;;:23;:::i;:::-;2550:79546;-1:-1:-1;;;2550:79546:53;47680:63;-1:-1:-1;;;;;2550:79546:53;;;6774:51:62;2550:79546:53;;;;;;;;46751:737;47453:16;;;;;;:::i;:::-;2550:79546;46751:737;;46401:20;;;;;;;;;;;48910:8;46401:20;;;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;;48910:8;:::i;:::-;49692:195;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;;49084:11;49109;49084;42243:15;49084:11;;2550:79546;;;;-1:-1:-1;;;;;2550:79546:53;;;;49097:10;49109:11;;:::i;:::-;49136:17;;:::i;:::-;49132:189;;46381:2429;49632:11;2550:79546;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;-1:-1:-1;;;;;2550:79546:53;49632:11;;:::i;:::-;49797:25;2550:79546;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;:::i;49797:25::-;2550:79546;49692:195;-1:-1:-1;;;;;2550:79546:53;;;;:::i;:::-;;;46214:21;2550:79546;;;;;;;49692:195;;;:::i;:::-;;;;1148:1:27;;:::i;:::-;42137:23:53;;;41784:8110;:::o;49132:189::-;49298:11;2550:79546;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;-1:-1:-1;;;;;2550:79546:53;49298:11;;:::i;:::-;49132:189;;46196:128;-1:-1:-1;;;2550:79546:53;46258:55;54770:27;2550:79546;;;;;;;;55873:40;43515:419;2550:79546;;;43632:52;2550:79546;;;;;;;;43632:52;:::i;:::-;43707:13;2550:79546;43744:3;2550:79546;;43722:20;;;;;43791:21;;43859:42;43791:21;;43859:42;43884:17;43791:21;;;:46;2550:79546;43791:21;;;;;:::i;:::-;2550:79546;43791:46;:::i;:::-;43771:66;;;;:::i;43884:17::-;2550:79546;43859:42;;;;:::i;:::-;2550:79546;43859:42;:::i;:::-;;;:::i;:::-;2550:79546;;43707:13;;43722:20;;;;;;;;;;;;43515:419;;42474:3712;2550:79546;;43969:41;2550:79546;;;;;:::i;:::-;;;;:::i;:::-;43954:56;43969:41;;44026:57;2550:79546;;44026:57;:::i;:::-;44113:21;;;2550:79546;44148:42;;44257:20;;44293:434;44351:376;44257:20;;44113:21;44224:54;2550:79546;44257:20;;;44224:54;:::i;:::-;44204:17;;2550:79546;;;;44443:29;42478:11;44443:29;;;2550:79546;44687:22;2550:79546;44613:52;44566:25;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;44566:25;2550:79546;;44613:52;:::i;:::-;2550:79546;;-1:-1:-1;;;;;2550:79546:53;;;44687:22;44351:376;;:::i;:::-;2550:79546;;;44293:434;;;:::i;:::-;2550:79546;42474:3712;;43950:2236;44763:42;2550:79546;;;;;;;;:::i;:::-;;;;:::i;:::-;44748:57;44763:42;;44821:57;2550:79546;;44821:57;:::i;:::-;45159:358;44894:42;2550:79546;45003:20;;;45073:39;44970:54;45003:20;;44970:54;:::i;:::-;44950:17;;;2550:79546;;;;45073:20;:39;:::i;:::-;2550:79546;45038:74;2550:79546;;45038:74;;:::i;:::-;2550:79546;45231:29;45313:37;42478:11;45231:29;;;2550:79546;;45313:37;;;:::i;:::-;2550:79546;45411:52;45368:25;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;45368:25;2550:79546;;45411:52;:::i;:::-;2550:79546;45481:22;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;45481:22;45159:358;;:::i;:::-;45127:390;;42474:3712;;44744:1442;2550:79546;;45553:26;2550:79546;;;;;:::i;:::-;;;;:::i;:::-;45538:41;45553:26;;45595:59;2550:79546;;45595:59;:::i;:::-;2550:79546;45817:68;:27;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;45817:68;45939:21;;;;2550:79546;42478:11;46025:29;;;46076:15;;;;2550:79546;;-1:-1:-1;;;45817:292:53;;2550:79546;;;45939:21;2550:79546;;46076:15;;2550:79546;;45817:292;;46076:15;45907:10;45817:292;;;;:::i;:::-;;;;;;;;;;2550:79546;;;;;;;45817:292;;;45534:652;45753:356;;;;42474:3712;;45817:292;;;;;;;;;;;2550:79546;45817:292;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;45534:652;46147:28;;;2550:79546;46147:28;;2550:79546;46147:28;2550:79546;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;18837:1504:57:-;;;;;;;;2550:79546:53;;;;-1:-1:-1;;;;;2550:79546:53;;;;19361:11:57;;;;2550:79546:53;;;;;:::i;:::-;19361:11:57;19470:29;;;19513:15;;;;;2550:79546:53;;;;;;;;;;;19266:272:57;;;;;;;;;:::i;:::-;;2550:79546:53;-1:-1:-1;;;;;2550:79546:53;19266:272:57;;;-1:-1:-1;19266:272:57;;;;;;;;;-1:-1:-1;;;19266:272:57;;;18837:1504;2550:79546:53;;;;19553:76:57;;18837:1504;19549:159;;7916:84:24;;;958:1:58;7916:84:24;;2550:79546:53;19806:94:57;;19915:13;;-1:-1:-1;19915:13:57;;-1:-1:-1;19915:13:57;7916:84:24;;;19910:382:57;20302:32;;;;18837:1504;:::o;19968:3::-;2550:79546:53;;19930:36:57;;;;;19991:28;;;;:::i;:::-;2550:79546:53;;20022:20:57;;;:23;:20;;;:23;:::i;:::-;2550:79546:53;-1:-1:-1;19987:295:57;;-1:-1:-1;2550:79546:53;;19968:3:57;19915:13;;19987:295;20226:23;20136:15;20176:28;20136:15;:18;;:15;;;20072:195;20136:15;;;:18;:::i;:::-;20176:28;;:::i;:::-;2550:79546:53;20226:20:57;;:23;:::i;:::-;2550:79546:53;-1:-1:-1;;;;20072:195:57;-1:-1:-1;;;;;2550:79546:53;;;6774:51:62;2550:79546:53;;;;;;;;19930:36:57;;;19549:159;19652:45;;;-1:-1:-1;19652:45:57;19266:272;-1:-1:-1;19652:45:57;19553:76;2550:79546:53;;;;;19573:56:57;;19553:76;;19266:272;;;;;;;;;-1:-1:-1;19266:272:57;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;15171:545:53;2550:79546;;;15171:545;2550:79546;;;;;;;;;;;;;15657:52;2550:79546;;;-1:-1:-1;2550:79546:53;;;;;;-1:-1:-1;2550:79546:53;;15552:65;2550:79546;;;;-1:-1:-1;2550:79546:53;;;;;;;-1:-1:-1;2550:79546:53;;15305:26;15379:15;15451:58;2550:79546;15379:15;;;;2550:79546;15363:57;-1:-1:-1;;;;;15396:23:53;;2550:79546;15396:23;;2550:79546;;15363:57;;:::i;:::-;2550:79546;;15467:15;15484:24;2550:79546;15484:24;;2550:79546;;15451:58;;:::i;:::-;2550:79546;;15552:65;:::i;:::-;2550:79546;;;15657:52;:::i;:::-;2550:79546;;15171:545::o;2550:79546::-;;;;:::i;:::-;;:::o;15722:700::-;;;;2550:79546;;;;;;;:::i;:::-;-1:-1:-1;2550:79546:53;;-1:-1:-1;2550:79546:53;;;;;;;;;-1:-1:-1;2550:79546:53;;;;-1:-1:-1;2550:79546:53;;;;-1:-1:-1;2550:79546:53;;;;;;;;;;;;:::i;:::-;;;16128:29;;2550:79546;16193:29;;;2550:79546;;;;16294:18;;2550:79546;16376:24;;;2550:79546;16030:385;2550:79546;;:::i;:::-;16030:385;;;:::i;:::-;2550:79546;16030:385;;2550:79546;;16030:385;;2550:79546;;16030:385;;2550:79546;;16030:385;;2550:79546;16338:10;2550:79546;16030:385;;2550:79546;;16030:385;;2550:79546;15722:700;:::o;2550:79546::-;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2550:79546:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;9557:350:57;9678:44;9557:350;;2550:79546:53;-1:-1:-1;;;;;;2550:79546:53;;;;;;;;;;;;;;9678:44:57;;2550:79546:53;9678:44:57;;;2550:79546:53;;;;;;:::i;:::-;;;;;;;9678:44:57;2550:79546:53;;9678:44:57;;;;;;;-1:-1:-1;9678:44:57;;;9557:350;2550:79546:53;;9674:227:57;;9557:350::o;9674:227::-;9855:35;;;-1:-1:-1;9855:35:57;9678:44;-1:-1:-1;9855:35:57;9678:44;;;;;;;;;;;;;;:::i;:::-;;;;16599:1317:53;;;;2550:79546;;;;;:::i;:::-;;;;:::i;:::-;17000:41;;17060:30;1946:22:22;465:4:25;17060:30:53;17212:38;17060:30;838:5:25;17060:30:53;;2550:79546;17141:30;17212:19;17141:49;:30;;;;2550:79546;;17141:49;;:::i;:::-;2550:79546;17212:19;;;2550:79546;;17212:38;;:::i;1946:22:22:-;838:5:25;:::i;:::-;2550:79546:53;16599:1317;:::o;17000:909::-;2688:41:22;17287:30:53;17831:60;:39;17287:30;2689:22:22;17287:30:53;;2550:79546;17366:30;17831:19;17366:50;17397:18;17366:30;;;;17397:18;;2550:79546;;;17366:50;;:::i;:::-;2550:79546;17831:19;;;2550:79546;;17831:39;;:::i;:::-;2550:79546;17831:60;:::i;:::-;2689:22:22;;:::i;2550:79546:53:-;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;8443:856:57:-;2550:79546:53;;;-1:-1:-1;;;8709:136:57;;2550:79546:53;8709:136:57;;;2550:79546:53;;;;;;8443:856:57;;2550:79546:53;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;8709:136:57;2550:79546:53;;8709:136:57;;;;;;;-1:-1:-1;;;8709:136:57;;;8443:856;2550:79546:53;;8856:93:57;;19917:10:16;9153:38:57;;9149:109;;8443:856;:::o;9149:109::-;9214:33;;;-1:-1:-1;9214:33:57;8709:136;-1:-1:-1;9214:33:57;8856:93;8899:39;;;-1:-1:-1;8899:39:57;8709:136;-1:-1:-1;8899:39:57;8709:136;;;;;;2550:79546:53;8709:136:57;2550:79546:53;8709:136:57;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;1083:103:27;-1:-1:-1;1083:103:27;;;;;;;:::i;:::-;2550:79546:53;;:::i;:::-;;;;;;;:::i;:::-;;;;:::i;:::-;19189:41;19185:325;;1083:103:27;19543:34:53;;;;;;2550:79546;;19543:34;:::i;:::-;19743:20;19733:54;19743:20;;;2550:79546;19733:38;:31;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;19733:38;2550:79546;;;;;;;;;;;;19733:54;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;19733:54:53;;;1083:103:27;19706:81:53;;19821:24;;;:::i;:::-;2550:79546;;;;;:::i;:::-;;;;:::i;:::-;20225:41;;20502:29;2550:79546;20502:29;;2550:79546;;;20659:620;20724:30;;;;21205:60;:39;20724:50;20755:18;;;2550:79546;;;20724:50;;:::i;:::-;2550:79546;21205:19;;;;;2550:79546;;21205:39;;:::i;:60::-;20659:620;;;:::i;:::-;21325:30;;;;2550:79546;21294:83;;;21411:24;21205:19;21411:24;;2550:79546;21396:39;;;21392:134;;20221:2688;;2550:79546;22993:23;;2550:79546;;;;;;-1:-1:-1;;;;;2550:79546:53;;;;23018:11;;;;:::i;:::-;23054:24;;2550:79546;;;;;;-1:-1:-1;;;;;2550:79546:53;;;;23080:12;;;;:::i;:::-;2550:79546;;;;-1:-1:-1;;;;;2550:79546:53;;;-1:-1:-1;;;;;2550:79546:53;;;23377:215;;;;;:::i;:::-;23315:28;;;;;23345;2550:79546;23345:28;2550:79546;;;;;;;23054:24;23724:20;;;;;;;:39;;;;:::i;:::-;2550:79546;23724:53;;;;:::i;:::-;2550:79546;;23724:84;;;:::i;:::-;23822:19;;;;:::i;:::-;23907:18;;2550:79546;;;23939:20;;;;:40;;;;:::i;:::-;2550:79546;23939:55;;;;:::i;:::-;24008:19;;;;:::i;:::-;2550:79546;;-1:-1:-1;;;;;2550:79546:53;;;;;39682:18;2550:79546;;;;;24356:20;;;2550:79546;;24356:39;;;:::i;:::-;2550:79546;24409:29;;;;;;2550:79546;;24409:48;;;:::i;:::-;2550:79546;24308:159;;;:::i;:::-;2550:79546;;24274:31;;;2550:79546;;;;;;;;;;24274:31;2550:79546;24560:20;2550:79546;;24560:40;;;:::i;:::-;2550:79546;24614:29;;2550:79546;;24614:49;;;:::i;:::-;2550:79546;24512:161;;;:::i;:::-;2550:79546;;24477:32;;2550:79546;;;;;;;;;;24477:32;2550:79546;;;;;;23054:24;24899:27;;;2550:79546;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;;;24721:257;;2550:79546;;24721:257;1148:1:27;;;;;;:::i;21392:134:53:-;-1:-1:-1;;;;21462:49:53;54770:27;2550:79546;;;;;;;55873:40;20221:2688;22169:27;;;;;22118:150;22169:27;22283:61;22169:27;;2550:79546;5832:87:25;;;;;;;;22118:150:53;;;:::i;:::-;2550:79546;;;;22283:61;:::i;:::-;22535:30;22472:182;22535:49;:30;;;;2550:79546;;22535:49;;:::i;:::-;2550:79546;22602:38;:19;;;;2550:79546;;22602:38;;:::i;:::-;2550:79546;22472:182;;;:::i;:::-;22721:30;;;;2550:79546;22669:83;;22785:24;22602:19;22785:24;;2550:79546;22771:38;;;22767:132;;20221:2688;;;19733:54;;;;;;;;;;;;;;;:::i;:::-;;;;;19185:325;19345:34;;;19428:71;19345:69;2550:79546;;19386:27;;;2550:79546;19345:69;;:::i;:::-;2550:79546;;;;;19428:71;:::i;:::-;2550:79546;;19185:325;;2550:79546;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;;;;;;;:::i;10826:2303:57:-;;;;;;;2550:79546:53;;;;;:::i;:::-;;;;:::i;:::-;11281:41:57;;11338:25;;;;2550:79546:53;11281:177:57;;;2550:79546:53;;;;;;:::i;:::-;11653:23:57;;;;;;;2550:79546:53;;;-1:-1:-1;;;;;2550:79546:53;;;;11704:24:57;;;;2550:79546:53;;;-1:-1:-1;;;;;2550:79546:53;;;;11876:29:57;;;;;;2550:79546:53;;11876:44:57;;;:::i;:::-;2550:79546:53;11963:29:57;;11993:14;;;2550:79546:53;11963:45:57;;;:::i;:::-;2550:79546:53;12190:20:57;11993:14;12190:20;;2550:79546:53;;;-1:-1:-1;;;;;2550:79546:53;;;;12238:24:57;;;;2550:79546:53;;;:::i;:::-;11566:711:57;;;;;:::i;:::-;-1:-1:-1;;;;;2550:79546:53;11993:14:57;11566:711;;2550:79546:53;-1:-1:-1;;;;;2550:79546:53;11566:711:57;;;2550:79546:53;11704:24:57;11566:711;;2550:79546:53;11876:29:57;11566:711;;2550:79546:53;11566:711:57;;;2550:79546:53;12238:24:57;11566:711;;2550:79546:53;11566:711:57;;;2550:79546:53;11566:711:57;;;2550:79546:53;;;-1:-1:-1;;;;;2550:79546:53;11566:711:57;;;2550:79546:53;-1:-1:-1;;;;;2550:79546:53;11566:711:57;;;2550:79546:53;11566:711:57;;;2550:79546:53;;;-1:-1:-1;;;11527:760:57;;2550:79546:53;;;;;;;11527:760:57;;;;;;:::i;:::-;;2550:79546:53;-1:-1:-1;;;;;2550:79546:53;11527:760:57;;2550:79546:53;11527:760:57;;;;;;;2550:79546:53;;;11527:760:57;;;11281:177;2550:79546:53;;;12298:188:57;;958:1:58;7916:84:24;;;2550:79546:53;12584:100:57;;2550:79546:53;;;;;;:::i;:::-;;;;:::i;:::-;12712:41:57;:103;;;11281:177;12711:227;;;;11281:177;12694:380;;13084:38;10826:2303;:::o;12694:380::-;11566:711;13038:24;2550:79546:53;-1:-1:-1;;;2550:79546:53;12970:93:57;54770:27:53;2550:79546;;;;;;;;55873:40;12711:227:57;2550:79546:53;7916:84:24;2550:79546:53;;;;;:::i;:::-;;;;:::i;:::-;12833:42:57;:104;;12711:227;12833:104;12913:24;11566:711;12913:24;;2550:79546:53;12879:58:57;;12711:227;;12712:103;12791:24;11566:711;12791:24;;2550:79546:53;12757:58:57;;12712:103;;12584:100;12647:26;;;;:::o;12298:188::-;12441:34;;;2550:79546:53;12441:34:57;11527:760;2550:79546:53;12441:34:57;11527:760;;;;;;;;;;;-1:-1:-1;11527:760:57;;;;;;:::i;:::-;;;;;;;11281:177;11432:25;;;;2550:79546:53;11281:177:57;;;;;;10464:315:54;-1:-1:-1;;;;;2550:79546:53;;;;;-1:-1:-1;2550:79546:53;10575:13:54;2550:79546:53;;;;-1:-1:-1;2550:79546:53;;;;;10575:46:54;;;10571:202;;10464:315;;:::o;10571:202::-;10711:51;;;-1:-1:-1;10711:51:54;;2550:79546:53;;;;-1:-1:-1;10711:51:54;56530:199:53;;56637:20;-1:-1:-1;56624:99:53;;56530:199;:::o;56624:99::-;-1:-1:-1;;;;;56680:32:53;;;;;;2550:79546;56680:32;2550:79546;;56680:32;;2550:79546;;;;;;;-1:-1:-1;2550:79546:53;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;57131:8001::-;;;;2550:79546;;;:::i;:::-;57387:25;;;;;;57942:44;;57970:15;;;:::i;:::-;2550:79546;;;;;;;;;57942:44;;;;;2550:79546;;;;;;;;57942:44;;2550:79546;-1:-1:-1;;;;;2550:79546:53;;57942:44;;;;;;:48;:44;2550:79546;57942:44;;;57383:1195;57942:48;;:::i;:::-;57887:104;57383:1195;;58605:34;;-1:-1:-1;;;;;2550:79546:53;;;58605:20;2550:79546;;;;;;;58605:34;2550:79546;58917:17;;;:::i;:::-;58913:109;;2550:79546;;;;;;1616:3:21;2550:79546:53;;;;59036:54;;;;;2550:79546;;;;65051:18;2550:79546;59472:152;2550:79546;59524:51;-1:-1:-1;;;;;2550:79546:53;-1:-1:-1;;;;;2550:79546:53;65080:45;2550:79546;1616:3:21;2550:79546:53;;1460:31:21;;59524:51:53;:::i;:::-;59472:152;:::i;:::-;59638:34;;;;-1:-1:-1;;;;;2550:79546:53;;;58605:20;2550:79546;;;;;;;59638:34;2550:79546;65051:18;:::i;:::-;2550:79546;65080:45;:::i;59032:5982::-;60076:32;;;;2550:79546;60076:32;;;2550:79546;:::i;:::-;60244:25;;;61317:71;61318:57;61215;;;;:::i;:::-;61318:29;;;:::i;:::-;:57;:::i;:::-;61317:71;:::i;:::-;2550:79546;-1:-1:-1;;;;;2550:79546:53;;61458:24;;;;;;:::i;:::-;2550:79546;;-1:-1:-1;;;61525:61:53;;;;;2550:79546;;;61580:4;2550:79546;;;;;61525:61;;2550:79546;;;;;;-1:-1:-1;;61525:61:53;;;;;;64699:239;61525:61;;64847:77;61525:61;64847:58;-1:-1:-1;;;;;61525:61:53;;;;;65080:45;61525:61;;;64063:21;61525:61;65051:18;61525:61;64751:51;61525:61;64751:78;61525:61;-1:-1:-1;;;;;61525:61:53;2550:79546;61525:61;;;60240:3221;61501:85;60240:3221;;;;2550:79546;63717:54;;;;;:::i;:::-;64063:21;:::i;:::-;1460:31:21;64751:51:53;:::i;:::-;:78;:::i;:::-;64847:58;;:::i;:77::-;64699:239;;:::i;61525:61::-;;;;;;;;;;;;;;:::i;:::-;;;;60240:3221;62502:54;;62598:66;62599:52;62502:54;;;;:::i;:::-;62599:27;;;:::i;:::-;:52;:::i;62598:66::-;2550:79546;;-1:-1:-1;;;62917:47:53;;;;;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;62917:47;;2550:79546;;;62917:47;2550:79546;;;;62917:47;;;;;;63320:24;62917:47;2550:79546;62917:47;;;60240:3221;63320:24;;;;:::i;:::-;2550:79546;;-1:-1:-1;;;63391:55:53;;62917:47;63391:55;;2550:79546;;;63440:4;2550:79546;;;;;;;;;;;;;-1:-1:-1;;63391:55:53;;;;;;;65080:45;63391:55;64847:77;63391:55;64847:58;63391:55;;;-1:-1:-1;;;;;63391:55:53;;-1:-1:-1;;;;;63391:55:53;;;;;;;65051:18;63391:55;;64751:51;63391:55;64699:239;63391:55;;64751:78;63391:55;64063:21;63391:55;2550:79546;63391:55;;;60240:3221;63364:82;;60240:3221;;;;;63391:55;;;;;;-1:-1:-1;63391:55:53;;;;;;:::i;:::-;;;;;62917:47;;;;;;;;;;;;;;:::i;:::-;;;;58913:109;-1:-1:-1;58950:61:53;;-1:-1:-1;;;58950:61:53:o;57942:44::-;;;;;;;;;;;;;;:::i;:::-;;;;57383:1195;58508:41;;58533:15;;;:::i;:::-;2550:79546;;;;;;;;;58508:41;;;;;2550:79546;;;;;;;;58508:41;;2550:79546;-1:-1:-1;;;;;2550:79546:53;;58508:41;;;;;;:45;:41;2550:79546;58508:41;;;57383:1195;58508:45;;:::i;:::-;57383:1195;;;58508:41;;;;;;;;;;;;;;:::i;:::-;;;;65538:6987;;;2550:79546;;;:::i;:::-;65796:25;;;;;;;66347:43;;66374:15;;;:::i;:::-;2550:79546;;;;;;;;;66347:43;;;;;2550:79546;;;;;;;;66347:43;;2550:79546;-1:-1:-1;;;;;2550:79546:53;;66347:43;;;;;;:47;:43;2550:79546;66347:43;;;:47;;:::i;:::-;66292:103;65792:1205;;67024:34;;-1:-1:-1;;;;;2550:79546:53;;;58605:20;2550:79546;;;;;;;67024:34;2550:79546;67334:17;;;:::i;:::-;67330:109;;1237:14:21;;;;;;;;-1:-1:-1;;;;;1237:14:21;1460:31;;;;67453:53:53;;;;;2550:79546;;;;-1:-1:-1;;;;;67878:149:53;2550:79546;;72498:19;2550:79546;67961:52;2550:79546;72417:40;2550:79546;1616:3:21;2550:79546:53;67961:52;:::i;:::-;1460:31:21;;2550:79546:53;67878:149;:::i;:::-;68041:34;;;;-1:-1:-1;;;;;2550:79546:53;;;58605:20;2550:79546;;;;;;;68041:34;2550:79546;67449:4958;2550:79546;72417:40;:::i;:::-;72498:19;:::i;67449:4958::-;68480:32;;;;;;2550:79546;68480:32;;2550:79546;:::i;:::-;68648:25;;;69682:65;69683:51;69586:54;;;;:::i;69682:65::-;2550:79546;;-1:-1:-1;;;69792:72:53;;;;;2550:79546;;;69843:4;2550:79546;;;;;;;;;;;;69792:72;2550:79546;;;-1:-1:-1;;;;;;2550:79546:53;;69792:72;;;;;;72092:239;69792:72;;72241:76;69792:72;72241:52;69792:72;72144:79;69792:72;;-1:-1:-1;;;;;72498:19:53;69792:72;;71421:21;69792:72;;72417:40;69792:72;;;;;;72144:57;69792:72;2550:79546;69792:72;;;68644:2484;69765:99;68644:2484;;;;2550:79546;71421:21;;:::i;:::-;72144:57;:::i;:79::-;2550:79546;1616:3:21;2550:79546:53;72241:52;:::i;72092:239::-;72345:34;;;;-1:-1:-1;;;;;2550:79546:53;;;58605:20;2550:79546;;;;;;;72345:34;2550:79546;67449:4958;;69792:72;;;;;;;;;;;;;;:::i;:::-;;;;68644:2484;70922:72;70923:58;70820:57;;;;:::i;70922:72::-;2550:79546;;-1:-1:-1;;;71036:77:53;;;;;2550:79546;;;71092:4;2550:79546;;;;;;;;;;;71036:77;2550:79546;;;-1:-1:-1;;;;;;2550:79546:53;;71036:77;;;;;;;72092:239;71036:77;;72241:76;-1:-1:-1;;;;;72241:52:53;71036:77;72144:79;71036:77;;;72498:19;71036:77;71421:21;71036:77;;72417:40;71036:77;;;;;;;;72144:57;71036:77;2550:79546;71036:77;;;68644:2484;71012:101;68644:2484;;;;;71036:77;;;;;;;;;;;;;;:::i;:::-;;;;65792:1205;66923:45;;66952:15;;;:::i;:::-;2550:79546;;;;;;;;;66923:45;;;;;2550:79546;;;;;;;;66923:45;;2550:79546;-1:-1:-1;;;;;2550:79546:53;;66923:45;;;;;;:49;:45;2550:79546;66923:45;;;:49;;:::i;:::-;65792:1205;;;6697:118:23;3831:53:29;;2550:79546:53;6806:1:23;2550:79546:53;;;;;;;3051:52:29;6697:118:23:o;2966:315::-;;-1:-1:-1;2550:79546:53;;;;-1:-1:-1;2550:79546:53;;-1:-1:-1;2550:79546:53;;;25914:4;2550:79546;-1:-1:-1;2550:79546:53;3051:52:29;2966:315:23:o;6714:614:22:-;;;2550:79546:53;;;7038:17:22;2550:79546:53;;;;7038:17:22;;;:::i;:::-;7101:21;;;:::i;:::-;7138:13;7150:1;7153:10;;;;;;7299:22;;;;;6714:614;:::o;7165:3::-;7205:10;465:4:25;838:5;7205:10:22;2550:79546:53;7205:10:22;;;:::i;:::-;2550:79546:53;1946:22:22;7245:17;;;;:::i;:::-;2550:79546:53;7264:13:22;;;;:::i;838:5:25:-;2550:79546:53;7184:94:22;;;;:::i;:::-;2550:79546:53;;7138:13:22;;2550:79546:53;;-1:-1:-1;2550:79546:53;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;13587:644:57:-;;-1:-1:-1;;;;;;13842:288:57;13587:644;;;;13842:288;2550:79546:53;;;-1:-1:-1;;;;;2550:79546:53;;;;13947:11:57;;;;2550:79546:53;;;;;:::i;:::-;14101:15:57;13947:11;14014:22;;;2550:79546:53;14054:29:57;;;14101:15;;;2550:79546:53;;;;;;;;;;;;;13842:288:57;;;;;;:::i;:::-;;2550:79546:53;;13842:288:57;;;;;;;-1:-1:-1;13842:288:57;;;13587:644;2550:79546:53;;13825:400:57;;13587:644::o;13825:400::-;14171:43;;;-1:-1:-1;14171:43:57;13842:288;-1:-1:-1;14171:43:57;13842:288;;;;;;;;;;;;;;:::i;:::-;;;;2550:79546:53;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;30165:6883::-;;;1083:103:27;;:::i;:::-;2550:79546:53;;;:::i;:::-;30616:15;;;;30663:31;30616:15;;2550:79546;;;;30663:31;:::i;:::-;30850:11;;;2550:79546;;;;;;:::i;:::-;;;;:::i;:::-;30850:44;;30925:22;2550:79546;30925:22;;2550:79546;31082:31;2550:79546;;31082:31;:::i;:::-;31207:29;31148:175;31207:29;30850:11;31207:29;;;31254:25;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;31254:25;31148:175;;:::i;:::-;30846:2980;;2550:79546;33915:22;;2550:79546;33900:37;;;33896:133;;34063:12;;;;;;;:::i;:::-;30616:15;35719:32;;;2550:79546;34129:3;2550:79546;;;34107:20;;;;;34148:19;34270:20;34148:19;34270:20;:::i;:::-;2550:79546;34332:16;;;:::i;:::-;34456:15;;;;:::i;:::-;2550:79546;34456:15;;34716:166;34779:30;;34838:22;34779:30;34838:19;34779:33;:30;;;;;:33;:::i;34838:22::-;2550:79546;34716:166;;:::i;:::-;34905:29;;;;;:::i;:::-;2550:79546;34452:735;35230:18;;:15;;;:18;:::i;:::-;35329:19;;;:22;:19;;;:22;:::i;:::-;2550:79546;35315:36;;35311:142;;35545:11;;;36311:72;35545:11;36311:37;35545:11;;;;35699:236;35545:11;35755:180;35545:11;;2550:79546;35545:11;;;;36401:19;35545:11;;:::i;35699:236::-;2550:79546;36311:23;:20;2550:79546;36311:20;;;:23;:::i;:::-;2550:79546;36311:37;:::i;:::-;2550:79546;;36311:72;;:::i;36401:19::-;2550:79546;34092:13;;35311:142;35415:19;:22;:19;35378:60;35415:19;;:22;:::i;:::-;2550:79546;-1:-1:-1;;;2550:79546:53;35378:60;-1:-1:-1;;;;;2550:79546:53;;;6774:51:62;2550:79546:53;;;;;;;;34452:735;35153:15;;;;;:::i;:::-;2550:79546;34452:735;;34107:20;;;;;;;;;;;;36545:8;34107:20;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;36545:8;36851:190;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;;36779:9;36790:12;36779:9;30616:15;36779:9;;2550:79546;;;;-1:-1:-1;;;;;2550:79546:53;;;;36790:12;;:::i;:::-;36952:25;2550:79546;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;:::i;36952:25::-;2550:79546;36851:190;-1:-1:-1;;;;;2550:79546:53;;;;:::i;:::-;;;35329:19;2550:79546;;;;;;;36851:190;;;:::i;33896:133::-;-1:-1:-1;;;2550:79546:53;33960:58;54770:27;2550:79546;;;;;;;55873:40;30846:2980;31359:25;2550:79546;;;;;:::i;:::-;;;;:::i;:::-;31344:40;31359:25;;31400:46;2550:79546;;31400:46;:::i;:::-;31480:42;2550:79546;;31480:42;:::i;:::-;31536:16;2550:79546;31566:40;31340:2486;30846:2980;;31340:2486;2550:79546;31642:27;2550:79546;;;;;:::i;:::-;;;;:::i;:::-;31627:42;31642:27;;31685:57;2550:79546;;31685:57;:::i;:::-;32083:294;31759:40;32022:12;32001:19;;;;;32022:12;:::i;:::-;30850:11;32143:29;;;2550:79546;32228:25;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;32228:25;32271:52;2550:79546;;32271:52;:::i;:::-;2550:79546;32341:22;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;32341:22;32083:294;;:::i;:::-;32050:327;;31623:2203;30846:2980;;31623:2203;2550:79546;;32413:39;2550:79546;;;;;:::i;:::-;;;;:::i;:::-;32398:54;32413:39;;2550:79546;;;32468:57;2550:79546;;32468:57;:::i;:::-;2550:79546;32557:22;;2550:79546;32613:54;;;;:::i;:::-;32736:432;32793:375;32593:17;;;2550:79546;;;;32682:40;;32883:29;;30850:11;32883:29;;;2550:79546;33128:22;2550:79546;33054:52;33007:25;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;33128:22;32793:375;;:::i;:::-;2550:79546;;;32736:432;;;:::i;:::-;2550:79546;30846:2980;;32394:1432;2550:79546;33204:23;2550:79546;;;;;:::i;:::-;;;;:::i;:::-;33189:38;33204:23;;33243:56;2550:79546;;33243:56;:::i;:::-;2550:79546;33463:65;:27;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;;;33463:65;2550:79546;33624:22;;2550:79546;33668:29;30850:11;33668:29;;;33719:15;;;;;;2550:79546;33463:289;2550:79546;;;;;;;;;;;;33463:289;;33550:10;33204:23;33463:289;;;:::i;:::-;;;;;;;;;;2550:79546;;;;;;;33463:289;;;33185:641;33399:353;;;;33185:641;30846:2980;;33463:289;;;;;;;;;;;2550:79546;33463:289;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;33185:641;33790:25;;;2550:79546;33790:25;33204:23;2550:79546;33790:25;2550:79546;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;15237:1479:57:-;;;;;;;;2550:79546:53;;;;-1:-1:-1;;;;;2550:79546:53;;;;15750:11:57;;;2550:79546:53;;;;;:::i;:::-;15750:11:57;15858:29;;;15901:15;;;;2550:79546:53;;;;;;;;;;;;;;15658:268:57;;;;;;;;;:::i;:::-;;2550:79546:53;-1:-1:-1;;;;;2550:79546:53;15658:268:57;;;-1:-1:-1;15658:268:57;;;;;;;;;-1:-1:-1;;;15658:268:57;;;15237:1479;2550:79546:53;;;;15941:74:57;;15237:1479;15937:154;;7916:84:24;;;958:1:58;7916:84:24;;2550:79546:53;16189:93:57;;16297:13;;;;;;;-1:-1:-1;16292:376:57;7916:84:24;;;16292:376:57;16678:31;;;;;15237:1479;:::o;16349:3::-;2550:79546:53;;16312:35:57;;;;;16372:27;;;;:::i;:::-;2550:79546:53;16402:19:57;;;;:22;:19;;;:22;:::i;:::-;2550:79546:53;-1:-1:-1;16368:290:57;;-1:-1:-1;2550:79546:53;;16349:3:57;16297:13;;16368:290;16514:15;;16603:22;16514:15;16554:27;16514:15;:18;;16451:192;16514:15;;;;;:18;:::i;16603:22::-;2550:79546:53;-1:-1:-1;;;;16451:192:57;-1:-1:-1;;;;;2550:79546:53;;;6774:51:62;2550:79546:53;;;;;;;;16312:35:57;;;15937:154;16038:42;;;-1:-1:-1;16038:42:57;15658:268;-1:-1:-1;16038:42:57;15941:74;2550:79546:53;;;;;15961:54:57;;15941:74;;15658:268;;;;;;;;;-1:-1:-1;15658:268:57;;;;;;:::i;:::-;;;;;;3804:110:54;3891:15;;3804:110;3891:15;:::i;:::-;;;:::i;15788:287::-;;2550:79546:53;15932:3:54;2550:79546:53;;15913:17:54;;;;;-1:-1:-1;;;;;15955:9:54;;;;;:::i;:::-;2550:79546:53;;;;;15955:18:54;15951:65;;2550:79546:53;;15898:13:54;;15913:17;-1:-1:-1;;;;;15913:17:54;16043:25;;;2550:79546:53;16043:25:54;2550:79546:53;16043:25:54;2550:79546:53;;;16043:25:54;34375:314:49;34568:16;34552:33;;34548:105;;34375:314;:::o;34548:105::-;34608:34;;;;;;2550:79546:53;;34608:34:49;;4346:904:54;4485:10;;4481:23;;-1:-1:-1;;;;;9520:18:56;2550:79546:53;;;4494:1:54;2550:79546:53;;;;4708:15:54;2550:79546:53;4494:1:54;2550:79546:53;2806:53:29;4708:15:54;;;:::i;:::-;4738:9;;;;-1:-1:-1;;;9342:26:56;3831:53:29;;2550:79546:53;;;;;;;;3051:52:29;4734:423:54;4494:1;2550:79546:53;;;;4494:1:54;2550:79546:53;3051:52:29;4346:904:54:o;4734:423::-;;4940:217;5113:31;9342:26:56;5113:31:54;:::i;:::-;4734:423;;4481:23;4497:7;;:::o;2657:309:62:-;-1:-1:-1;;;;;2550:79546:53;2657:309:62;2550:79546:53;;;;;;2822:16:62;2550:79546:53;;;;;;;;2854:24:62;:::o;2818:142::-;2916:33;2550:79546:53;2916:24:62;2550:79546:53;;;;2916:11:62;2550:79546:53;;;;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;2916:33:62;2550:79546:53;2909:40:62;:::o;2550:79546:53:-;;;;;;;;;;;;;;;;;;-1:-1:-1;2550:79546:53;;-1:-1:-1;2550:79546:53;;-1:-1:-1;2550:79546:53;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;-1:-1:-1;2550:79546:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;2550:79546:53;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;;;;;;;:::o;4659:1499:60:-;4963:20;;;;;2550:79546:53;5006:13:60;-1:-1:-1;5021:13:60;;;;;;4659:1499;;;;;;:::o;5036:3::-;5070:15;:18;;2550:79546:53;5070:15:60;;;;;:18;:::i;:::-;5188:30;5127:20;;;2550:79546:53;;;;;;;;;;5127:20:60;2550:79546:53;-1:-1:-1;;;;;1460:31:21;1371:127;;5188:30:60;5423:23;:20;;;:23;:::i;:::-;2550:79546:53;5404:42:60;;5400:565;;5036:3;6054:20;;6002:139;6054:23;:20;;;:23;:::i;:::-;2550:79546:53;6095:32:60;:29;;;;;:32;:::i;:::-;2550:79546:53;6002:139:60;;:::i;:::-;5979:20;;;2550:79546:53;;;;;;;;;;5979:20:60;2550:79546:53;;5006:13:60;;5400:565;5777:173;5736:38;5680;5841:91;5889:42;5680:38;;;2550:79546:53;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;5680:38:60;2550:79546:53;5908:20:60;:23;:20;;;:23;:::i;:::-;2550:79546:53;5889:42:60;;:::i;:::-;2550:79546:53;6095:29:60;2550:79546:53;5841:91:60;:::i;:::-;5777:173;;:::i;:::-;5736:38;;2550:79546:53;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;5736:38:60;2550:79546:53;5400:565:60;;;;1573:170:20;1666:6;;;;;1573:170;;1666:16;;1573:170;1662:75;;;;1573:170::o;1666:16::-;1676:6;;;-1:-1:-1;1666:16:20;;;;2550:79546:53;;465:4:25;2550:79546:53;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;7436:424:60:-;2550:79546:53;;;;;:::i;:::-;;;;:::i;:::-;7589:31:60;;;7636:21;;465:4:25;7585:269:60;7436:424::o;7585:269::-;2550:79546:53;;7691:19:60;2550:79546:53;;:::i;:::-;7678:32:60;7691:19;;7733:22;:30;2550:79546:53;7733:22:60;:32;:22;;2550:79546:53;-1:-1:-1;;;;;2550:79546:53;;;7733:30:60;2550:79546:53;;-1:-1:-1;;;7733:32:60;;2550:79546:53;;;;;7733:32:60;;;;;;;2550:79546:53;7733:32:60;;;7726:39;7674:180;7436:424::o;7733:32::-;;;;:22;:32;:22;:32;;;;;;;:::i;7674:180::-;7803:40;;;2550:79546:53;7803:40:60;;2550:79546:53;7803:40:60;7866:704;;;8372:29;465:4:25;838:5;8372:191:60;7866:704;8058:20;:48;:20;;;;;:48;:::i;:::-;2550:79546:53;1946:22:22;8466:42:60;:30;;;;;:42;:::i;:::-;2550:79546:53;8522:31:60;:19;;;;;:31;:::i;838:5:25:-;2550:79546:53;8372:29:60;;;:191;:::i;7866:704::-;;;8372:29;2688:41:22;8372:191:60;7866:704;8058:20;:48;:20;;;;;:48;:::i;:::-;2550:79546:53;2689:22:22;8466:42:60;:30;;;;;:42;:::i;:::-;2550:79546:53;8522:31:60;:19;;;;;:31;:::i;2688:41:22:-;8372:29:60;;;:191;:::i;5369:233:59:-;958:1:58;7916:84:24;;;2550:79546:53;5461:135:59;;5369:233::o;5461:135::-;5535:50;;;-1:-1:-1;5535:50:59;958:1:58;-1:-1:-1;5535:50:59;3666:227;958:1:58;7916:84:24;;;3756:131:59;;3666:227::o;3756:131::-;3828:48;;;-1:-1:-1;3828:48:59;958:1:58;-1:-1:-1;3828:48:59;1835:554:20;2550:79546:53;;1994:19:20;;2029:13;2041:1;2044:10;;;;;;2286:20;;;;;2282:73;;1835:554;:::o;2282:73::-;2329:15;;;2041:1;2329:15;;2041:1;2329:15;2056:3;2079:15;;;;:::i;:::-;2550:79546:53;2075:187:20;;2056:3;2550:79546:53;;2029:13:20;;2075:187;2123:20;;;2119:97;;2233:14;2075:187;;2119:97;2174:23;;;2041:1;2174:23;;2041:1;2174:23;6731:255:59;6019:108:24;6731:255:59;958:1:58;6019:108:24;;19669:4:16;2550:79546:53;;;;;;;;;;;;;;;6731:255:59;:::o;2550:79546:53:-;;;;;16942:1:52;2550:79546:53;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;17017:1:52;2550:79546:53;;;;;;;;;:::i;16306:3888:52:-;;;;;;2550:79546:53;;16842:24:52;;;;:::i;:::-;16930:13;16942:1;16945:13;;;;;;17136:26;:43;:26;;;;;:::i;:43::-;17107:72;;;;:::i;:::-;2550:79546:53;;;;;;;17730:57:52;;;;;;;;;;;;;:::i;:::-;;2550:79546:53;-1:-1:-1;;;;;2550:79546:53;;17730:57:52;;;;;;;16942:1;17730:57;;;16925:104;2550:79546:53;;;18181:53:52;;;;17730:57;18181:53;;;;17730:57;18181:53;;;:::i;:::-;;2550:79546:53;-1:-1:-1;;;;;2550:79546:53;;18181:53:52;;;;;;;1744:19:25;18478:81:52;18181:53;18533:26;18478:52;18765:67;18181:53;18499:30;18181:53;1744:19:25;19124:55:52;18181:53;;17730:57;18181:53;;;16942:1;18181:53;;;16925:104;1744:19:25;;:::i;:::-;18313:14:52;;;;;:::i;:::-;18499:30;:::i;:::-;2550:79546:53;18478:52:52;;:::i;:::-;18533:26;;;:::i;18478:81::-;465:4:25;;5832:87;;;;;;1744:19;;:::i;18765:67:52:-;18921:26;:32;:26;;;;;:::i;:32::-;18892:61;;;;:::i;:::-;2550:79546:53;-1:-1:-1;;;;;2550:79546:53;;19124:55:52;;;;;;;;17730:57;19124:55;;;:::i;:::-;;2550:79546:53;;19124:55:52;;;;;;;20104:83;19124:55;20125:43;19124:55;16942:1;19124:55;;;16925:104;19282:24;;19316:35;19282:24;;:::i;:::-;19316:35;;;:::i;:::-;2550:79546:53;20125:43:52;;:::i;:::-;20104:83;;:::i;:::-;16306:3888;:::o;19124:55::-;19316:35;19124:55;;;;19282:24;19124:55;17730:57;19124:55;17730:57;19124:55;;;;;;;:::i;:::-;;;;;;18181:53;17730:57;18181:53;;;;17730:57;18181:53;;;;;;;:::i;:::-;;;;17730:57;;;;;;;;;;;;;;;:::i;:::-;;;;;16960:3;16996:18;:22;:18;17017:1;16996:18;;;:::i;:::-;2550:79546:53;16996:22:52;:::i;:::-;16979:39;;;;:::i;:::-;2550:79546:53;;16930:13:52;;2550:79546:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;21079:2229:52:-;;;;2550:79546:53;;;;;;;;22208:67:52;;-1:-1:-1;;;;;1744:19:25;;;;;:::i;:::-;21662:14:52;;;;:::i;:::-;2550:79546:53;;;;;;;;;;;22208:67:52;;;;;;;;:::i;:::-;;2550:79546:53;;22208:67:52;;;;;;23286:15;22208:67;22859:32;22208:67;22973:38;22208:67;23114:37;22208:67;23161:35;22208:67;-1:-1:-1;22208:67:52;;;21079:2229;22367:30;:43;:30;;22648:63;22367:30;;;;:::i;:43::-;22667:30;;;;;:::i;:::-;2550:79546:53;22648:63:52;;:::i;22973:38::-;2550:79546:53;;;;23114:37:52;:::i;:::-;23161:35;;;:::i;:::-;2550:79546:53;23286:15:52;:::i;22208:67::-;22648:63;22208:67;;22367:30;22208:67;;22367:43;22208:67;;;;;;;;;;;:::i;:::-;;;;;;;2550:79546:53;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;4619:1444:52:-;;;;5749:30;2550:79546:53;;5749:30:52;:::i;:::-;5794:13;5806:1;5830:3;2550:79546:53;;5809:19:52;;;;;6003:25;:11;;;;;:::i;:::-;2550:79546:53;6003:25:52;:::i;:::-;2550:79546:53;;;;;;;;;5986:60:52;;;;:::i;:::-;2550:79546:53;;5794:13:52;;5809:19;;;;;;4619:1444::o;887:427:25:-;;1068:5;887:427;1068:5;:::i;:::-;1186:122;;2550:79546:53;;1186:122:25;;;;;;;;887:427;:::o;79656:166:53:-;79738:16;79734:82;;79656:166;:::o;79734:82::-;79793:11;;;:::i;3280:418:22:-;;3665:25;3280:418;3665:25;:::i;:::-;465:4:25;;2550:79546:53;;;;;;;;;;;;;;;;;;;;3280:418:22;:::o;50494:2352:53:-;;;;;;2550:79546;50738:33;2550:79546;50869:30;;50865:1975;;50494:2352;;;;;:::o;50865:1975::-;51290:30;;;51345:26;51290:37;:30;;51223:162;51290:30;;;;;:37;:::i;:::-;2550:79546;51345:19;;;;;:26;:::i;51223:162::-;2550:79546;;1192:1:58;7916:84:24;958:1:58;7916:84:24;;2550:79546:53;51576:1254;;50865:1975;;;;;51576:1254;6019:108:24;;;;;2550:79546:53;6019:108:24;;19669:4:16;2550:79546:53;;;;;;;;;;;;;;;838:5:25;465:4;838:5;;;:::i;:::-;2550:79546:53;52236:49;;;;52232:137;;52590:26;52641;52677:138;52590:33;52641;52590:26;;;-1:-1:-1;;;;;2550:79546:53;;;13745:20:54;2550:79546:53;;;;;;;52590:33;2550:79546;52733:64;1460:31:21;-1:-1:-1;;;;;1460:31:21;;52733:64:53;:::i;:::-;52677:138;;:::i;:::-;52641:26;-1:-1:-1;;;;;2550:79546:53;;;13745:20:54;2550:79546:53;;;;;;;52641:33;2550:79546;51576:1254;;;;;52232:137;52316:34;;;2550:79546;52316:34;;2550:79546;52316:34;11202:521:54;-1:-1:-1;;;;;11202:521:54;;;;2550:79546:53;-1:-1:-1;2550:79546:53;;11379:18:54;2550:79546:53;;;;-1:-1:-1;2550:79546:53;-1:-1:-1;11467:3:54;11438:20;;;;2550:79546:53;;11434:31:54;;;;;11619:23;11567:139;11619:23;;2550:79546:53;11619:23:54;;:::i;:::-;2550:79546:53;11660:32:54;:29;;;;;:32;:::i;11567:139::-;2550:79546:53;-1:-1:-1;2550:79546:53;;;;;-1:-1:-1;2550:79546:53;;;11419:13:54;;11434:31;;;;;;;;11202:521::o;17101:159::-;859:9:19;:23;17174:79:54;;;17101:159;:::o;17174:79::-;2550:79546:53;7916:84:24;17211:15:54;2550:79546:53;7916:84:24;2550:79546:53;17101:159:54;:::o;3162:428:62:-;;859:9:19;3337:114:62;;-1:-1:-1;;;;;3545:28:62;2550:79546:53;;3378:5:62;2550:79546:53;3545:9:62;2550:79546:53;;;3378:5:62;2550:79546:53;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;3545:28:62;2550:79546:53;;;;;;;;;;;3162:428:62:o;3337:114::-;3406:34;;;3378:5;3406:34;;3378:5;3406:34;5216:1180;;;-1:-1:-1;;;;;2550:79546:53;;;5298:18:62;;;5294:80;;5409:21;:15;;;-1:-1:-1;;;;;2550:79546:53;;;6696:9:62;2550:79546:53;;;;;;;5409:21:62;2550:79546:53;5444:23:62;;;5440:115;;2550:79546:53;;;5589:21:62;:15;;;-1:-1:-1;;;;;2550:79546:53;;;6696:9:62;2550:79546:53;;;;;;;5589:21:62;2550:79546:53;5681:29:62;:20;;;-1:-1:-1;;;;;2550:79546:53;;;5681:14:62;2550:79546:53;;;;;;;5681:20:62;2550:79546:53;5681:29:62;:::i;:::-;5751:14;;;:::i;:::-;5777:20;;-1:-1:-1;;;;;2550:79546:53;;;5681:14:62;2550:79546:53;;;;;;;5777:20:62;2550:79546:53;;6113:62:62;;;;;;2550:79546:53;;-1:-1:-1;;;6113:62:62;;-1:-1:-1;;;;;2550:79546:53;;;6113:62:62;;;2550:79546:53;5314:1:62;2550:79546:53;;;;;;;;;;;;5314:1:62;6349:40;;;;5314:1;2550:79546:53;;;;;6113:62:62;2550:79546:53;6349:40:62;;;;5216:1180::o;5440:115::-;-1:-1:-1;;;5314:1:62;5490:54;-1:-1:-1;;;;;2550:79546:53;;6774:51:62;2550:79546:53;;;;;;;;;55873:40;9930:461:22;465:4:25;2550:79546:53;;;;10347:19:22;;;;9930:461;:::o;10347:37::-;10383:1;2550:79546:53;;;;;;;9930:461:22;:::o;80577:177:53:-;80672:21;-1:-1:-1;80654:94:53;;80577:177::o;80654:94::-;80716:21;;;;;;;;1822:864:25;;2004:6;;2000:58;;465:4;2550:79546:53;;;;;;;;;;;;;;;2560:120:25;2550:79546:53;;;2560:120:25;;;;;;;;1822:864;:::o;2000:58::-;2033:14;;;2009:1;2033:14;;2009:1;2033:14;1822:864;2004:6;;2000:58;;2560:120;2153:5;;;;:::i;:::-;2550:79546:53;;;2560:120:25;;;;;;;;1822:864;:::o;4238:414:22:-;;1744:19:25;4238:414:22;4619:25;4238:414;4619:25;:::i;:::-;1744:19:25;;:::i;2311:281:21:-;;-1:-1:-1;;;;;2426:25:21;;;:58;;;;;2311:281;2422:113;;;3080:3;2550:79546:53;;;;;;;;;2311:281:21;:::o;2422:113::-;2507:17;;;;;;;;2426:58;2455:29;;;;2426:58;;;3791:897:17;;3937:44;2550:79546:53;1616:3:21;2550:79546:53;3937:44:17;:::i;:::-;3992:37;-1:-1:-1;;;;;4028:1:17;1460:31:21;;4043:33:17;4039:476;;3791:897;4633:43;;4680:1;4633:43;;;;:::i;:::-;2550:79546:53;3791:897:17;:::o;4039:476::-;-1:-1:-1;;;;;2550:79546:53;;;;4434:59:17;2550:79546:53;;;;;;;;;;;4434:59:17;;;;;2550:79546:53;;4434:59:17;;;;;;;:70;4633:43;4434:59;4680:1;4434:59;4028:1;4434:59;;;4039:476;4434:70;;:::i;:::-;4039:476;;;;;;4434:59;;;;;;;;;;;;;;:::i;:::-;;;;17166:193:49;17253:1;17245:9;;17241:81;;17166:193;:::o;17241:81::-;17277:34;;;17253:1;17277:34;;2550:79546:53;;17253:1:49;17277:34;3296:380:37;2550:79546:53;;-1:-1:-1;;;3411:47:37;;;;;;-1:-1:-1;;;;;2550:79546:53;;3411:47:37;;;2550:79546:53;;;;;;;;;;3411:47:37;2550:79546:53;;;;3411:47:37;;2550:79546:53;3411:47:37;2550:79546:53;;3411:47:37;;;;;;;;:::i;:::-;2550:79546:53;;-1:-1:-1;;;;;2550:79546:53;;5615:25:37;;;;;;;;;;;:::i;:::-;5657:69;;;3296:380;5657:103;;;;3296:380;3473:45;;3469:201;;3296:380;;;;;:::o;3469:201::-;2550:79546:53;;3411:47:37;3561:43;;;;;;-1:-1:-1;;;;;2550:79546:53;3411:47:37;3561:43;;2550:79546:53;-1:-1:-1;2550:79546:53;;;;;3561:43:37;;;;;3646:12;;3561:43;;;;2550:79546:53;3561:43:37;:::i;:::-;;;:::i;3646:12::-;3469:201;;;;;;;5657:103;5730:26;;;:30;;5657:103;;;:69;2550:79546:53;;;;-1:-1:-1;5669:22:37;;;:56;;;;5657:69;;;;;;;5669:56;5695:30;;;3411:47;5695:30;;;;;;;;:::i;:::-;5669:56;;;;3296:380;2550:79546:53;;-1:-1:-1;;;3411:47:37;;;;;;-1:-1:-1;;;;;2550:79546:53;;3411:47:37;;;2550:79546:53;;;;;;;;;;;;;;;3411:47:37;2550:79546:53;1644:900:17;;1796:40;-1:-1:-1;;;;;1460:31:21;;1796:40:17;:::i;:::-;1847:37;-1:-1:-1;2550:79546:53;1616:3:21;2550:79546:53;1898:37:17;1894:474;;2486:46;;4680:1;2486:46;;;;:::i;1894:474::-;-1:-1:-1;;;;;2550:79546:53;;;;2287:59:17;2550:79546:53;;;;;;;;;;;2287:59:17;;;;;2550:79546:53;;2287:59:17;;;;;;;:70;2486:46;2287:59;4680:1;2287:59;-1:-1:-1;2287:59:17;;;:70;;:::i;73282:870:53:-;;;;-1:-1:-1;;;;;2550:79546:53;;;-1:-1:-1;2550:79546:53;73699:11;2550:79546;;;-1:-1:-1;2550:79546:53;;;;;;;;;;;;-1:-1:-1;2550:79546:53;73699:11;2550:79546;;;-1:-1:-1;2550:79546:53;;;;;;;;;;74116:28;;;:::i;74887:878::-;;;;-1:-1:-1;;;;;2550:79546:53;;;-1:-1:-1;2550:79546:53;75304:11;2550:79546;;;-1:-1:-1;2550:79546:53;;;;;;;;;;;;-1:-1:-1;2550:79546:53;75304:11;2550:79546;;;-1:-1:-1;2550:79546:53;;;;;;;;;;75729:28;;;:::i;2550:79546::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;2550:79546:53;;;;:::o;:::-;;;:::o;3180:392:38:-;5172:5:53;3180:392:38;3510:55;3180:392;3462:31;;;;;;;;;;;:::i;:::-;3510:55;;:::i;4522:224:59:-;958:1:58;7916:84:24;1414:1:58;7916:84:24;2550:79546:53;4611:129:59;;4522:224::o;4611:129::-;4682:47;;;-1:-1:-1;4682:47:59;958:1:58;-1:-1:-1;4682:47:59;13430:2163:52;;;;14330:66;;13855:31;13430:2163;-1:-1:-1;;;;;13430:2163:52;13855:31;:::i;:::-;1744:19:25;;;;;:::i;:::-;14283:14:52;;;;:::i;14330:66::-;;2550:79546:53;;14330:66:52;;;;;;15572:14;14330:66;1744:19:25;15064:30:52;14330:66;15210:67;14330:66;15380:37;14330:66;;;;15427:34;14330:66;-1:-1:-1;14330:66:52;;;13430:2163;14500:29;;14849;14487:42;14500:29;14837:41;14500:29;14836:57;14500:29;;;:::i;:::-;2550:79546:53;14487:42:52;;:::i;:::-;14849:29;;;:::i;:::-;2550:79546:53;14837:41:52;;:::i;:::-;14836:57;:::i;15427:34::-;2550:79546:53;15572:14:52;:::i;14330:66::-;14836:57;14330:66;;14487:42;14500:29;14837:41;14330:66;;;14849:29;14330:66;;;;;;;;;;;:::i;:::-;;;;;;;;;;4873:359:22;;5121:105;2550:79546:53;;;5044:9:22;2550:79546:53;;5044:9:22;;:::i;:::-;5121:105;;;;;;;4873:359::o;7248:4946:52:-;;;;;2550:79546:53;;8498:24:52;;;:::i;:::-;8623;;;;:::i;:::-;8743:13;8755:1;8758:13;;;;;;2550:79546:53;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;9134:57:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;8755:1;9134:57;;;8738:165;2550:79546:53;;;9286:55:52;;;;;;;;9134:57;9286:55;;;:::i;:::-;;;;;;;;;;;;1511:7:25;9422:14:52;9286:55;1625:13:25;9286:55:52;;8755:1;9286:55;;;8738:165;1511:7:25;;;;;;;;;;;;;;;;:::i;1625:13::-;9422:14:52;;;:::i;:::-;8755:1;9531:13;;;;;;2550:79546:53;;;;11183:55:52;2550:79546:53;;;;11183:55:52;;;;;;;;9134:57;11183:55;;;:::i;:::-;;;;;;;;;;;12108:59;11183:55;12123:43;11183:55;12107:80;11183:55;8755:1;11183:55;;;9511:1375;12123:43;;;:::i;:::-;12108:59;;:::i;11183:55::-;;;;;;-1:-1:-1;11183:55:52;;;;;;:::i;:::-;;;;;9546:3;10047:18;;;;;;;;;;;;;;10024:42;10047:18;;8848:1;10047:18;;:::i;:::-;2550:79546:53;10024:42:52;;:::i;:::-;10084:14;;;;;:::i;:::-;2550:79546:53;10084:41:52;10080:796;;9546:3;;;;;;2550:79546:53;9516:13:52;;;;;;;;;;;;10080:796;10232:14;;10374:38;10827:34;10232:14;10827;10232;;;10844:17;10232:14;;:::i;:::-;2550:79546:53;;10374:38:52;:::i;:::-;10354:58;;;;:::i;10827:14::-;2550:79546:53;10844:17:52;;:::i;10827:34::-;10810:51;;;;:::i;:::-;2550:79546:53;10080:796:52;;;;;;;9286:55;;;;;;-1:-1:-1;9286:55:52;;;;;;:::i;:::-;;;;;9134:57;;;;;;;;;;;;;;;:::i;:::-;;;;;8773:3;8809:18;:40;:36;:18;8848:1;8809:18;;;:::i;:::-;2550:79546:53;8830:15:52;;;;:::i;:::-;2550:79546:53;8809:36:52;;:::i;:::-;:40;:::i;:::-;8792:57;;;;:::i;:::-;2550:79546:53;;8743:13:52;;6495:194:59;958:1:58;7916:84:24;1586:1:58;7916:84:24;2550:79546:53;6574:109:59;;6495:194::o;6574:109::-;6635:37;;;-1:-1:-1;6635:37:59;958:1:58;-1:-1:-1;6635:37:59;2420:1364:52;;;3468:30;2550:79546:53;;3468:30:52;:::i;:::-;3513:13;3525:1;3549:3;2550:79546:53;;3528:19:52;;;;;3717:11;:50;:11;;;2550:79546:53;3717:11:52;;;:::i;:::-;2550:79546:53;3717:50:52;:::i;:::-;3702:65;;;;:::i;:::-;2550:79546:53;;3513:13:52;;3528:19;;;;;2420:1364::o;3596:756:62:-;;-1:-1:-1;;;;;2550:79546:53;;;3676:16:62;;;3672:78;;3785:29;:20;;;-1:-1:-1;;;;;2550:79546:53;;;5681:14:62;2550:79546:53;;;;;;;3785:20:62;2550:79546:53;3785:29:62;:::i;:::-;3963:19;:15;;;-1:-1:-1;;;;;2550:79546:53;;;6696:9:62;2550:79546:53;;;;;;;3963:19:62;2550:79546:53;;;;;;4043:14:62;;;:::i;:::-;4069:20;;-1:-1:-1;;;;;2550:79546:53;;;5681:14:62;2550:79546:53;;;;;;;4069:20:62;2550:79546:53;;;3690:1:62;2550:79546:53;4122:38:62;2550:79546:53;;4122:38:62;;;;2550:79546:53;;;;;;;;4122:38:62;;;;4285:60;;;;;2550:79546:53;;-1:-1:-1;;;4285:60:62;;3690:1;4285:60;;;2550:79546:53;;;-1:-1:-1;;;;;2550:79546:53;;;;;;;;;;;;;;;;;;3690:1:62;2550:79546:53;;;;4285:60:62;2550:79546:53;3672:78:62;-1:-1:-1;;;3690:1:62;3715:24;-1:-1:-1;;;;;2550:79546:53;;7519:27:62;2550:79546:53;;;55873:40;4059:629:37;-1:-1:-1;;;;;2811:38:38;4059:629:37;2550:79546:53;2811:38:38;;;:::i;:::-;2550:79546:53;;4551:22:37;;;;:57;;;;4059:629;4547:135;;;;4059:629;:::o;4547:135::-;4631:40;;;2847:1:38;4631:40:37;;2550:79546:53;;2847:1:38;4631:40:37;4551:57;4578:30;;;;;;;;;;;;:::i;:::-;4577:31;4551:57;;;;9628:806:59;;2550:79546:53;9811:24:59;;;:::i;:::-;9470:46;2550:79546:53;6019:108:24;;-1:-1:-1;9952:13:59;;;;;;10406:21;;;9628:806;:::o;9967:3::-;2550:79546:53;;;;;;;;;;;;;;;6019:108:24;;;;;3267:1:58;;;;;;6019:108:24;3267:1:58;;;10348:37:59;;;;:::i;:::-;2550:79546:53;;9937:13:59;;8442:263;6019:108:24;;2550:79546:53;6019:108:24;;19669:4:16;2550:79546:53;;;;;;;;;;;;;;;8442:263:59;:::o;8641:1623:60:-;;;;2550:79546:53;8915:29:60;:41;:29;;;;;:41;:::i;:::-;2550:79546:53;9458:36:60;;;9454:804;;8641:1623;;;;;:::o;9454:804::-;10044:189;2550:79546:53;;;;9669:111:60;2550:79546:53;10184:31:60;2550:79546:53;;9669:111:60;:::i;:::-;10120:30;10184:19;10120:42;:30;;;;;:42;:::i;10044:189::-;9454:804;;;;;;;;2011:185:21;;-1:-1:-1;;;;;2131:58:21;2011:185;1460:31;2131:58;:::i;24291:315:52:-;;24430:31;-1:-1:-1;;;;;24291:315:52;24430:31;2550:79546:53;;;;;;;;;24430:31:52;;2550:79546:53;24430:31:52;;;;;;;;;;;24291:315;24475:34;;;;24471:129;;24291:315;;:::o;24471:129::-;24532:57;;;24430:31;24532:57;24430:31;2550:79546:53;;;;24430:31:52;24532:57;24430:31;;;;;;;;;;;;;;;:::i;:::-;;;;;662:219:25;465:4;662:219;838:5;662:219;838:5;:::i;1736:177:21:-;;1848:58;1736:177;1616:3;2550:79546:53;1848:58:21;;:::i;4358:211:62:-;928:3;4449:43;;4445:118;;4358:211;:::o;4445:118::-;4515:37;;;;;;2550:79546:53;;4515:37:62;;76673:2695:53;2550:79546;;-1:-1:-1;;;76966:40:53;;;77000:4;76966:40;;;2550:79546;76966:40;;76673:2695;;2550:79546;;-1:-1:-1;;;;;2550:79546:53;;76966:40;2550:79546;;;;;;76966:40;;;;;;;-1:-1:-1;76966:40:53;;;76673:2695;77020:57;;;;77016:892;;78081:28;;;-1:-1:-1;;;;;2550:79546:53;;;7242:11;2550:79546;;;;;;;78081:28;2550:79546;;;78225:37;;;77000:4;76966:40;78225:37;;2550:79546;;;;77000:4;2550:79546;;;;78225:37;;;;;;;-1:-1:-1;78225:37:53;;;76673:2695;78276:51;;;;;78272:866;;79313:25;;;;-1:-1:-1;;;;;2550:79546:53;;;7242:11;2550:79546;;;;;;;79313:25;2550:79546;76673:2695::o;78272:866::-;-1:-1:-1;;;;78964:163:53;-1:-1:-1;;;;;2550:79546:53;6774:51:62;2550:79546:53;;;-1:-1:-1;2550:79546:53;;;;55873:40;78225:37;;;;;;;-1:-1:-1;78225:37:53;;;;;;:::i;:::-;;;;;;77016:892;-1:-1:-1;;;;77725:172:53;;;2550:79546;;;-1:-1:-1;;;;;2550:79546:53;6774:51:62;2550:79546:53;;;-1:-1:-1;2550:79546:53;;;;55873:40;76966;;;;;;;;;;;;;;;:::i;:::-;;;;;4625:582:38;;4797:8;;-1:-1:-1;2550:79546:53;;5874:21:38;:17;;6046:142;;;;;;5870:383;6225:17;;;5894:1;6225:17;;5894:1;6225:17;4793:408;2550:79546:53;;5045:22:38;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;-1:-1:-1;;;;;5121:24:38;;;;5066:1;5121:24;2550:79546:53;5121:24:38;2550:79546:53;;5066:1:38;5121:24;5045:49;5071:18;;;:23;5045:49;;23639:315:52;;23778:31;-1:-1:-1;;;;;23639:315:52;23778:31;2550:79546:53;;;;;;;;;23778:31:52;;2550:79546:53;23778:31:52;;;;;;;;;;;23639:315;23823:34;;;;23819:129;;23639:315;;:::o;23819:129::-;23880:57;;;23778:31;23880:57;23778:31;2550:79546:53;;;;23778:31:52;23880:57;23778:31;;;;;;;;;;;;;;;:::i;:::-;;;;;2550:79546:53;;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getVaultExtension()":"b9a8effa","reentrancyGuardEntered()":"d2c725e0","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","sendTo(address,address,uint256)":"ae639329","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVaultExtension\",\"name\":\"vaultExtension\",\"type\":\"address\"},{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"},{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxInvariantRatio\",\"type\":\"uint256\"}],\"name\":\"InvariantRatioAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minInvariantRatio\",\"type\":\"uint256\"}],\"name\":\"InvariantRatioBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MultipleNonZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotStaticCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"PoolTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reentrancyGuardEntered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculated\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"AllZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have one non-zero value, corresponding to the token being added or removed. This error results if all entries are zero.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"InvariantRatioAboveMax(uint256,uint256)\":[{\"details\":\"This value is determined by each pool type, and depends on the specific math used to compute the price curve.\",\"params\":{\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"maxInvariantRatio\":\"The maximum allowed invariant ratio\"}}],\"InvariantRatioBelowMin(uint256,uint256)\":[{\"details\":\"This value is determined by each pool type, and depends on the specific math used to compute the price curve.\",\"params\":{\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"minInvariantRatio\":\"The minimum allowed invariant ratio\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"MultipleNonZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value, corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"PoolTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"Approval(address,address,address,uint256)\":{\"params\":{\"owner\":\"The token holder\",\"pool\":\"The pool token receiving the allowance\",\"spender\":\"The account being authorized to spend a given amount of the token\",\"value\":\"The number of tokens spender is authorized to transfer from owner\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Transfer(address,address,address,uint256)\":{\"params\":{\"from\":\"The token source\",\"pool\":\"The pool token being transferred\",\"to\":\"The token destination\",\"value\":\"The number of tokens\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"_0\":\"Number of tokens in the pool\",\"_1\":\"Index corresponding to the given token in the pool's token list\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"_0\":\"Address of the VaultExtension\"}},\"reentrancyGuardEntered()\":{\"returns\":{\"_0\":\"True if the Vault is currently executing a nonReentrant function\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculated\":\"Calculated swap amount\",\"amountIn\":\"Amount of input tokens for the swap\",\"amountOut\":\"Amount of output tokens from the swap\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AllZeroInputs()\":[{\"notice\":\"No valid input was given for a single token operation.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BalanceOverflow()\":[{\"notice\":\"One of the balances is above the maximum value that can be stored.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"InvariantRatioAboveMax(uint256,uint256)\":[{\"notice\":\"An add liquidity operation increased the invariant above the limit.\"}],\"InvariantRatioBelowMin(uint256,uint256)\":[{\"notice\":\"A remove liquidity operation decreased the invariant below the limit.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"MultipleNonZeroInputs()\":[{\"notice\":\"More than one non-zero value was given for a single token operation.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotStaticCall()\":[{\"notice\":\"A state-changing transaction was initiated in a context that only allows static calls.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"PoolTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a pool token can't be lower than the absolute minimum.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"Approval(address,address,address,uint256)\":{\"notice\":\"The allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Transfer(address,address,address,uint256)\":{\"notice\":\"Pool tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"reentrancyGuardEntered()\":{\"notice\":\"Expose the state of the Vault's reentrancy guard.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/Vault.sol\":\"Vault\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol\":{\"keccak256\":\"0x4994bc0f8e5905640876a9411dadb73221ea2b7b1168d22cf5fe44ee1ca16960\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69a0a6ab9c2622426ccfcb7263deb5615e589e98b3b31ea9fcd21595bb42a13d\",\"dweb:/ipfs/QmVW6GVXGTHnVo8MGk7zdLMASR8uN7khPsrEMXwgy4NBrQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol\":{\"keccak256\":\"0x0cdc0d3817887d0439c3c6f4c811bd37091ef75a855dd8b14c0e8f337e2799dd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4ffd05df90ccdf19a35177fd6c6f78edc61ca2a37df7d0934932a3ad5a96f1e6\",\"dweb:/ipfs/QmaCmKktnMy4XXZn2FaKTjwQBGUhuXKikbxCbPX6K5PPgi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x743734d3d3503d705f0a778c4b0dd61fdb067e89a07481ddbead0654e6808318\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6198f27b2d01f346fdd3d1302e9a6ddd543d2f06afd675d84919c2242bd26d8d\",\"dweb:/ipfs/QmYntQih5MwxxdGnVu2BPVLeqFuJEH761cByAesjwE6JKT\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol\":{\"keccak256\":\"0x528ef10b3f14bb2b1d64043ec8c7d732a502147fe9d4e4bd3339f57e40fe3ce7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9a71bd94d0c5ba098b04b2bc65a7842c1bb3b96d91dd6a95756efc468cd6dbc5\",\"dweb:/ipfs/QmPrHPMmrdpJjvny8UjWbWFJo5nWpBtmjxWGbX1zDbNx6Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\":{\"keccak256\":\"0x9dc4c8d6dd5dbc108dd377dab73a3e6c84e8c104713d2afb3cba8acc9ddf4c63\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2ef7c65fe356144f8cd720109b818e1ec6cc495ca35b55ca273ef9db45c6ae00\",\"dweb:/ipfs/QmREJgnfgoqemnYKvfYjTFJBAMsV9VAKA5AY5Woprpc1vs\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe54f620633826cf7842c91606512a0d20414e5ce77a0b0cf5d44d10179cd7f6a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e86b797bc566f3e92392220564e457a9290e28e6af9566ec6d71bc9f3fc1548c\",\"dweb:/ipfs/QmewUN2ZTCQxuv8AqWfKNMn7joCtMmXg4wyAK3QqPtjPAw\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\":{\"keccak256\":\"0xf98fec19a1516432d7540f0cde2e967b627afbc5a361835766d57be8ba10b4e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://94b49929bff77d1fdaab8916350356fc9816317beef4f33c3af0e6a40493d01c\",\"dweb:/ipfs/QmPPhtmpPvgedbtQaJZz7JQCmiGKKTHmfh7EGhJS1yUCia\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"contracts/BasePoolMath.sol\":{\"keccak256\":\"0x28078c6fa4d55418c25505d4683642cb51fe55b2155ef7418db6c70631a30d6a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://864b91fdc2b69725bcc07f06d9adebe87117561582fa58f1e4410d8928cd205c\",\"dweb:/ipfs/QmWCDsbTxtmEMLhorqfGF1LDMHMqqVnV9sk9mUTPR7eog8\"]},\"contracts/Vault.sol\":{\"keccak256\":\"0xd16a5648324b9ba577b3bdc1ef0e218dd341469972a1a08528ca1b75e659c7fc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3afd334b8d76848ff82ad3f3d77d691ed17c09a09599a9866e95f94564d4299e\",\"dweb:/ipfs/QmbpErGaJL2hMfJxyJCFuzh5dDHxP282B4Q1384yoKV5Fs\"]},\"contracts/VaultCommon.sol\":{\"keccak256\":\"0xad949728097754fb91dd82f46a4f3430f0caf092fe719f04c030325e623c59cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b6ba4635b64181a08098f2b4bde9bc6ceb8580d24654ec39c3d38ac2c8082317\",\"dweb:/ipfs/QmbthXemuT8Qvs2jdTADdyzbcPuZaKWfZjRn7j8dWuwffs\"]},\"contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"contracts/VaultStorage.sol\":{\"keccak256\":\"0x283153cc86b04e7b5ded7b317a7773cd52912661922d477bccc7e3ef9c4fd332\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://30e03b35be9f4aebba5ea1f6fd1f72fb37990c916a22ef1dd4a01af809f89146\",\"dweb:/ipfs/QmNri89FgxWKFPkN67tvzAGf6kSyMuYvZd62ZW9a5MJBJH\"]},\"contracts/lib/HooksConfigLib.sol\":{\"keccak256\":\"0xaf3a7b4bbc1427ffb36b89cab5e485494afbddaff7195e0533f9c29a88c217b3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c653115b697d1c2a340a485e37a1d1a7b18bd3da4304ef12480bf9dcb8f61dc8\",\"dweb:/ipfs/QmfPNVqSeuG6gJr2x4y41czE5ivBz8vLpZ3R97VVnbK1uT\"]},\"contracts/lib/PoolConfigConst.sol\":{\"keccak256\":\"0xcec5acd992ba3d85194d2a66de785676e5fbd76c7ef4bd75f581582c637e9191\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03feaba5c47de6cfa364a9f78f3d1cbc48c6e59e89348a56e773631ce3d52c4d\",\"dweb:/ipfs/QmWZmpFLKk6qEsTtbPaiKBWvTnSuYzQdbNJZX4Bng16c3F\"]},\"contracts/lib/PoolConfigLib.sol\":{\"keccak256\":\"0x0df4ac214754751acdaa044f697ef2a45823689689aac22a6a102c8e543d97c7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13c1c708ac1a1f5523282a7430d7f5300120ac17b3c77a0bd103d2afe7aff979\",\"dweb:/ipfs/QmPstE7ZquJ4zMaCEXix8iCXc6hTSyNQaR9Z4aWBMTa9ys\"]},\"contracts/lib/PoolDataLib.sol\":{\"keccak256\":\"0x0f004ef9c126426c1391516247f90cbb699982f3c545c821c2bdc3796c93f781\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93d7b94cb4e0c9eee127258fb69e390d34c391444f337b6cc5cbe5beb702f4e7\",\"dweb:/ipfs/QmbswDz4DrsXaEh9RSvpmWKX5JCLoTavyAX2511eKr5rQd\"]},\"contracts/lib/VaultStateLib.sol\":{\"keccak256\":\"0xc40f34646f76afe536a326173d3c8cd663a655375531f65f3e6f7c63cecddeeb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a97b6d2363d70869b9cf66104a6c6bdfc84d351085c94b23b0104f2608e52ff4\",\"dweb:/ipfs/QmVPVR8F6nSxxhxTpFp5cgH9n1dE2E5UXD6cPauumtpS3e\"]},\"contracts/token/ERC20MultiToken.sol\":{\"keccak256\":\"0x49578c053271957fa9661c6a3e3ce6310a3f0690be6deca9eeb28f4e129bcfd3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e3bbd6d7baa790f6e259dfcab0ae2b0db96c08b21739dca829217af6fdbea15d\",\"dweb:/ipfs/QmVgirrgRbkHVdfthMKTJi98QeHmx9DHTT1WBNQRYogpBn\"]}},\"version\":1}"}},"contracts/VaultCommon.sol":{"VaultCommon":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"PoolTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"inputs":[],"name":"reentrancyGuardEntered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"reentrancyGuardEntered()":"d2c725e0"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"PoolTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"reentrancyGuardEntered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract contains common utilities in the inheritance chain that require storage to work, and will be required in both the main Vault and its extensions.\",\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"PoolTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"Approval(address,address,address,uint256)\":{\"params\":{\"owner\":\"The token holder\",\"pool\":\"The pool token receiving the allowance\",\"spender\":\"The account being authorized to spend a given amount of the token\",\"value\":\"The number of tokens spender is authorized to transfer from owner\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Transfer(address,address,address,uint256)\":{\"params\":{\"from\":\"The token source\",\"pool\":\"The pool token being transferred\",\"to\":\"The token destination\",\"value\":\"The number of tokens\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"reentrancyGuardEntered()\":{\"returns\":{\"_0\":\"True if the Vault is currently executing a nonReentrant function\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"PoolTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a pool token can't be lower than the absolute minimum.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"Approval(address,address,address,uint256)\":{\"notice\":\"The allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Transfer(address,address,address,uint256)\":{\"notice\":\"Pool tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"reentrancyGuardEntered()\":{\"notice\":\"Expose the state of the Vault's reentrancy guard.\"}},\"notice\":\"Functions and modifiers shared between the main Vault and its extension contracts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/VaultCommon.sol\":\"VaultCommon\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol\":{\"keccak256\":\"0x4994bc0f8e5905640876a9411dadb73221ea2b7b1168d22cf5fe44ee1ca16960\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69a0a6ab9c2622426ccfcb7263deb5615e589e98b3b31ea9fcd21595bb42a13d\",\"dweb:/ipfs/QmVW6GVXGTHnVo8MGk7zdLMASR8uN7khPsrEMXwgy4NBrQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x743734d3d3503d705f0a778c4b0dd61fdb067e89a07481ddbead0654e6808318\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6198f27b2d01f346fdd3d1302e9a6ddd543d2f06afd675d84919c2242bd26d8d\",\"dweb:/ipfs/QmYntQih5MwxxdGnVu2BPVLeqFuJEH761cByAesjwE6JKT\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\":{\"keccak256\":\"0x9dc4c8d6dd5dbc108dd377dab73a3e6c84e8c104713d2afb3cba8acc9ddf4c63\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2ef7c65fe356144f8cd720109b818e1ec6cc495ca35b55ca273ef9db45c6ae00\",\"dweb:/ipfs/QmREJgnfgoqemnYKvfYjTFJBAMsV9VAKA5AY5Woprpc1vs\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe54f620633826cf7842c91606512a0d20414e5ce77a0b0cf5d44d10179cd7f6a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e86b797bc566f3e92392220564e457a9290e28e6af9566ec6d71bc9f3fc1548c\",\"dweb:/ipfs/QmewUN2ZTCQxuv8AqWfKNMn7joCtMmXg4wyAK3QqPtjPAw\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\":{\"keccak256\":\"0xf98fec19a1516432d7540f0cde2e967b627afbc5a361835766d57be8ba10b4e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://94b49929bff77d1fdaab8916350356fc9816317beef4f33c3af0e6a40493d01c\",\"dweb:/ipfs/QmPPhtmpPvgedbtQaJZz7JQCmiGKKTHmfh7EGhJS1yUCia\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"contracts/VaultCommon.sol\":{\"keccak256\":\"0xad949728097754fb91dd82f46a4f3430f0caf092fe719f04c030325e623c59cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b6ba4635b64181a08098f2b4bde9bc6ceb8580d24654ec39c3d38ac2c8082317\",\"dweb:/ipfs/QmbthXemuT8Qvs2jdTADdyzbcPuZaKWfZjRn7j8dWuwffs\"]},\"contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"contracts/VaultStorage.sol\":{\"keccak256\":\"0x283153cc86b04e7b5ded7b317a7773cd52912661922d477bccc7e3ef9c4fd332\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://30e03b35be9f4aebba5ea1f6fd1f72fb37990c916a22ef1dd4a01af809f89146\",\"dweb:/ipfs/QmNri89FgxWKFPkN67tvzAGf6kSyMuYvZd62ZW9a5MJBJH\"]},\"contracts/lib/PoolConfigConst.sol\":{\"keccak256\":\"0xcec5acd992ba3d85194d2a66de785676e5fbd76c7ef4bd75f581582c637e9191\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03feaba5c47de6cfa364a9f78f3d1cbc48c6e59e89348a56e773631ce3d52c4d\",\"dweb:/ipfs/QmWZmpFLKk6qEsTtbPaiKBWvTnSuYzQdbNJZX4Bng16c3F\"]},\"contracts/lib/PoolConfigLib.sol\":{\"keccak256\":\"0x0df4ac214754751acdaa044f697ef2a45823689689aac22a6a102c8e543d97c7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13c1c708ac1a1f5523282a7430d7f5300120ac17b3c77a0bd103d2afe7aff979\",\"dweb:/ipfs/QmPstE7ZquJ4zMaCEXix8iCXc6hTSyNQaR9Z4aWBMTa9ys\"]},\"contracts/lib/PoolDataLib.sol\":{\"keccak256\":\"0x0f004ef9c126426c1391516247f90cbb699982f3c545c821c2bdc3796c93f781\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93d7b94cb4e0c9eee127258fb69e390d34c391444f337b6cc5cbe5beb702f4e7\",\"dweb:/ipfs/QmbswDz4DrsXaEh9RSvpmWKX5JCLoTavyAX2511eKr5rQd\"]},\"contracts/lib/VaultStateLib.sol\":{\"keccak256\":\"0xc40f34646f76afe536a326173d3c8cd663a655375531f65f3e6f7c63cecddeeb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a97b6d2363d70869b9cf66104a6c6bdfc84d351085c94b23b0104f2608e52ff4\",\"dweb:/ipfs/QmVPVR8F6nSxxhxTpFp5cgH9n1dE2E5UXD6cPauumtpS3e\"]},\"contracts/token/ERC20MultiToken.sol\":{\"keccak256\":\"0x49578c053271957fa9661c6a3e3ce6310a3f0690be6deca9eeb28f4e129bcfd3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e3bbd6d7baa790f6e259dfcab0ae2b0db96c08b21739dca829217af6fdbea15d\",\"dweb:/ipfs/QmVgirrgRbkHVdfthMKTJi98QeHmx9DHTT1WBNQRYogpBn\"]}},\"version\":1}"}},"contracts/VaultGuard.sol":{"VaultGuard":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60a034606057601f60b238819003918201601f19168301916001600160401b03831184841017606457808492602094604052833981010312606057516001600160a01b03811681036060576080526040516039908160798239608051815050f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe5f80fdfea26469706673582212208452e821ffa2e9eacc00ed04b8b0d62618ba7c880cf65dc30936be4c6463810264736f6c634300081a0033","opcodes":"PUSH1 0xA0 CALLVALUE PUSH1 0x60 JUMPI PUSH1 0x1F PUSH1 0xB2 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH1 0x64 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH1 0x60 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH1 0x60 JUMPI PUSH1 0x80 MSTORE PUSH1 0x40 MLOAD PUSH1 0x39 SWAP1 DUP2 PUSH1 0x79 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP5 MSTORE 0xE8 0x21 SELFDESTRUCT LOG2 0xE9 0xEA 0xCC STOP 0xED DIV 0xB8 0xB0 0xD6 0x26 XOR 0xBA PUSH29 0x880CF65DC30936BE4C6463810264736F6C634300081A00330000000000 ","sourceMap":"308:368:55:-:0;;;;;;;;;;;;;-1:-1:-1;;308:368:55;;;;-1:-1:-1;;;;;308:368:55;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;308:368:55;;;;;;409:14;;308:368;;;;;;;;409:14;308:368;;;;;;-1:-1:-1;308:368:55;;;;;;-1:-1:-1;308:368:55;;;;;-1:-1:-1;308:368:55"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212208452e821ffa2e9eacc00ed04b8b0d62618ba7c880cf65dc30936be4c6463810264736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP5 MSTORE 0xE8 0x21 SELFDESTRUCT LOG2 0xE9 0xEA 0xCC STOP 0xED DIV 0xB8 0xB0 0xD6 0x26 XOR 0xBA PUSH29 0x880CF65DC30936BE4C6463810264736F6C634300081A00330000000000 ","sourceMap":"308:368:55:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contract that shares the modifier `onlyVault`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/VaultGuard.sol\":\"VaultGuard\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x743734d3d3503d705f0a778c4b0dd61fdb067e89a07481ddbead0654e6808318\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6198f27b2d01f346fdd3d1302e9a6ddd543d2f06afd675d84919c2242bd26d8d\",\"dweb:/ipfs/QmYntQih5MwxxdGnVu2BPVLeqFuJEH761cByAesjwE6JKT\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]}},\"version\":1}"}},"contracts/VaultStorage.sol":{"VaultStorage":{"abi":[],"evm":{"bytecode":{"functionDebugData":{"finalize_allocation":{"entryPoint":338,"id":null,"parameterSlots":1,"returnSlots":0},"fun_calculateVaultStorageSlot":{"entryPoint":385,"id":17510,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6101c06040908082523461014e578061001a61003692610152565b600a8152691a5cd55b9b1bd8dad95960b21b6020820152610181565b60c05261006a815161004781610152565b60118152701b9bdb96995c9bd1195b1d1850dbdd5b9d607a1b6020820152610181565b60e052610098815161007b81610152565b600b81526a746f6b656e44656c74617360a81b6020820152610181565b906101009182526100d181516100ad81610152565b6012815271185919131a5c5d5a591a5d1e50d85b1b195960721b6020820152610181565b9061012091825261010181516100e681610152565b60098152681cd95cdcda5bdb925960ba1b6020820152610181565b90610140918252519160399384610266853960805184505060a05184505060c05184505060e05184505051835050518250505181505061016051815050610180518150506101a051815050f35b5f80fd5b604081019081106001600160401b0382111761016d57604052565b634e487b7160e01b5f52604160045260245ffd5b60405161018d81610152565b600c8152602081016b5661756c7453746f7261676560a01b81526020604051938492828401947f62616c616e6365722d6c6162732e76332e73746f726167652e000000000000008652518091603986015e830190601760f91b6039830152805192839101603a83015e015f603a82015203601a810183526059601f1991011682019180831060018060401b0384111761016d57826040525190205f19810190811161025157602082019081526020825261024682610152565b9051902060ff191690565b634e487b7160e01b5f52601160045260245ffdfe5f80fdfea2646970667358221220bef1d23003c113a6606ee379f9d2535d98a5ca95b013494ce4f2f4e76210679c64736f6c634300081a0033","opcodes":"PUSH2 0x1C0 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x14E JUMPI DUP1 PUSH2 0x1A PUSH2 0x36 SWAP3 PUSH2 0x152 JUMP JUMPDEST PUSH1 0xA DUP2 MSTORE PUSH10 0x1A5CD55B9B1BD8DAD959 PUSH1 0xB2 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x181 JUMP JUMPDEST PUSH1 0xC0 MSTORE PUSH2 0x6A DUP2 MLOAD PUSH2 0x47 DUP2 PUSH2 0x152 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH17 0x1B9BDB96995C9BD1195B1D1850DBDD5B9D PUSH1 0x7A SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x181 JUMP JUMPDEST PUSH1 0xE0 MSTORE PUSH2 0x98 DUP2 MLOAD PUSH2 0x7B DUP2 PUSH2 0x152 JUMP JUMPDEST PUSH1 0xB DUP2 MSTORE PUSH11 0x746F6B656E44656C746173 PUSH1 0xA8 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x181 JUMP JUMPDEST SWAP1 PUSH2 0x100 SWAP2 DUP3 MSTORE PUSH2 0xD1 DUP2 MLOAD PUSH2 0xAD DUP2 PUSH2 0x152 JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH18 0x185919131A5C5D5A591A5D1E50D85B1B1959 PUSH1 0x72 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x181 JUMP JUMPDEST SWAP1 PUSH2 0x120 SWAP2 DUP3 MSTORE PUSH2 0x101 DUP2 MLOAD PUSH2 0xE6 DUP2 PUSH2 0x152 JUMP JUMPDEST PUSH1 0x9 DUP2 MSTORE PUSH9 0x1CD95CDCDA5BDB9259 PUSH1 0xBA SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x181 JUMP JUMPDEST SWAP1 PUSH2 0x140 SWAP2 DUP3 MSTORE MLOAD SWAP2 PUSH1 0x39 SWAP4 DUP5 PUSH2 0x266 DUP6 CODECOPY PUSH1 0x80 MLOAD DUP5 POP POP PUSH1 0xA0 MLOAD DUP5 POP POP PUSH1 0xC0 MLOAD DUP5 POP POP PUSH1 0xE0 MLOAD DUP5 POP POP MLOAD DUP4 POP POP MLOAD DUP3 POP POP MLOAD DUP2 POP POP PUSH2 0x160 MLOAD DUP2 POP POP PUSH2 0x180 MLOAD DUP2 POP POP PUSH2 0x1A0 MLOAD DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x16D JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x18D DUP2 PUSH2 0x152 JUMP JUMPDEST PUSH1 0xC DUP2 MSTORE PUSH1 0x20 DUP2 ADD PUSH12 0x5661756C7453746F72616765 PUSH1 0xA0 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP3 DUP3 DUP5 ADD SWAP5 PUSH32 0x62616C616E6365722D6C6162732E76332E73746F726167652E00000000000000 DUP7 MSTORE MLOAD DUP1 SWAP2 PUSH1 0x39 DUP7 ADD MCOPY DUP4 ADD SWAP1 PUSH1 0x17 PUSH1 0xF9 SHL PUSH1 0x39 DUP4 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD PUSH1 0x3A DUP4 ADD MCOPY ADD PUSH0 PUSH1 0x3A DUP3 ADD MSTORE SUB PUSH1 0x1A DUP2 ADD DUP4 MSTORE PUSH1 0x59 PUSH1 0x1F NOT SWAP2 ADD AND DUP3 ADD SWAP2 DUP1 DUP4 LT PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB DUP5 GT OR PUSH2 0x16D JUMPI DUP3 PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x251 JUMPI PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x246 DUP3 PUSH2 0x152 JUMP JUMPDEST SWAP1 MLOAD SWAP1 KECCAK256 PUSH1 0xFF NOT AND SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBE CALL 0xD2 ADDRESS SUB 0xC1 SGT 0xA6 PUSH1 0x6E 0xE3 PUSH26 0xF9D2535D98A5CA95B013494CE4F2F4E76210679C64736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"1377:8694:56:-:0;;;;;;;;;;;3400:40;1377:8694;;:::i;:::-;;;;-1:-1:-1;;;1377:8694:56;;;;3400:40;:::i;:::-;;;3501:47;1377:8694;;;;;:::i;:::-;;;;-1:-1:-1;;;1377:8694:56;;;;3501:47;:::i;:::-;;;3601:41;1377:8694;;;;;:::i;:::-;;;;-1:-1:-1;;;1377:8694:56;;;;3601:41;:::i;:::-;;;;;;3703:48;1377:8694;;;;;:::i;:::-;;;;-1:-1:-1;;;1377:8694:56;;;;3703:48;:::i;:::-;;;;;;3802:39;1377:8694;;;;;:::i;:::-;;;;-1:-1:-1;;;1377:8694:56;;;;3802:39;:::i;:::-;;;;;;1377:8694;;;;;;;;;;;;;;;;;;3400:40;1377:8694;;;;3501:47;1377:8694;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1377:8694:56;;;;;;;:::o;:::-;;;;;;;;;;;;9892:177;1377:8694;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;1377:8694:56;;;;;1461:67:23;;;;;;1377:8694:56;;;;;;;;;;;;;;-1:-1:-1;;;1377:8694:56;;;;;;;;;;;;;;;-1:-1:-1;1377:8694:56;;;;1461:67:23;;;;;;1377:8694:56;;;;;;;;;;;;;;;;;;;;;;;;;;1451:78:23;;1377:8694:56;;;;;;;;;;1432:103:23;;1377:8694:56;;;;1432:103:23;;;;;:::i;:::-;1377:8694:56;;1405:144:23;;-1:-1:-1;;1405:170:23;;9892:177:56:o;1377:8694::-;;;;-1:-1:-1;1377:8694:56;;;;;-1:-1:-1;1377:8694:56"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220bef1d23003c113a6606ee379f9d2535d98a5ca95b013494ce4f2f4e76210679c64736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBE CALL 0xD2 ADDRESS SUB 0xC1 SGT 0xA6 PUSH1 0x6E 0xE3 PUSH26 0xF9D2535D98A5CA95B013494CE4F2F4E76210679C64736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"1377:8694:56:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"This contract has no code, but is inherited by all three Vault contracts. In order to ensure that *only* the Vault contract's storage is actually used, calls to the extension contracts must be delegate calls made through the main Vault.\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"_queriesDisabledPermanently\":{\"details\":\"Flag that prevents re-enabling queries.\"},\"_reservesOf\":{\"details\":\"Represents the total reserve of each ERC20 token. It should be always equal to `token.balanceOf(vault)`, except during `unlock`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Storage layout for the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/VaultStorage.sol\":\"VaultStorage\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x743734d3d3503d705f0a778c4b0dd61fdb067e89a07481ddbead0654e6808318\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6198f27b2d01f346fdd3d1302e9a6ddd543d2f06afd675d84919c2242bd26d8d\",\"dweb:/ipfs/QmYntQih5MwxxdGnVu2BPVLeqFuJEH761cByAesjwE6JKT\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"contracts/VaultStorage.sol\":{\"keccak256\":\"0x283153cc86b04e7b5ded7b317a7773cd52912661922d477bccc7e3ef9c4fd332\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://30e03b35be9f4aebba5ea1f6fd1f72fb37990c916a22ef1dd4a01af809f89146\",\"dweb:/ipfs/QmNri89FgxWKFPkN67tvzAGf6kSyMuYvZd62ZW9a5MJBJH\"]},\"contracts/lib/PoolConfigConst.sol\":{\"keccak256\":\"0xcec5acd992ba3d85194d2a66de785676e5fbd76c7ef4bd75f581582c637e9191\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03feaba5c47de6cfa364a9f78f3d1cbc48c6e59e89348a56e773631ce3d52c4d\",\"dweb:/ipfs/QmWZmpFLKk6qEsTtbPaiKBWvTnSuYzQdbNJZX4Bng16c3F\"]},\"contracts/lib/PoolConfigLib.sol\":{\"keccak256\":\"0x0df4ac214754751acdaa044f697ef2a45823689689aac22a6a102c8e543d97c7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13c1c708ac1a1f5523282a7430d7f5300120ac17b3c77a0bd103d2afe7aff979\",\"dweb:/ipfs/QmPstE7ZquJ4zMaCEXix8iCXc6hTSyNQaR9Z4aWBMTa9ys\"]},\"contracts/lib/VaultStateLib.sol\":{\"keccak256\":\"0xc40f34646f76afe536a326173d3c8cd663a655375531f65f3e6f7c63cecddeeb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a97b6d2363d70869b9cf66104a6c6bdfc84d351085c94b23b0104f2608e52ff4\",\"dweb:/ipfs/QmVPVR8F6nSxxhxTpFp5cgH9n1dE2E5UXD6cPauumtpS3e\"]}},\"version\":1}"}},"contracts/lib/HooksConfigLib.sol":{"HooksConfigLib":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212206aff7d492783503d277eb44541aa1ff14d471828df21af899160beede74c9ded64736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH11 0xFF7D492783503D277EB445 COINBASE 0xAA 0x1F CALL 0x4D SELFBALANCE XOR 0x28 0xDF 0x21 0xAF DUP10 SWAP2 PUSH1 0xBE 0xED 0xE7 0x4C SWAP14 0xED PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"1878:19951:57:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212206aff7d492783503d277eb44541aa1ff14d471828df21af899160beede74c9ded64736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH11 0xFF7D492783503D277EB445 COINBASE 0xAA 0x1F CALL 0x4D SELFBALANCE XOR 0x28 0xDF 0x21 0xAF DUP10 SWAP2 PUSH1 0xBE 0xED 0xE7 0x4C SWAP14 0xED PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"1878:19951:57:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"This library has two additional functions. `toHooksConfig` constructs a `HooksConfig` structure from the PoolConfig and the hooks contract address. Also, there are `call` functions that forward the arguments to the corresponding functions in the hook contract, then validate and return the results. Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot per pool). This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct. The layout (i.e., offsets for each data field) is specified in `PoolConfigConst`. There are two libraries for interpreting these data. This one parses fields related to hooks, and also contains helpers for the struct building and hooks contract forwarding functions described above. `PoolConfigLib` contains helpers related to the non-hook-related flags, along with aggregate fee percentages and other data associated with pools. The `PoolData` struct contains the raw bitmap with the entire pool state (`PoolConfigBits`), plus the token configuration, scaling factors, and dynamic information such as current balances and rates. The hooks contract addresses themselves are stored in a separate `_hooksContracts` mapping.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Helper functions to read and write the packed hook configuration flags stored in `_poolConfigBits`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/lib/HooksConfigLib.sol\":\"HooksConfigLib\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"contracts/lib/HooksConfigLib.sol\":{\"keccak256\":\"0xaf3a7b4bbc1427ffb36b89cab5e485494afbddaff7195e0533f9c29a88c217b3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c653115b697d1c2a340a485e37a1d1a7b18bd3da4304ef12480bf9dcb8f61dc8\",\"dweb:/ipfs/QmfPNVqSeuG6gJr2x4y41czE5ivBz8vLpZ3R97VVnbK1uT\"]},\"contracts/lib/PoolConfigConst.sol\":{\"keccak256\":\"0xcec5acd992ba3d85194d2a66de785676e5fbd76c7ef4bd75f581582c637e9191\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03feaba5c47de6cfa364a9f78f3d1cbc48c6e59e89348a56e773631ce3d52c4d\",\"dweb:/ipfs/QmWZmpFLKk6qEsTtbPaiKBWvTnSuYzQdbNJZX4Bng16c3F\"]}},\"version\":1}"}},"contracts/lib/PoolConfigConst.sol":{"PoolConfigConst":{"abi":[{"inputs":[],"name":"ADD_LIQUIDITY_CUSTOM_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AFTER_ADD_LIQUIDITY_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AFTER_INITIALIZE_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AFTER_REMOVE_LIQUIDITY_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AFTER_SWAP_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AGGREGATE_SWAP_FEE_OFFSET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AGGREGATE_YIELD_FEE_OFFSET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BEFORE_ADD_LIQUIDITY_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BEFORE_INITIALIZE_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BEFORE_REMOVE_LIQUIDITY_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BEFORE_SWAP_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DECIMAL_DIFF_BITLENGTH","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DECIMAL_SCALING_FACTORS_OFFSET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DONATION_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DYNAMIC_SWAP_FEE_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSE_WINDOW_END_TIME_OFFSET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_INITIALIZED_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_PAUSED_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_RECOVERY_MODE_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_REGISTERED_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REMOVE_LIQUIDITY_CUSTOM_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STATIC_SWAP_FEE_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIMESTAMP_BITLENGTH","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_DECIMAL_DIFFS_BITLENGTH","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNBALANCED_LIQUIDITY_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460195761039a908161001e823930815050f35b5f80fdfe60806040908082526004361015610014575f80fd5b5f3560e01c9081631294794b1461035057508063185186281461033a57806328b161ce146102075780632d6724e1146103245780633dc52c431461030e5780633f60345a146102f8578063547acb16146102e25780636801b442146102cd57806368aa2524146102b75780637e3edbf1146102a15780637ea0cde91461028b57806380b1c55b1461027557806384efbfd51461025f578063a22425b614610249578063aa6cda9114610233578063af815f041461021d578063b2cb247c14610207578063bc848769146101f1578063bdefaf71146101db578063d9827217146101c5578063d9cebbd9146101ac578063dde7b13f14610196578063df9d385b14610181578063e2ce6c6c1461016b578063fab86870146101555763fd5da0101461013c575f80fd5b5f366003190112610151576020905160128152f35b5f80fd5b505f366003190112610151576020905160098152f35b505f366003190112610151576020905160078152f35b505f3660031901126101515760209051818152f35b505f3660031901126101515760209051600e8152f35b505f3660031901126101515760209060425b9051908152f35b505f366003190112610151576020905160048152f35b505f3660031901126101515760209051600d8152f35b505f366003190112610151576020905160108152f35b505f366003190112610151576020905160058152f35b505f366003190112610151576020905160028152f35b505f3660031901126101515760209051600f8152f35b505f3660031901126101515760209051600c8152f35b505f3660031901126101515760209051600b8152f35b505f366003190112610151576020905160118152f35b505f366003190112610151576020905160288152f35b505f366003190112610151576020905160068152f35b505f366003190112610151575160828152602090f35b505f36600319011261015157602090515f8152f35b505f366003190112610151576020905160088152f35b505f3660031901126101515760209051600a8152f35b505f36600319011261015157602090605a6101be565b505f366003190112610151576020905160038152f35b505f366003190112610151576020905160018152f35b5f3660031901126101515780602a60209252f3fea2646970667358221220e1d88e5458f35770c9025547effcbdde94a98d323dcf44b738a0a874c877b56d64736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x19 JUMPI PUSH2 0x39A SWAP1 DUP2 PUSH2 0x1E DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1294794B EQ PUSH2 0x350 JUMPI POP DUP1 PUSH4 0x18518628 EQ PUSH2 0x33A JUMPI DUP1 PUSH4 0x28B161CE EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0x2D6724E1 EQ PUSH2 0x324 JUMPI DUP1 PUSH4 0x3DC52C43 EQ PUSH2 0x30E JUMPI DUP1 PUSH4 0x3F60345A EQ PUSH2 0x2F8 JUMPI DUP1 PUSH4 0x547ACB16 EQ PUSH2 0x2E2 JUMPI DUP1 PUSH4 0x6801B442 EQ PUSH2 0x2CD JUMPI DUP1 PUSH4 0x68AA2524 EQ PUSH2 0x2B7 JUMPI DUP1 PUSH4 0x7E3EDBF1 EQ PUSH2 0x2A1 JUMPI DUP1 PUSH4 0x7EA0CDE9 EQ PUSH2 0x28B JUMPI DUP1 PUSH4 0x80B1C55B EQ PUSH2 0x275 JUMPI DUP1 PUSH4 0x84EFBFD5 EQ PUSH2 0x25F JUMPI DUP1 PUSH4 0xA22425B6 EQ PUSH2 0x249 JUMPI DUP1 PUSH4 0xAA6CDA91 EQ PUSH2 0x233 JUMPI DUP1 PUSH4 0xAF815F04 EQ PUSH2 0x21D JUMPI DUP1 PUSH4 0xB2CB247C EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0xBC848769 EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0xBDEFAF71 EQ PUSH2 0x1DB JUMPI DUP1 PUSH4 0xD9827217 EQ PUSH2 0x1C5 JUMPI DUP1 PUSH4 0xD9CEBBD9 EQ PUSH2 0x1AC JUMPI DUP1 PUSH4 0xDDE7B13F EQ PUSH2 0x196 JUMPI DUP1 PUSH4 0xDF9D385B EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0xE2CE6C6C EQ PUSH2 0x16B JUMPI DUP1 PUSH4 0xFAB86870 EQ PUSH2 0x155 JUMPI PUSH4 0xFD5DA010 EQ PUSH2 0x13C JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x9 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x7 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD DUP2 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xE DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x42 JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x4 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xD DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x10 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x5 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x2 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xF DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xC DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xB DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x11 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x28 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x6 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI MLOAD PUSH1 0x82 DUP2 MSTORE PUSH1 0x20 SWAP1 RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x8 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xA DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x5A PUSH2 0x1BE JUMP JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x3 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI DUP1 PUSH1 0x2A PUSH1 0x20 SWAP3 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE1 0xD8 DUP15 SLOAD PC RETURN JUMPI PUSH17 0xC9025547EFFCBDDE94A98D323DCF44B738 LOG0 0xA8 PUSH21 0xC877B56D64736F6C634300081A0033000000000000 ","sourceMap":"831:2493:58:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"constant_AGGREGATE_YIELD_FEE_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"constant_DECIMAL_SCALING_FACTORS_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"60806040908082526004361015610014575f80fd5b5f3560e01c9081631294794b1461035057508063185186281461033a57806328b161ce146102075780632d6724e1146103245780633dc52c431461030e5780633f60345a146102f8578063547acb16146102e25780636801b442146102cd57806368aa2524146102b75780637e3edbf1146102a15780637ea0cde91461028b57806380b1c55b1461027557806384efbfd51461025f578063a22425b614610249578063aa6cda9114610233578063af815f041461021d578063b2cb247c14610207578063bc848769146101f1578063bdefaf71146101db578063d9827217146101c5578063d9cebbd9146101ac578063dde7b13f14610196578063df9d385b14610181578063e2ce6c6c1461016b578063fab86870146101555763fd5da0101461013c575f80fd5b5f366003190112610151576020905160128152f35b5f80fd5b505f366003190112610151576020905160098152f35b505f366003190112610151576020905160078152f35b505f3660031901126101515760209051818152f35b505f3660031901126101515760209051600e8152f35b505f3660031901126101515760209060425b9051908152f35b505f366003190112610151576020905160048152f35b505f3660031901126101515760209051600d8152f35b505f366003190112610151576020905160108152f35b505f366003190112610151576020905160058152f35b505f366003190112610151576020905160028152f35b505f3660031901126101515760209051600f8152f35b505f3660031901126101515760209051600c8152f35b505f3660031901126101515760209051600b8152f35b505f366003190112610151576020905160118152f35b505f366003190112610151576020905160288152f35b505f366003190112610151576020905160068152f35b505f366003190112610151575160828152602090f35b505f36600319011261015157602090515f8152f35b505f366003190112610151576020905160088152f35b505f3660031901126101515760209051600a8152f35b505f36600319011261015157602090605a6101be565b505f366003190112610151576020905160038152f35b505f366003190112610151576020905160018152f35b5f3660031901126101515780602a60209252f3fea2646970667358221220e1d88e5458f35770c9025547effcbdde94a98d323dcf44b738a0a874c877b56d64736f6c634300081a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1294794B EQ PUSH2 0x350 JUMPI POP DUP1 PUSH4 0x18518628 EQ PUSH2 0x33A JUMPI DUP1 PUSH4 0x28B161CE EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0x2D6724E1 EQ PUSH2 0x324 JUMPI DUP1 PUSH4 0x3DC52C43 EQ PUSH2 0x30E JUMPI DUP1 PUSH4 0x3F60345A EQ PUSH2 0x2F8 JUMPI DUP1 PUSH4 0x547ACB16 EQ PUSH2 0x2E2 JUMPI DUP1 PUSH4 0x6801B442 EQ PUSH2 0x2CD JUMPI DUP1 PUSH4 0x68AA2524 EQ PUSH2 0x2B7 JUMPI DUP1 PUSH4 0x7E3EDBF1 EQ PUSH2 0x2A1 JUMPI DUP1 PUSH4 0x7EA0CDE9 EQ PUSH2 0x28B JUMPI DUP1 PUSH4 0x80B1C55B EQ PUSH2 0x275 JUMPI DUP1 PUSH4 0x84EFBFD5 EQ PUSH2 0x25F JUMPI DUP1 PUSH4 0xA22425B6 EQ PUSH2 0x249 JUMPI DUP1 PUSH4 0xAA6CDA91 EQ PUSH2 0x233 JUMPI DUP1 PUSH4 0xAF815F04 EQ PUSH2 0x21D JUMPI DUP1 PUSH4 0xB2CB247C EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0xBC848769 EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0xBDEFAF71 EQ PUSH2 0x1DB JUMPI DUP1 PUSH4 0xD9827217 EQ PUSH2 0x1C5 JUMPI DUP1 PUSH4 0xD9CEBBD9 EQ PUSH2 0x1AC JUMPI DUP1 PUSH4 0xDDE7B13F EQ PUSH2 0x196 JUMPI DUP1 PUSH4 0xDF9D385B EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0xE2CE6C6C EQ PUSH2 0x16B JUMPI DUP1 PUSH4 0xFAB86870 EQ PUSH2 0x155 JUMPI PUSH4 0xFD5DA010 EQ PUSH2 0x13C JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x9 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x7 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD DUP2 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xE DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x42 JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x4 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xD DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x10 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x5 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x2 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xF DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xC DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xB DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x11 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x28 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x6 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI MLOAD PUSH1 0x82 DUP2 MSTORE PUSH1 0x20 SWAP1 RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x8 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xA DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x5A PUSH2 0x1BE JUMP JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x3 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x151 JUMPI DUP1 PUSH1 0x2A PUSH1 0x20 SWAP3 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE1 0xD8 DUP15 SLOAD PC RETURN JUMPI PUSH17 0xC9025547EFFCBDDE94A98D323DCF44B738 LOG0 0xA8 PUSH21 0xC877B56D64736F6C634300081A0033000000000000 ","sourceMap":"831:2493:58:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3319:2;831:2493;3319:2;;;831:2493;;;;;;;;;;;;;;;-1:-1:-1;;831:2493:58;;;;;;;958:1;831:2493;;;;;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;;958:1;831:2493;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;;958:1;831:2493;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;3319:2;831:2493;;;;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;;958:1;831:2493;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;19627:2:16;2690:94:58;831:2493;;;;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;;;;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;;958:1;831:2493;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;;958:1;831:2493;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;;958:1;831:2493;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;;958:1;831:2493;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;;958:1;831:2493;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;;958:1;831:2493;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;;958:1;831:2493;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;;958:1;831:2493;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;;3212:2;831:2493;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;;958:1;831:2493;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;19627:2:16;831:2493:58;;;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;;;;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;;958:1;831:2493;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;;958:1;831:2493;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;19627:2:16;2790:99:58;;831:2493;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;;958:1;831:2493;;;;-1:-1:-1;831:2493:58;;-1:-1:-1;;831:2493:58;;;;;;;;;;;;;;-1:-1:-1;;831:2493:58;;;;;19627:2:16;831:2493:58;;;"},"methodIdentifiers":{"ADD_LIQUIDITY_CUSTOM_OFFSET()":"b2cb247c","AFTER_ADD_LIQUIDITY_OFFSET()":"aa6cda91","AFTER_INITIALIZE_OFFSET()":"3f60345a","AFTER_REMOVE_LIQUIDITY_OFFSET()":"80b1c55b","AFTER_SWAP_OFFSET()":"bdefaf71","AGGREGATE_SWAP_FEE_OFFSET()":"1294794b","AGGREGATE_YIELD_FEE_OFFSET()":"d9cebbd9","BEFORE_ADD_LIQUIDITY_OFFSET()":"dde7b13f","BEFORE_INITIALIZE_OFFSET()":"547acb16","BEFORE_REMOVE_LIQUIDITY_OFFSET()":"bc848769","BEFORE_SWAP_OFFSET()":"a22425b6","DECIMAL_DIFF_BITLENGTH()":"28b161ce","DECIMAL_SCALING_FACTORS_OFFSET()":"3dc52c43","DONATION_OFFSET()":"e2ce6c6c","DYNAMIC_SWAP_FEE_OFFSET()":"84efbfd5","ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET()":"fab86870","PAUSE_WINDOW_END_TIME_OFFSET()":"68aa2524","POOL_INITIALIZED_OFFSET()":"18518628","POOL_PAUSED_OFFSET()":"af815f04","POOL_RECOVERY_MODE_OFFSET()":"2d6724e1","POOL_REGISTERED_OFFSET()":"6801b442","REMOVE_LIQUIDITY_CUSTOM_OFFSET()":"7e3edbf1","STATIC_SWAP_FEE_OFFSET()":"fd5da010","TIMESTAMP_BITLENGTH()":"df9d385b","TOKEN_DECIMAL_DIFFS_BITLENGTH()":"7ea0cde9","UNBALANCED_LIQUIDITY_OFFSET()":"d9827217"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ADD_LIQUIDITY_CUSTOM_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AFTER_ADD_LIQUIDITY_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AFTER_INITIALIZE_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AFTER_REMOVE_LIQUIDITY_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AFTER_SWAP_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AGGREGATE_SWAP_FEE_OFFSET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AGGREGATE_YIELD_FEE_OFFSET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BEFORE_ADD_LIQUIDITY_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BEFORE_INITIALIZE_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BEFORE_REMOVE_LIQUIDITY_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BEFORE_SWAP_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DECIMAL_DIFF_BITLENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DECIMAL_SCALING_FACTORS_OFFSET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DONATION_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DYNAMIC_SWAP_FEE_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSE_WINDOW_END_TIME_OFFSET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_INITIALIZED_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_PAUSED_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_RECOVERY_MODE_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_REGISTERED_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REMOVE_LIQUIDITY_CUSTOM_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STATIC_SWAP_FEE_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TIMESTAMP_BITLENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN_DECIMAL_DIFFS_BITLENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNBALANCED_LIQUIDITY_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot per pool). This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct. The layout (i.e., offsets for each data field) is specified here. There are two libraries for interpreting these data. `HooksConfigLib` parses fields related to hooks, while `PoolConfigLib` contains helpers related to the non-hook-related flags, along with aggregate fee percentages and other data associated with pools.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Helper functions to read and write the packed configuration flags stored in `_poolConfigBits`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/lib/PoolConfigConst.sol\":\"PoolConfigConst\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"contracts/lib/PoolConfigConst.sol\":{\"keccak256\":\"0xcec5acd992ba3d85194d2a66de785676e5fbd76c7ef4bd75f581582c637e9191\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03feaba5c47de6cfa364a9f78f3d1cbc48c6e59e89348a56e773631ce3d52c4d\",\"dweb:/ipfs/QmWZmpFLKk6qEsTtbPaiKBWvTnSuYzQdbNJZX4Bng16c3F\"]}},\"version\":1}"}},"contracts/lib/PoolConfigLib.sol":{"PoolConfigLib":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220845597c6e726854f2d5ec61e6c36970db3d0ac41342fad08dae65c837ba7727264736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP5 SSTORE SWAP8 0xC6 0xE7 0x26 DUP6 0x4F 0x2D MCOPY 0xC6 0x1E PUSH13 0x36970DB3D0AC41342FAD08DAE6 TLOAD DUP4 PUSH28 0xA7727264736F6C634300081A00330000000000000000000000000000 ","sourceMap":"1279:10890:59:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220845597c6e726854f2d5ec61e6c36970db3d0ac41342fad08dae65c837ba7727264736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP5 SSTORE SWAP8 0xC6 0xE7 0x26 DUP6 0x4F 0x2D MCOPY 0xC6 0x1E PUSH13 0x36970DB3D0AC41342FAD08DAE6 TLOAD DUP4 PUSH28 0xA7727264736F6C634300081A00330000000000000000000000000000 ","sourceMap":"1279:10890:59:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot per pool). This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct. The layout (i.e., offsets for each data field) is specified in `PoolConfigConst`. There are two libraries for interpreting these data. `HooksConfigLib` parses fields related to hooks, while this one contains helpers related to the non-hook-related flags, along with aggregate fee percentages and other data associated with pools. The `PoolData` struct contains the raw bitmap with the entire pool state (`PoolConfigBits`), plus the token configuration, scaling factors, and dynamic information such as current balances and rates.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Helper functions to read and write the packed hook configuration flags stored in `_poolConfigBits`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/lib/PoolConfigLib.sol\":\"PoolConfigLib\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"contracts/lib/PoolConfigConst.sol\":{\"keccak256\":\"0xcec5acd992ba3d85194d2a66de785676e5fbd76c7ef4bd75f581582c637e9191\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03feaba5c47de6cfa364a9f78f3d1cbc48c6e59e89348a56e773631ce3d52c4d\",\"dweb:/ipfs/QmWZmpFLKk6qEsTtbPaiKBWvTnSuYzQdbNJZX4Bng16c3F\"]},\"contracts/lib/PoolConfigLib.sol\":{\"keccak256\":\"0x0df4ac214754751acdaa044f697ef2a45823689689aac22a6a102c8e543d97c7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13c1c708ac1a1f5523282a7430d7f5300120ac17b3c77a0bd103d2afe7aff979\",\"dweb:/ipfs/QmPstE7ZquJ4zMaCEXix8iCXc6hTSyNQaR9Z4aWBMTa9ys\"]}},\"version\":1}"}},"contracts/lib/PoolDataLib.sol":{"PoolDataLib":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212205f502f022274d58c7853a4caf3f7735314c579668b5722d4c978d170a4e5fe7464736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH0 POP 0x2F MUL 0x22 PUSH21 0xD58C7853A4CAF3F7735314C579668B5722D4C978D1 PUSH17 0xA4E5FE7464736F6C634300081A00330000 ","sourceMap":"1321:8945:60:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212205f502f022274d58c7853a4caf3f7735314c579668b5722d4c978d170a4e5fe7464736f6c634300081a0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH0 POP 0x2F MUL 0x22 PUSH21 0xD58C7853A4CAF3F7735314C579668B5722D4C978D1 PUSH17 0xA4E5FE7464736F6C634300081A00330000 ","sourceMap":"1321:8945:60:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot per pool). This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct. The layout (i.e., offsets for each data field) is specified in `PoolConfigConst`. The `PoolData` struct contains the raw bitmap with the entire pool state (`PoolConfigBits`), plus the token configuration, scaling factors, and dynamic information such as current balances and rates.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Helper functions to read/write a `PoolData` struct.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/lib/PoolDataLib.sol\":\"PoolDataLib\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe54f620633826cf7842c91606512a0d20414e5ce77a0b0cf5d44d10179cd7f6a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e86b797bc566f3e92392220564e457a9290e28e6af9566ec6d71bc9f3fc1548c\",\"dweb:/ipfs/QmewUN2ZTCQxuv8AqWfKNMn7joCtMmXg4wyAK3QqPtjPAw\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\":{\"keccak256\":\"0xf98fec19a1516432d7540f0cde2e967b627afbc5a361835766d57be8ba10b4e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://94b49929bff77d1fdaab8916350356fc9816317beef4f33c3af0e6a40493d01c\",\"dweb:/ipfs/QmPPhtmpPvgedbtQaJZz7JQCmiGKKTHmfh7EGhJS1yUCia\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"contracts/lib/PoolConfigConst.sol\":{\"keccak256\":\"0xcec5acd992ba3d85194d2a66de785676e5fbd76c7ef4bd75f581582c637e9191\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03feaba5c47de6cfa364a9f78f3d1cbc48c6e59e89348a56e773631ce3d52c4d\",\"dweb:/ipfs/QmWZmpFLKk6qEsTtbPaiKBWvTnSuYzQdbNJZX4Bng16c3F\"]},\"contracts/lib/PoolConfigLib.sol\":{\"keccak256\":\"0x0df4ac214754751acdaa044f697ef2a45823689689aac22a6a102c8e543d97c7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13c1c708ac1a1f5523282a7430d7f5300120ac17b3c77a0bd103d2afe7aff979\",\"dweb:/ipfs/QmPstE7ZquJ4zMaCEXix8iCXc6hTSyNQaR9Z4aWBMTa9ys\"]},\"contracts/lib/PoolDataLib.sol\":{\"keccak256\":\"0x0f004ef9c126426c1391516247f90cbb699982f3c545c821c2bdc3796c93f781\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93d7b94cb4e0c9eee127258fb69e390d34c391444f337b6cc5cbe5beb702f4e7\",\"dweb:/ipfs/QmbswDz4DrsXaEh9RSvpmWKX5JCLoTavyAX2511eKr5rQd\"]}},\"version\":1}"}},"contracts/lib/VaultStateLib.sol":{"VaultStateLib":{"abi":[{"inputs":[],"name":"BUFFER_PAUSED_OFFSET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"QUERY_DISABLED_OFFSET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VAULT_PAUSED_OFFSET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760af9081601c823930815050f35b5f80fdfe60808060405260043610156011575f80fd5b5f3560e01c908163227e492d146066575080632577aa901460515763434e60ca146039575f80fd5b5f366003190112604d5760206040515f8152f35b5f80fd5b5f366003190112604d57602060405160018152f35b5f366003190112604d5780600260209252f3fea264697066735822122088cf11fd6106ccad5103004050abdb1b6053ac533a004dea453b116fe860d64364736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0xAF SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x227E492D EQ PUSH1 0x66 JUMPI POP DUP1 PUSH4 0x2577AA90 EQ PUSH1 0x51 JUMPI PUSH4 0x434E60CA EQ PUSH1 0x39 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH1 0x4D JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH1 0x4D JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH1 0x4D JUMPI DUP1 PUSH1 0x2 PUSH1 0x20 SWAP3 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP9 0xCF GT REVERT PUSH2 0x6CC 0xAD MLOAD SUB STOP BLOCKHASH POP 0xAB 0xDB SHL PUSH1 0x53 0xAC MSTORE8 GASPRICE STOP 0x4D 0xEA GASLIMIT EXTCODESIZE GT PUSH16 0xE860D64364736F6C634300081A003300 ","sourceMap":"335:1477:61:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"60808060405260043610156011575f80fd5b5f3560e01c908163227e492d146066575080632577aa901460515763434e60ca146039575f80fd5b5f366003190112604d5760206040515f8152f35b5f80fd5b5f366003190112604d57602060405160018152f35b5f366003190112604d5780600260209252f3fea264697066735822122088cf11fd6106ccad5103004050abdb1b6053ac533a004dea453b116fe860d64364736f6c634300081a0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x227E492D EQ PUSH1 0x66 JUMPI POP DUP1 PUSH4 0x2577AA90 EQ PUSH1 0x51 JUMPI PUSH4 0x434E60CA EQ PUSH1 0x39 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH1 0x4D JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH1 0x4D JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH1 0x4D JUMPI DUP1 PUSH1 0x2 PUSH1 0x20 SWAP3 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP9 0xCF GT REVERT PUSH2 0x6CC 0xAD MLOAD SUB STOP BLOCKHASH POP 0xAB 0xDB SHL PUSH1 0x53 0xAC MSTORE8 GASPRICE STOP 0x4D 0xEA GASLIMIT EXTCODESIZE GT PUSH16 0xE860D64364736F6C634300081A003300 ","sourceMap":"335:1477:61:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;335:1477:61;;;;;;;;;;;;;;;;;;-1:-1:-1;;335:1477:61;;;;;;;568:1;335:1477;;;;;;-1:-1:-1;;335:1477:61;;;;;491:1;335:1477;;;"},"methodIdentifiers":{"BUFFER_PAUSED_OFFSET()":"227e492d","QUERY_DISABLED_OFFSET()":"434e60ca","VAULT_PAUSED_OFFSET()":"2577aa90"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BUFFER_PAUSED_OFFSET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"QUERY_DISABLED_OFFSET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_PAUSED_OFFSET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Helper functions for reading and writing the `VaultState` struct.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/lib/VaultStateLib.sol\":\"VaultStateLib\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"contracts/lib/VaultStateLib.sol\":{\"keccak256\":\"0xc40f34646f76afe536a326173d3c8cd663a655375531f65f3e6f7c63cecddeeb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a97b6d2363d70869b9cf66104a6c6bdfc84d351085c94b23b0104f2608e52ff4\",\"dweb:/ipfs/QmVPVR8F6nSxxhxTpFp5cgH9n1dE2E5UXD6cPauumtpS3e\"]}},\"version\":1}"}},"contracts/token/ERC20MultiToken.sol":{"ERC20MultiToken":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"PoolTotalSupplyTooLow","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"PoolTotalSupplyTooLow\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"The ERC20MultiToken is an ERC20-focused multi-token implementation that is fully compatible with the ERC20 API on the token side. It also allows for the minting and burning of tokens on the multi-token side.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"PoolTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}]},\"events\":{\"Approval(address,address,address,uint256)\":{\"params\":{\"owner\":\"The token holder\",\"pool\":\"The pool token receiving the allowance\",\"spender\":\"The account being authorized to spend a given amount of the token\",\"value\":\"The number of tokens spender is authorized to transfer from owner\"}},\"Transfer(address,address,address,uint256)\":{\"params\":{\"from\":\"The token source\",\"pool\":\"The pool token being transferred\",\"to\":\"The token destination\",\"value\":\"The number of tokens\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"PoolTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a pool token can't be lower than the absolute minimum.\"}]},\"events\":{\"Approval(address,address,address,uint256)\":{\"notice\":\"The allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,address,uint256)\":{\"notice\":\"Pool tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"user\",\"methods\":{},\"notice\":\"Store Token data and handle accounting for pool tokens in the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/token/ERC20MultiToken.sol\":\"ERC20MultiToken\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":500},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol\":{\"keccak256\":\"0x4994bc0f8e5905640876a9411dadb73221ea2b7b1168d22cf5fe44ee1ca16960\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69a0a6ab9c2622426ccfcb7263deb5615e589e98b3b31ea9fcd21595bb42a13d\",\"dweb:/ipfs/QmVW6GVXGTHnVo8MGk7zdLMASR8uN7khPsrEMXwgy4NBrQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x743734d3d3503d705f0a778c4b0dd61fdb067e89a07481ddbead0654e6808318\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6198f27b2d01f346fdd3d1302e9a6ddd543d2f06afd675d84919c2242bd26d8d\",\"dweb:/ipfs/QmYntQih5MwxxdGnVu2BPVLeqFuJEH761cByAesjwE6JKT\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\":{\"keccak256\":\"0x9dc4c8d6dd5dbc108dd377dab73a3e6c84e8c104713d2afb3cba8acc9ddf4c63\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2ef7c65fe356144f8cd720109b818e1ec6cc495ca35b55ca273ef9db45c6ae00\",\"dweb:/ipfs/QmREJgnfgoqemnYKvfYjTFJBAMsV9VAKA5AY5Woprpc1vs\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"contracts/token/ERC20MultiToken.sol\":{\"keccak256\":\"0x49578c053271957fa9661c6a3e3ce6310a3f0690be6deca9eeb28f4e129bcfd3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e3bbd6d7baa790f6e259dfcab0ae2b0db96c08b21739dca829217af6fdbea15d\",\"dweb:/ipfs/QmVgirrgRbkHVdfthMKTJi98QeHmx9DHTT1WBNQRYogpBn\"]}},\"version\":1}"}}}}}