Skip to content

Instantly share code, notes, and snippets.

@Cerwyn
Created December 7, 2021 10:10
Show Gist options
  • Save Cerwyn/a0ca76beb39a91ecad0df37656af6dea to your computer and use it in GitHub Desktop.
Save Cerwyn/a0ca76beb39a91ecad0df37656af6dea to your computer and use it in GitHub Desktop.
PHP Web3 - Interact with smart contract
This file has been truncated, but you can view the full file.
{
"contractName": "BPool",
"abi": [
{
"inputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "src",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "dst",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amt",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": true,
"inputs": [
{
"indexed": true,
"internalType": "bytes4",
"name": "sig",
"type": "bytes4"
},
{
"indexed": true,
"internalType": "address",
"name": "caller",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "LOG_CALL",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "caller",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "tokenOut",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "tokenAmountOut",
"type": "uint256"
}
],
"name": "LOG_EXIT",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "caller",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "tokenAmountIn",
"type": "uint256"
}
],
"name": "LOG_JOIN",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "caller",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "tokenOut",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "tokenAmountIn",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "tokenAmountOut",
"type": "uint256"
}
],
"name": "LOG_SWAP",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "src",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "dst",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amt",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"constant": true,
"inputs": [],
"name": "BONE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "BPOW_PRECISION",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "EXIT_FEE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "INIT_POOL_SUPPLY",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "MAX_BOUND_TOKENS",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "MAX_BPOW_BASE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "MAX_FEE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "MAX_IN_RATIO",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "MAX_OUT_RATIO",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "MAX_TOTAL_WEIGHT",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "MAX_WEIGHT",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "MIN_BALANCE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "MIN_BOUND_TOKENS",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "MIN_BPOW_BASE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "MIN_FEE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "MIN_WEIGHT",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "src",
"type": "address"
},
{
"internalType": "address",
"name": "dst",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "dst",
"type": "address"
},
{
"internalType": "uint256",
"name": "amt",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "whom",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "tokenBalanceIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenWeightIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenBalanceOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenWeightOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenAmountOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "swapFee",
"type": "uint256"
}
],
"name": "calcInGivenOut",
"outputs": [
{
"internalType": "uint256",
"name": "tokenAmountIn",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "tokenBalanceIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenWeightIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenBalanceOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenWeightOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenAmountIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "swapFee",
"type": "uint256"
}
],
"name": "calcOutGivenIn",
"outputs": [
{
"internalType": "uint256",
"name": "tokenAmountOut",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "tokenBalanceOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenWeightOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "poolSupply",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "totalWeight",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenAmountOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "swapFee",
"type": "uint256"
}
],
"name": "calcPoolInGivenSingleOut",
"outputs": [
{
"internalType": "uint256",
"name": "poolAmountIn",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "tokenBalanceIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenWeightIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "poolSupply",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "totalWeight",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenAmountIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "swapFee",
"type": "uint256"
}
],
"name": "calcPoolOutGivenSingleIn",
"outputs": [
{
"internalType": "uint256",
"name": "poolAmountOut",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "tokenBalanceIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenWeightIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "poolSupply",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "totalWeight",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "poolAmountOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "swapFee",
"type": "uint256"
}
],
"name": "calcSingleInGivenPoolOut",
"outputs": [
{
"internalType": "uint256",
"name": "tokenAmountIn",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "tokenBalanceOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenWeightOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "poolSupply",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "totalWeight",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "poolAmountIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "swapFee",
"type": "uint256"
}
],
"name": "calcSingleOutGivenPoolIn",
"outputs": [
{
"internalType": "uint256",
"name": "tokenAmountOut",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "tokenBalanceIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenWeightIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenBalanceOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenWeightOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "swapFee",
"type": "uint256"
}
],
"name": "calcSpotPrice",
"outputs": [
{
"internalType": "uint256",
"name": "spotPrice",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "dst",
"type": "address"
},
{
"internalType": "uint256",
"name": "amt",
"type": "uint256"
}
],
"name": "decreaseApproval",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getColor",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "dst",
"type": "address"
},
{
"internalType": "uint256",
"name": "amt",
"type": "uint256"
}
],
"name": "increaseApproval",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "dst",
"type": "address"
},
{
"internalType": "uint256",
"name": "amt",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "src",
"type": "address"
},
{
"internalType": "address",
"name": "dst",
"type": "address"
},
{
"internalType": "uint256",
"name": "amt",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "isPublicSwap",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "isFinalized",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "t",
"type": "address"
}
],
"name": "isBound",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getNumTokens",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getCurrentTokens",
"outputs": [
{
"internalType": "address[]",
"name": "tokens",
"type": "address[]"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getFinalTokens",
"outputs": [
{
"internalType": "address[]",
"name": "tokens",
"type": "address[]"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "getDenormalizedWeight",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getTotalDenormalizedWeight",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "getNormalizedWeight",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "getBalance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getSwapFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getController",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "uint256",
"name": "swapFee",
"type": "uint256"
}
],
"name": "setSwapFee",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "manager",
"type": "address"
}
],
"name": "setController",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "bool",
"name": "public_",
"type": "bool"
}
],
"name": "setPublicSwap",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "finalize",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "denorm",
"type": "uint256"
}
],
"name": "bind",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "denorm",
"type": "uint256"
}
],
"name": "rebind",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "unbind",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "gulp",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOut",
"type": "address"
}
],
"name": "getSpotPrice",
"outputs": [
{
"internalType": "uint256",
"name": "spotPrice",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOut",
"type": "address"
}
],
"name": "getSpotPriceSansFee",
"outputs": [
{
"internalType": "uint256",
"name": "spotPrice",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "uint256",
"name": "poolAmountOut",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "maxAmountsIn",
"type": "uint256[]"
}
],
"name": "joinPool",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "uint256",
"name": "poolAmountIn",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "minAmountsOut",
"type": "uint256[]"
}
],
"name": "exitPool",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenAmountIn",
"type": "uint256"
},
{
"internalType": "address",
"name": "tokenOut",
"type": "address"
},
{
"internalType": "uint256",
"name": "minAmountOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxPrice",
"type": "uint256"
}
],
"name": "swapExactAmountIn",
"outputs": [
{
"internalType": "uint256",
"name": "tokenAmountOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "spotPriceAfter",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"internalType": "uint256",
"name": "maxAmountIn",
"type": "uint256"
},
{
"internalType": "address",
"name": "tokenOut",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenAmountOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxPrice",
"type": "uint256"
}
],
"name": "swapExactAmountOut",
"outputs": [
{
"internalType": "uint256",
"name": "tokenAmountIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "spotPriceAfter",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenAmountIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "minPoolAmountOut",
"type": "uint256"
}
],
"name": "joinswapExternAmountIn",
"outputs": [
{
"internalType": "uint256",
"name": "poolAmountOut",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"internalType": "uint256",
"name": "poolAmountOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxAmountIn",
"type": "uint256"
}
],
"name": "joinswapPoolAmountOut",
"outputs": [
{
"internalType": "uint256",
"name": "tokenAmountIn",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "tokenOut",
"type": "address"
},
{
"internalType": "uint256",
"name": "poolAmountIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "minAmountOut",
"type": "uint256"
}
],
"name": "exitswapPoolAmountIn",
"outputs": [
{
"internalType": "uint256",
"name": "tokenAmountOut",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "tokenOut",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenAmountOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxPoolAmountIn",
"type": "uint256"
}
],
"name": "exitswapExternAmountOut",
"outputs": [
{
"internalType": "uint256",
"name": "poolAmountIn",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
}
],
"metadata": "{\"compiler\":{\"version\":\"0.5.12+commit.7709ece9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amt\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":true,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"sig\",\"type\":\"bytes4\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"LOG_CALL\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmountOut\",\"type\":\"uint256\"}],\"name\":\"LOG_EXIT\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmountIn\",\"type\":\"uint256\"}],\"name\":\"LOG_JOIN\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmountOut\",\"type\":\"uint256\"}],\"name\":\"LOG_SWAP\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amt\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"BONE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"BPOW_PRECISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"EXIT_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"INIT_POOL_SUPPLY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_BOUND_TOKENS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_BPOW_BASE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_IN_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_OUT_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_TOTAL_WEIGHT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_WEIGHT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MIN_BALANCE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MIN_BOUND_TOKENS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MIN_BPOW_BASE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MIN_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MIN_WEIGHT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amt\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"whom\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denorm\",\"type\":\"uint256\"}],\"name\":\"bind\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalanceIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenWeightIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenBalanceOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenWeightOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFee\",\"type\":\"uint256\"}],\"name\":\"calcInGivenOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmountIn\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalanceIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenWeightIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenBalanceOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenWeightOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFee\",\"type\":\"uint256\"}],\"name\":\"calcOutGivenIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmountOut\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalanceOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenWeightOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalWeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFee\",\"type\":\"uint256\"}],\"name\":\"calcPoolInGivenSingleOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolAmountIn\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalanceIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenWeightIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalWeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFee\",\"type\":\"uint256\"}],\"name\":\"calcPoolOutGivenSingleIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolAmountOut\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalanceIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenWeightIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalWeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFee\",\"type\":\"uint256\"}],\"name\":\"calcSingleInGivenPoolOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmountIn\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalanceOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenWeightOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalWeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFee\",\"type\":\"uint256\"}],\"name\":\"calcSingleOutGivenPoolIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmountOut\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalanceIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenWeightIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenBalanceOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenWeightOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFee\",\"type\":\"uint256\"}],\"name\":\"calcSpotPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"spotPrice\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amt\",\"type\":\"uint256\"}],\"name\":\"decreaseApproval\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"exitPool\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPoolAmountIn\",\"type\":\"uint256\"}],\"name\":\"exitswapExternAmountOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolAmountIn\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"exitswapPoolAmountIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmountOut\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"finalize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getColor\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getController\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCurrentTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getDenormalizedWeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getFinalTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getNormalizedWeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getNumTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"getSpotPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"spotPrice\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"getSpotPriceSansFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"spotPrice\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getSwapFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getTotalDenormalizedWeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"gulp\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amt\",\"type\":\"uint256\"}],\"name\":\"increaseApproval\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"t\",\"type\":\"address\"}],\"name\":\"isBound\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isPublicSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"}],\"name\":\"joinPool\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minPoolAmountOut\",\"type\":\"uint256\"}],\"name\":\"joinswapExternAmountIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolAmountOut\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"joinswapPoolAmountOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmountIn\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denorm\",\"type\":\"uint256\"}],\"name\":\"rebind\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"setController\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bool\",\"name\":\"public_\",\"type\":\"bool\"}],\"name\":\"setPublicSwap\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFee\",\"type\":\"uint256\"}],\"name\":\"setSwapFee\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPrice\",\"type\":\"uint256\"}],\"name\":\"swapExactAmountIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"spotPriceAfter\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPrice\",\"type\":\"uint256\"}],\"name\":\"swapExactAmountOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"spotPriceAfter\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amt\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amt\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"unbind\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{\"calcInGivenOut(uint256,uint256,uint256,uint256,uint256,uint256)\":{\"notice\":\"******************************************************************************************** // calcInGivenOut // // aI = tokenAmountIn // // bO = tokenBalanceOut / / bO \\\\ (wO / wI) \\\\ // // bI = tokenBalanceIn bI * | | ------------ | ^ - 1 | // // aO = tokenAmountOut aI = \\\\ \\\\ ( bO - aO ) / / // // wI = tokenWeightIn -------------------------------------------- // // wO = tokenWeightOut ( 1 - sF ) // // sF = swapFee //*********************************************************************************************\"},\"calcOutGivenIn(uint256,uint256,uint256,uint256,uint256,uint256)\":{\"notice\":\"******************************************************************************************** // calcOutGivenIn // // aO = tokenAmountOut // // bO = tokenBalanceOut // // bI = tokenBalanceIn / / bI \\\\ (wI / wO) \\\\ // // aI = tokenAmountIn aO = bO * | 1 - | -------------------------- | ^ | // // wI = tokenWeightIn \\\\ \\\\ ( bI + ( aI * ( 1 - sF )) / / // // wO = tokenWeightOut // // sF = swapFee //*********************************************************************************************\"},\"calcPoolInGivenSingleOut(uint256,uint256,uint256,uint256,uint256,uint256)\":{\"notice\":\"******************************************************************************************** // calcPoolInGivenSingleOut // // pAi = poolAmountIn // / tAo \\\\\\\\ / wO \\\\ \\\\ // // bO = tokenBalanceOut // | bO - -------------------------- |\\\\ | ---- | \\\\ // // tAo = tokenAmountOut pS - || \\\\ 1 - ((1 - (tO / tW)) * sF)/ | ^ \\\\ tW / * pS | // // ps = poolSupply \\\\\\\\ -----------------------------------/ / // // wO = tokenWeightOut pAi = \\\\\\\\ bO / / // // tW = totalWeight ------------------------------------------------------------- // // sF = swapFee ( 1 - eF ) // // eF = exitFee //*********************************************************************************************\"},\"calcPoolOutGivenSingleIn(uint256,uint256,uint256,uint256,uint256,uint256)\":{\"notice\":\"******************************************************************************************** // calcPoolOutGivenSingleIn // // pAo = poolAmountOut / \\\\ // // tAi = tokenAmountIn /// / // wI \\\\ \\\\\\\\ \\\\ wI \\\\ // // wI = tokenWeightIn //| tAi *| 1 - || 1 - -- | * sF || + tBi \\\\ -- \\\\ // // tW = totalWeight pAo=|| \\\\ \\\\ \\\\\\\\ tW / // | ^ tW | * pS - pS // // tBi = tokenBalanceIn \\\\\\\\ ------------------------------------- / / // // pS = poolSupply \\\\\\\\ tBi / / // // sF = swapFee \\\\ / //*********************************************************************************************\"},\"calcSingleInGivenPoolOut(uint256,uint256,uint256,uint256,uint256,uint256)\":{\"notice\":\"******************************************************************************************** // calcSingleInGivenPoolOut // // tAi = tokenAmountIn //(pS + pAo)\\\\ / 1 \\\\\\\\ // // pS = poolSupply || --------- | ^ | --------- || * bI - bI // // pAo = poolAmountOut \\\\\\\\ pS / \\\\(wI / tW)// // // bI = balanceIn tAi = -------------------------------------------- // // wI = weightIn / wI \\\\ // // tW = totalWeight | 1 - ---- | * sF // // sF = swapFee \\\\ tW / //*********************************************************************************************\"},\"calcSingleOutGivenPoolIn(uint256,uint256,uint256,uint256,uint256,uint256)\":{\"notice\":\"******************************************************************************************** // calcSingleOutGivenPoolIn // // tAo = tokenAmountOut / / \\\\\\\\ // // bO = tokenBalanceOut / // pS - (pAi * (1 - eF)) \\\\ / 1 \\\\ \\\\\\\\ // // pAi = poolAmountIn | bO - || ----------------------- | ^ | --------- | * b0 || // // ps = poolSupply \\\\ \\\\\\\\ pS / \\\\(wO / tW)/ // // // wI = tokenWeightIn tAo = \\\\ \\\\ // // // tW = totalWeight / / wO \\\\ \\\\ // // sF = swapFee * | 1 - | 1 - ---- | * sF | // // eF = exitFee \\\\ \\\\ tW / / //*********************************************************************************************\"},\"calcSpotPrice(uint256,uint256,uint256,uint256,uint256)\":{\"notice\":\"******************************************************************************************** // calcSpotPrice // // sP = spotPrice // // bI = tokenBalanceIn ( bI / wI ) 1 // // bO = tokenBalanceOut sP = ----------- * ---------- // // wI = tokenWeightIn ( bO / wO ) ( 1 - sF ) // // wO = tokenWeightOut // // sF = swapFee //*********************************************************************************************\"}}}},\"settings\":{\"compilationTarget\":{\"project:/contracts/BPool.sol\":\"BPool\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"project:/contracts/BColor.sol\":{\"keccak256\":\"0x861763643a4c198b682bd8283079c9acbaeb3920e6e3466dd51a026335364ffe\",\"urls\":[\"bzz-raw://dd3f74e1bcea284bf9cef8cf2a188be0949af4721e241238be7fc831e0dafe56\",\"dweb:/ipfs/QmeYct7REbmMReHoze3dwPgv7XfgZ9nFYm9nWhWdvL1QNG\"]},\"project:/contracts/BConst.sol\":{\"keccak256\":\"0x746532c59ec7faf02f4fb8abcde7bfd18fb9cb5aaac3b3bc3243dd762e606d40\",\"urls\":[\"bzz-raw://89f134cb08817b2d3241225e25594be0f880fc5400b7a2d64e2bce4f4e637877\",\"dweb:/ipfs/QmXYU8U4YPawTgN38uGAVSCALbqUSwJBChLKy7KTrHywuk\"]},\"project:/contracts/BMath.sol\":{\"keccak256\":\"0x24444d299b64a9fe3bc916d2638fb727b92275e46c47a3204dc26410baf06fb5\",\"urls\":[\"bzz-raw://71ea334a52d68158b2fd7d137a901816a875b7812c9e884cb944c46749451514\",\"dweb:/ipfs/QmcLieKwpp1eNdxiQBNumNbNksvoZijWJNnd2UdcaAT3kQ\"]},\"project:/contracts/BNum.sol\":{\"keccak256\":\"0x6eb672c585a84af7634d623d45faf02bcd46568ce344dd212247ce4282cdc489\",\"urls\":[\"bzz-raw://52fe12a2de6160164fd060564eb666582ad43f91fc7d49438bfc527a004fdd32\",\"dweb:/ipfs/QmVzmRQDmDkBBa6kjjYv6bYaC8pUb4RtDSZcZY6g3NFTTv\"]},\"project:/contracts/BPool.sol\":{\"keccak256\":\"0x83355adeb3ab78a32f1ac23adcee4f2059b1f3c1cfd13db75e7f63052e78381d\",\"urls\":[\"bzz-raw://0e67491e2cb4f76511e82451a983ff7d97e4404970e32292f3f20c9a11791fc5\",\"dweb:/ipfs/QmaL56C1ew5CQDtkNjeas1LoxfcduGBBZjvNeapGbQXKuJ\"]},\"project:/contracts/BToken.sol\":{\"keccak256\":\"0xd9799786ddd1274712f1992f88561f53f2cddff682907f3ca7c9887ca179c988\",\"urls\":[\"bzz-raw://2dcd2ef976fa12e4b17fff94a98c03db997462afd9a16f136f9a09dbcf9c6c5b\",\"dweb:/ipfs/QmSENTe7qUMXsUnXDsvCrMiQAhvRvGoQ3ynf2urAJ6374v\"]}},\"version\":1}",
"bytecode": "0x60c0604052601360808190527f42616c616e63657220506f6f6c20546f6b656e0000000000000000000000000060a0908152620000409160039190620000f7565b506040805180820190915260038082527f425054000000000000000000000000000000000000000000000000000000000060209092019182526200008791600491620000f7565b506005805460ff19166012179055348015620000a257600080fd5b5060068054600580546201000060b060020a031916336201000081029190911790915564e8d4a51000600755600160a060020a03199091161760a060020a60ff02191690556008805460ff191690556200019c565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200013a57805160ff19168380011785556200016a565b828001600101855582156200016a579182015b828111156200016a5782518255916020019190600101906200014d565b50620001789291506200017c565b5090565b6200019991905b8082111562000178576000815560010162000183565b90565b61587480620001ac6000396000f3fe608060405234801561001057600080fd5b5060043610610378576000357c0100000000000000000000000000000000000000000000000000000000900480638d4e4083116101e7578063bc694ea211610122578063d73dd623116100c5578063d73dd62314610b7f578063dd62ed3e14610bab578063e4a28a521461047e578063e4e1e53814610bd9578063ec09302114610c0b578063f1b8a9b714610c13578063f8b2cb4f14610c39578063f8d6aed414610c5f578063fde924f714610c9a57610378565b8063bc694ea214610ad9578063be3bbd2e14610ae1578063c36596a6146104f2578063c6580d1214610b39578063cc77828d14610b41578063cd2ed8fb14610b49578063cf5e7bd314610b51578063d4cadf6814610b7757610378565b8063a221ee491161018a578063a221ee49146109a6578063a9059cbb146109db578063b02f0b7314610a07578063b0e0d13614610a7e578063b7b800a414610a86578063ba019dab14610a8e578063ba9530a614610a96578063bc063e1a14610ad157610378565b80638d4e40831461092a57806392eefe9b14610932578063936c3477146109585780639381cd2b14610960578063948d8ce61461096857806395d89b411461098e578063992e2a92146109965780639a86139b1461099e57610378565b806349b59552116102b757806376c7a3c71161025a57806376c7a3c7146107aa5780637c5e9ea4146107b25780638201aa3f1461080b57806382f652ad1461084b5780638656b65314610886578063867378c5146108c157806389298012146108c95780638c28cbe81461090457610378565b806349b595521461061b5780634bb278f31461063a5780634f69c0d4146106425780635c1bbaf7146106b95780635db34277146106f457806366188463146107265780636d06dfa01461075257806370a082311461078457610378565b8063218b53821161031f578063218b5382146104f257806323b872dd146104fa5780632f37b624146105305780633018205f14610556578063313ce5671461057a57806334e19907146105985780633fdddaa2146105b757806346ab38f1146105e957610378565b806302c967481461037d57806306fdde03146103c1578063095ea7b31461043e57806309a3bbe41461047e5780631446a7ff1461048657806315e84af9146104b457806318160ddd146104e2578063189d00ca146104ea575b600080fd5b6103af6004803603606081101561039357600080fd5b50600160a060020a038135169060208101359060400135610ca2565b60408051918252519081900360200190f35b6103c9610fef565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104035781810151838201526020016103eb565b50505050905090810190601f1680156104305780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61046a6004803603604081101561045457600080fd5b50600160a060020a038135169060200135611085565b604080519115158252519081900360200190f35b6103af6110da565b6103af6004803603604081101561049c57600080fd5b50600160a060020a03813581169160200135166110e7565b6103af600480360360408110156104ca57600080fd5b50600160a060020a0381358116916020013516611241565b6103af611392565b6103af611398565b6103af6113ac565b61046a6004803603606081101561051057600080fd5b50600160a060020a038135811691602081013590911690604001356113b8565b61046a6004803603602081101561054657600080fd5b5035600160a060020a031661151d565b61055e61153b565b60408051600160a060020a039092168252519081900360200190f35b61058261159c565b6040805160ff9092168252519081900360200190f35b6105b5600480360360208110156105ae57600080fd5b50356115a5565b005b6105b5600480360360608110156105cd57600080fd5b50600160a060020a0381351690602081013590604001356117c9565b6103af600480360360608110156105ff57600080fd5b50600160a060020a038135169060208101359060400135611c15565b6105b56004803603602081101561063157600080fd5b50351515611f01565b6105b5612092565b6105b56004803603604081101561065857600080fd5b8135919081019060408101602082013564010000000081111561067a57600080fd5b82018360208201111561068c57600080fd5b803590602001918460208302840111640100000000831117156106ae57600080fd5b5090925090506122a9565b6103af600480360360c08110156106cf57600080fd5b5080359060208101359060408101359060608101359060808101359060a00135612590565b6103af6004803603606081101561070a57600080fd5b50600160a060020a038135169060208101359060400135612648565b61046a6004803603604081101561073c57600080fd5b50600160a060020a038135169060200135612919565b6103af6004803603606081101561076857600080fd5b50600160a060020a0381351690602081013590604001356129f1565b6103af6004803603602081101561079a57600080fd5b5035600160a060020a0316612cf0565b6103af612d0b565b6107f2600480360360a08110156107c857600080fd5b50600160a060020a0381358116916020810135916040820135169060608101359060800135612d1d565b6040805192835260208301919091528051918290030190f35b6107f2600480360360a081101561082157600080fd5b50600160a060020a038135811691602081013591604082013516906060810135906080013561320d565b6103af600480360360c081101561086157600080fd5b5080359060208101359060408101359060608101359060808101359060a001356136e4565b6103af600480360360c081101561089c57600080fd5b5080359060208101359060408101359060608101359060808101359060a001356137a3565b6103af613844565b6103af600480360360c08110156108df57600080fd5b5080359060208101359060408101359060608101359060808101359060a00135613858565b6105b56004803603602081101561091a57600080fd5b5035600160a060020a0316613908565b61046a613ad9565b6105b56004803603602081101561094857600080fd5b5035600160a060020a0316613ae2565b6103af613c2c565b6103af613c84565b6103af6004803603602081101561097e57600080fd5b5035600160a060020a0316613c91565b6103c9613d5f565b6103af613dc0565b6103af613dcc565b6103af600480360360a08110156109bc57600080fd5b5080359060208101359060408101359060608101359060800135613df0565b61046a600480360360408110156109f157600080fd5b50600160a060020a038135169060200135613e55565b6105b560048036036040811015610a1d57600080fd5b81359190810190604081016020820135640100000000811115610a3f57600080fd5b820183602082011115610a5157600080fd5b80359060200191846020830284011164010000000083111715610a7357600080fd5b509092509050613e6b565b6103af61419f565b6103af6141a4565b6103af6141a9565b6103af600480360360c0811015610aac57600080fd5b5080359060208101359060408101359060608101359060808101359060a001356141ae565b6103af61422f565b6103af61423f565b610ae961424b565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610b25578181015183820152602001610b0d565b505050509050019250505060405180910390f35b6103af614343565b610ae9614348565b6103af614399565b6105b560048036036020811015610b6757600080fd5b5035600160a060020a031661439f565b6103af61472c565b61046a60048036036040811015610b9557600080fd5b50600160a060020a038135169060200135614784565b6103af60048036036040811015610bc157600080fd5b50600160a060020a0381358116916020013516614805565b6105b560048036036060811015610bef57600080fd5b50600160a060020a038135169060208101359060400135614830565b6103af614ab4565b6103af60048036036020811015610c2957600080fd5b5035600160a060020a0316614ac4565b6103af60048036036020811015610c4f57600080fd5b5035600160a060020a0316614ba4565b6103af600480360360c0811015610c7557600080fd5b5080359060208101359060408101359060608101359060808101359060a00135614c72565b61046a614cf5565b600033600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615610d53576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff16610daa576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615680833981519152604482015290519081900360640190fd5b600160a060020a0384166000908152600a602052604090205460ff16610e08576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a0384166000908152600a60205260409020600390810154610e3d91670de0b6b3a76400005b04600101614d05565b831115610e82576040805160e560020a62461bcd02815260206004820152601160248201526000805160206156e0833981519152604482015290519081900360640190fd5b600160a060020a0384166000908152600a6020526040902060038101546002808301549054600b54600754610ebc949392919089906136e4565b915081610f01576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020615820833981519152604482015290519081900360640190fd5b82821115610f47576040805160e560020a62461bcd02815260206004820152600c60248201526000805160206156c0833981519152604482015290519081900360640190fd5b610f55816003015485614dee565b60038201556000610f668382614d05565b604080518781529051919250600160a060020a0388169133916000805160206157a0833981519152919081900360200190a3610fa23384614e5f565b610fb4610faf8483614dee565b614e6d565b600554610fd090620100009004600160a060020a031682614e79565b610fdb863387614e83565b50506005805461ff00191690559392505050565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561107b5780601f106110505761010080835404028352916020019161107b565b820191906000526020600020905b81548152906001019060200180831161105e57829003601f168201915b5050505050905090565b336000818152600160209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390926000805160206157c0833981519152928290030190a35060015b92915050565b6802b5e3af16b188000081565b600554600090610100900460ff1615611138576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b600160a060020a0383166000908152600a602052604090205460ff16611196576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a0382166000908152600a602052604090205460ff166111f4576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a038084166000908152600a602052604080822092851682528120600380840154600280860154928401549084015493946112389492939290613df0565b95945050505050565b600554600090610100900460ff1615611292576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b600160a060020a0383166000908152600a602052604090205460ff166112f0576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a0382166000908152600a602052604090205460ff1661134e576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a038084166000908152600a602052604080822092851682529020600380830154600280850154928401549084015460075461123894929190613df0565b60025490565b6402540be400670de0b6b3a76400005b0481565b670de0b6b3a764000081565b600033600160a060020a03851614806113f45750600160a060020a03841660009081526001602090815260408083203384529091529020548211155b611448576040805160e560020a62461bcd02815260206004820152601560248201527f4552525f42544f4b454e5f4241445f43414c4c45520000000000000000000000604482015290519081900360640190fd5b611453848484614f78565b33600160a060020a038516148015906114915750600160a060020a038416600090815260016020908152604080832033845290915290205460001914155b1561151357600160a060020a03841660009081526001602090815260408083203384529091529020546114c49083614dee565b600160a060020a03858116600090815260016020908152604080832033808552908352928190208590558051948552519287169391926000805160206157c08339815191529281900390910190a35b5060019392505050565b600160a060020a03166000908152600a602052604090205460ff1690565b600554600090610100900460ff161561158c576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b50600654600160a060020a031690565b60055460ff1690565b33600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615611654576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff16156116ac576040805160e560020a62461bcd02815260206004820152601060248201526000805160206157e0833981519152604482015290519081900360640190fd5b600654600160a060020a031633146116fc576040805160e560020a62461bcd0281526020600482015260126024820152600080516020615720833981519152604482015290519081900360640190fd5b64e8d4a51000811015611759576040805160e560020a62461bcd02815260206004820152600b60248201527f4552525f4d494e5f464545000000000000000000000000000000000000000000604482015290519081900360640190fd5b67016345785d8a00008111156117b9576040805160e560020a62461bcd02815260206004820152600b60248201527f4552525f4d41585f464545000000000000000000000000000000000000000000604482015290519081900360640190fd5b6007556005805461ff0019169055565b33600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615611878576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560065433600160a060020a03909116146118d9576040805160e560020a62461bcd0281526020600482015260126024820152600080516020615720833981519152604482015290519081900360640190fd5b600160a060020a0383166000908152600a602052604090205460ff16611937576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b60085460ff1615611980576040805160e560020a62461bcd02815260206004820152601060248201526000805160206157e0833981519152604482015290519081900360640190fd5b670de0b6b3a76400008110156119e0576040805160e560020a62461bcd02815260206004820152600e60248201527f4552525f4d494e5f574549474854000000000000000000000000000000000000604482015290519081900360640190fd5b6802b5e3af16b1880000811115611a41576040805160e560020a62461bcd02815260206004820152600e60248201527f4552525f4d41585f574549474854000000000000000000000000000000000000604482015290519081900360640190fd5b620f4240821015611a9c576040805160e560020a62461bcd02815260206004820152600f60248201527f4552525f4d494e5f42414c414e43450000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0383166000908152600a602052604090206002015480821115611b3f57611ad5600b54611ad08484614dee565b615082565b600b8190556802b5e3af16b18800001015611b3a576040805160e560020a62461bcd02815260206004820152601460248201527f4552525f4d41585f544f54414c5f574549474854000000000000000000000000604482015290519081900360640190fd5b611b60565b80821015611b6057611b5c600b54611b578385614dee565b614dee565b600b555b600160a060020a0384166000908152600a602052604090206002810183905560030180549084905580841115611ba957611ba48533611b9f8785614dee565b6150df565b611c03565b80841015611c03576000611bbd8286614dee565b90506000611bcc826000614d05565b9050611be28733611bdd8585614dee565b614e83565b600554611c00908890620100009004600160a060020a031683614e83565b50505b50506005805461ff0019169055505050565b600033600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615611cc6576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff16611d1d576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615680833981519152604482015290519081900360640190fd5b600160a060020a0384166000908152600a602052604090205460ff16611d7b576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a0384166000908152600a6020526040902060038101546002808301549054600b54600754611db594939291908990613858565b915082821015611dfd576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615800833981519152604482015290519081900360640190fd5b600160a060020a0385166000908152600a60205260409020600390810154611e2d91670de0b6b3a7640000610e34565b821115611e72576040805160e560020a62461bcd02815260206004820152601160248201526000805160206156e0833981519152604482015290519081900360640190fd5b611e80816003015483614dee565b60038201556000611e918582614d05565b604080518581529051919250600160a060020a0388169133916000805160206157a0833981519152919081900360200190a3611ecd3386614e5f565b611eda610faf8683614dee565b600554611ef690620100009004600160a060020a031682614e79565b610fdb863385614e83565b33600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615611fb0576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff1615612008576040805160e560020a62461bcd02815260206004820152601060248201526000805160206157e0833981519152604482015290519081900360640190fd5b600654600160a060020a03163314612058576040805160e560020a62461bcd0281526020600482015260126024820152600080516020615720833981519152604482015290519081900360640190fd5b6006805491151560a060020a0274ff0000000000000000000000000000000000000000199092169190911790556005805461ff0019169055565b33600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615612141576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560065433600160a060020a03909116146121a2576040805160e560020a62461bcd0281526020600482015260126024820152600080516020615720833981519152604482015290519081900360640190fd5b60085460ff16156121eb576040805160e560020a62461bcd02815260206004820152601060248201526000805160206157e0833981519152604482015290519081900360640190fd5b60095460021115612246576040805160e560020a62461bcd02815260206004820152600e60248201527f4552525f4d494e5f544f4b454e53000000000000000000000000000000000000604482015290519081900360640190fd5b6008805460ff191660011790556006805474ff0000000000000000000000000000000000000000191660a060020a17905561228968056bc75e2d63100000615151565b61229c3368056bc75e2d63100000614e79565b6005805461ff0019169055565b33600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615612358576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff166123af576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615680833981519152604482015290519081900360640190fd5b60006123b9611392565b905060006123c7858361515a565b90508061240c576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020615820833981519152604482015290519081900360640190fd5b60005b60095481101561257c5760006009828154811061242857fe5b6000918252602080832090910154600160a060020a0316808352600a90915260408220600301549092509061245d8583614d05565b9050806124a2576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020615820833981519152604482015290519081900360640190fd5b8787858181106124ae57fe5b905060200201358111156124fa576040805160e560020a62461bcd02815260206004820152600c60248201526000805160206156c0833981519152604482015290519081900360640190fd5b600160a060020a0383166000908152600a60205260409020600301546125209082615082565b600160a060020a0384166000818152600a60209081526040918290206003019390935580518481529051919233926000805160206157008339815191529281900390910190a36125718333836150df565b50505060010161240f565b5061258685615151565b611c033386614e79565b60008061259d878661515a565b905060006125ab8786615082565b905060006125b9828961515a565b905060006125cf670de0b6b3a76400008561515a565b905060006125dd8383615296565b905060006125eb828e614d05565b905060006125f9828f614dee565b90506000612618612612670de0b6b3a76400008a614dee565b8b614d05565b905061263582612630670de0b6b3a764000084614dee565b61515a565b9f9e505050505050505050505050505050565b600033600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff16156126f9576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff16612750576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615680833981519152604482015290519081900360640190fd5b600160a060020a0384166000908152600a602052604090205460ff166127ae576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a0384166000908152600a60205260409020600301546127e0906002670de0b6b3a76400005b04614d05565b831115612825576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615740833981519152604482015290519081900360640190fd5b600160a060020a0384166000908152600a6020526040902060038101546002808301549054600b5460075461285f949392919089906137a3565b9150828210156128a7576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615800833981519152604482015290519081900360640190fd5b6128b5816003015485615082565b6003820155604080518581529051600160a060020a0387169133916000805160206157008339815191529181900360200190a36128f182615151565b6128fb3383614e79565b6129068533866150df565b506005805461ff00191690559392505050565b336000908152600160209081526040808320600160a060020a03861684529091528120548083111561296e57336000908152600160209081526040808320600160a060020a038816845290915281205561299d565b6129788184614dee565b336000908152600160209081526040808320600160a060020a03891684529091529020555b336000818152600160209081526040808320600160a060020a0389168085529083529281902054815190815290519293926000805160206157c0833981519152929181900390910190a35060019392505050565b600033600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615612aa2576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff16612af9576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615680833981519152604482015290519081900360640190fd5b600160a060020a0384166000908152600a602052604090205460ff16612b57576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a0384166000908152600a6020526040902060038101546002808301549054600b54600754612b9194939291908990612590565b915081612bd6576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020615820833981519152604482015290519081900360640190fd5b82821115612c1c576040805160e560020a62461bcd02815260206004820152600c60248201526000805160206156c0833981519152604482015290519081900360640190fd5b600160a060020a0385166000908152600a6020526040902060030154612c4c906002670de0b6b3a76400006127da565b821115612c91576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615740833981519152604482015290519081900360640190fd5b612c9f816003015483615082565b6003820155604080518381529051600160a060020a0387169133916000805160206157008339815191529181900360200190a3612cdb84615151565b612ce53385614e79565b6129068533846150df565b600160a060020a031660009081526020819052604090205490565b620f4240670de0b6b3a76400006113a8565b6040805160208082523690820181905260009283923392600160e060020a03198535169285929081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615612dbd576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff001916610100179055600160a060020a0387166000908152600a602052604090205460ff16612e2a576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a0385166000908152600a602052604090205460ff16612e88576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b60065460a060020a900460ff16612ee9576040805160e560020a62461bcd02815260206004820152601360248201527f4552525f535741505f4e4f545f5055424c494300000000000000000000000000604482015290519081900360640190fd5b600160a060020a038088166000908152600a602052604080822092881682529020600380820154612f2291670de0b6b3a7640000610e34565b861115612f67576040805160e560020a62461bcd02815260206004820152601160248201526000805160206156e0833981519152604482015290519081900360640190fd5b6000612f888360030154846002015484600301548560020154600754613df0565b905085811115612fe2576040805160e560020a62461bcd02815260206004820152601360248201527f4552525f4241445f4c494d49545f505249434500000000000000000000000000604482015290519081900360640190fd5b61300283600301548460020154846003015485600201548b600754614c72565b94508885111561304a576040805160e560020a62461bcd02815260206004820152600c60248201526000805160206156c0833981519152604482015290519081900360640190fd5b613058836003015486615082565b836003018190555061306e826003015488614dee565b600380840182905584015460028086015490850154600754613091949190613df0565b9350808410156130d9576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020615820833981519152604482015290519081900360640190fd5b85841115613131576040805160e560020a62461bcd02815260206004820152600f60248201527f4552525f4c494d49545f50524943450000000000000000000000000000000000604482015290519081900360640190fd5b61313b858861515a565b811115613180576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020615820833981519152604482015290519081900360640190fd5b87600160a060020a03168a600160a060020a031633600160a060020a03167f908fb5ee8f16c6bc9bc3690973819f32a4d4b10188134543c88706e0e1d43378888b604051808381526020018281526020019250505060405180910390a46131e88a33876150df565b6131f3883389614e83565b5050506005805461ff001916905590969095509350505050565b6040805160208082523690820181905260009283923392600160e060020a03198535169285929081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff16156132ad576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff001916610100179055600160a060020a0387166000908152600a602052604090205460ff1661331a576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a0385166000908152600a602052604090205460ff16613378576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b60065460a060020a900460ff166133d9576040805160e560020a62461bcd02815260206004820152601360248201527f4552525f535741505f4e4f545f5055424c494300000000000000000000000000604482015290519081900360640190fd5b600160a060020a038088166000908152600a6020526040808220928816825290206003820154613413906002670de0b6b3a76400006127da565b881115613458576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615740833981519152604482015290519081900360640190fd5b60006134798360030154846002015484600301548560020154600754613df0565b9050858111156134d3576040805160e560020a62461bcd02815260206004820152601360248201527f4552525f4241445f4c494d49545f505249434500000000000000000000000000604482015290519081900360640190fd5b6134f383600301548460020154846003015485600201548d6007546141ae565b94508685101561353b576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615800833981519152604482015290519081900360640190fd5b61354983600301548a615082565b836003018190555061355f826003015486614dee565b600380840182905584015460028086015490850154600754613582949190613df0565b9350808410156135ca576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020615820833981519152604482015290519081900360640190fd5b85841115613622576040805160e560020a62461bcd02815260206004820152600f60248201527f4552525f4c494d49545f50524943450000000000000000000000000000000000604482015290519081900360640190fd5b61362c898661515a565b811115613671576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020615820833981519152604482015290519081900360640190fd5b87600160a060020a03168a600160a060020a031633600160a060020a03167f908fb5ee8f16c6bc9bc3690973819f32a4d4b10188134543c88706e0e1d433788c89604051808381526020018281526020019250505060405180910390a46136d98a338b6150df565b6131f3883387614e83565b6000806136f1878661515a565b90506000613707670de0b6b3a764000083614dee565b905060006137158286614d05565b9050600061372f87612630670de0b6b3a764000085614dee565b9050600061373d8c83614dee565b9050600061374b828e61515a565b905060006137598288615296565b90506000613767828e614d05565b905060006137758e83614dee565b905061378e81612630670de0b6b3a76400006000614dee565b99505050505050505050509695505050505050565b6000806137b0878661515a565b905060006137cf6137c9670de0b6b3a764000084614dee565b85614d05565b905060006137ee866137e9670de0b6b3a764000085614dee565b614d05565b905060006137fc8b83615082565b9050600061380a828d61515a565b905060006138188287615296565b90506000613826828d614d05565b9050613832818d614dee565b9e9d5050505050505050505050505050565b64e8d4a51000670de0b6b3a76400006113a8565b600080613865878661515a565b90506000613880856137e9670de0b6b3a76400006000614dee565b9050600061388e8883614dee565b9050600061389c828a61515a565b905060006138bb826138b6670de0b6b3a76400008861515a565b615296565b905060006138c9828e614d05565b905060006138d78e83614dee565b905060006138f0612612670de0b6b3a76400008a614dee565b9050612635826137e9670de0b6b3a764000084614dee565b33600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff16156139b7576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff001916610100179055600160a060020a0381166000908152600a602052604090205460ff16613a24576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038316916370a08231916024808301926020929190829003018186803b158015613a8357600080fd5b505afa158015613a97573d6000803e3d6000fd5b505050506040513d6020811015613aad57600080fd5b5051600160a060020a039091166000908152600a60205260409020600301556005805461ff0019169055565b60085460ff1690565b33600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615613b91576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560065433600160a060020a0390911614613bf2576040805160e560020a62461bcd0281526020600482015260126024820152600080516020615720833981519152604482015290519081900360640190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556005805461ff0019169055565b600554600090610100900460ff1615613c7d576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b50600b5490565b68056bc75e2d6310000081565b600554600090610100900460ff1615613ce2576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b600160a060020a0382166000908152600a602052604090205460ff16613d40576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b50600160a060020a03166000908152600a602052604090206002015490565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561107b5780601f106110505761010080835404028352916020019161107b565b6704a03ce68d21555681565b7f42524f4e5a45000000000000000000000000000000000000000000000000000090565b600080613dfd878761515a565b90506000613e0b868661515a565b90506000613e19838361515a565b90506000613e3b670de0b6b3a7640000612630670de0b6b3a764000089614dee565b9050613e478282614d05565b9a9950505050505050505050565b6000613e62338484614f78565b50600192915050565b33600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615613f1a576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff16613f71576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615680833981519152604482015290519081900360640190fd5b6000613f7b611392565b90506000613f8a856000614d05565b90506000613f988683614dee565b90506000613fa6828561515a565b905080613feb576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020615820833981519152604482015290519081900360640190fd5b613ff53388614e5f565b60055461401190620100009004600160a060020a031684614e79565b61401a82614e6d565b60005b60095481101561418a5760006009828154811061403657fe5b6000918252602080832090910154600160a060020a0316808352600a90915260408220600301549092509061406b8583614d05565b9050806140b0576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020615820833981519152604482015290519081900360640190fd5b8989858181106140bc57fe5b90506020020135811015614108576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615800833981519152604482015290519081900360640190fd5b600160a060020a0383166000908152600a602052604090206003015461412e9082614dee565b600160a060020a0384166000818152600a60209081526040918290206003019390935580518481529051919233926000805160206157a08339815191529281900390910190a361417f833383614e83565b50505060010161401d565b50506005805461ff0019169055505050505050565b600881565b600281565b600181565b6000806141bb878661515a565b905060006141d1670de0b6b3a764000085614dee565b90506141dd8582614d05565b905060006141ef8a6126308c85615082565b905060006141fd8285615296565b90506000614213670de0b6b3a764000083614dee565b905061421f8a82614d05565b9c9b505050505050505050505050565b600a670de0b6b3a76400006113a8565b671bc16d674ec7ffff81565b600554606090610100900460ff161561429c576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b60085460ff166142e4576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615680833981519152604482015290519081900360640190fd5b600980548060200260200160405190810160405280929190818152602001828054801561107b57602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831161431c575050505050905090565b600081565b600554606090610100900460ff16156142e4576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b60095490565b33600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff161561444e576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560065433600160a060020a03909116146144af576040805160e560020a62461bcd0281526020600482015260126024820152600080516020615720833981519152604482015290519081900360640190fd5b600160a060020a0381166000908152600a602052604090205460ff1661450d576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b60085460ff1615614556576040805160e560020a62461bcd02815260206004820152601060248201526000805160206157e0833981519152604482015290519081900360640190fd5b600160a060020a0381166000908152600a60205260408120600301549061457d8282614d05565b600b54600160a060020a0385166000908152600a60205260409020600201549192506145a891614dee565b600b55600160a060020a0383166000908152600a60205260409020600101546009805460001981019190829081106145dc57fe5b60009182526020909120015460098054600160a060020a03909216918490811061460257fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a0316021790555081600a60006009858154811061464257fe5b6000918252602080832090910154600160a060020a03168352820192909252604001902060010155600980548061467557fe5b600082815260208082206000199084018101805473ffffffffffffffffffffffffffffffffffffffff191690559092019092556040805160808101825283815280830184815281830185815260608301868152600160a060020a038c168752600a909552929094209051815460ff1916901515178155925160018401555160028301555160039091015561470e8533611bdd8787614dee565b600554611c03908690620100009004600160a060020a031685614e83565b600554600090610100900460ff161561477d576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b5060075490565b336000908152600160209081526040808320600160a060020a03861684529091528120546147b29083615082565b336000818152600160209081526040808320600160a060020a0389168085529083529281902085905580519485525191936000805160206157c0833981519152929081900390910190a350600192915050565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b33600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600654600160a060020a031633146148e1576040805160e560020a62461bcd0281526020600482015260126024820152600080516020615720833981519152604482015290519081900360640190fd5b600160a060020a0383166000908152600a602052604090205460ff1615614952576040805160e560020a62461bcd02815260206004820152600c60248201527f4552525f49535f424f554e440000000000000000000000000000000000000000604482015290519081900360640190fd5b60085460ff161561499b576040805160e560020a62461bcd02815260206004820152601060248201526000805160206157e0833981519152604482015290519081900360640190fd5b6009546008116149f5576040805160e560020a62461bcd02815260206004820152600e60248201527f4552525f4d41585f544f4b454e53000000000000000000000000000000000000604482015290519081900360640190fd5b604080516080810182526001808252600980546020808501918252600085870181815260608701828152600160a060020a038c16808452600a9094529782209651875460ff1916901515178755925186860155915160028601559451600390940193909355805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19169091179055614aaf8383836117c9565b505050565b6002670de0b6b3a76400006113a8565b600554600090610100900460ff1615614b15576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b600160a060020a0382166000908152600a602052604090205460ff16614b73576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a0382166000908152600a6020526040902060020154600b54614b9d90829061515a565b9392505050565b600554600090610100900460ff1615614bf5576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b600160a060020a0382166000908152600a602052604090205460ff16614c53576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b50600160a060020a03166000908152600a602052604090206003015490565b600080614c7f858861515a565b90506000614c8d8786614dee565b90506000614c9b888361515a565b90506000614ca98285615296565b9050614cbd81670de0b6b3a7640000614dee565b9050614cd1670de0b6b3a764000087614dee565b9450614ce6614ce08c83614d05565b8661515a565b9b9a5050505050505050505050565b60065460a060020a900460ff1690565b6000828202831580614d1f575082848281614d1c57fe5b04145b614d73576040805160e560020a62461bcd02815260206004820152601060248201527f4552525f4d554c5f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b6706f05b59d3b20000810181811015614dd6576040805160e560020a62461bcd02815260206004820152601060248201527f4552525f4d554c5f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b6000670de0b6b3a7640000825b049695505050505050565b6000806000614dfd85856153b9565b915091508015614e57576040805160e560020a62461bcd02815260206004820152601160248201527f4552525f5355425f554e444552464c4f57000000000000000000000000000000604482015290519081900360640190fd5b509392505050565b614e6982826153de565b5050565b614e76816153e9565b50565b614e6982826154b3565b604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a03848116600483015260248201849052915160009286169163a9059cbb91604480830192602092919082900301818787803b158015614eef57600080fd5b505af1158015614f03573d6000803e3d6000fd5b505050506040513d6020811015614f1957600080fd5b5051905080614f72576040805160e560020a62461bcd02815260206004820152600f60248201527f4552525f45524332305f46414c53450000000000000000000000000000000000604482015290519081900360640190fd5b50505050565b600160a060020a038316600090815260208190526040902054811115614fe8576040805160e560020a62461bcd02815260206004820152601460248201527f4552525f494e53554646494349454e545f42414c000000000000000000000000604482015290519081900360640190fd5b600160a060020a03831660009081526020819052604090205461500b9082614dee565b600160a060020a03808516600090815260208190526040808220939093559084168152205461503a9082615082565b600160a060020a0380841660008181526020818152604091829020949094558051858152905191939287169260008051602061576083398151915292918290030190a3505050565b600082820183811015614b9d576040805160e560020a62461bcd02815260206004820152601060248201527f4552525f4144445f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301523060248301526044820184905291516000928616916323b872dd91606480830192602092919082900301818787803b158015614eef57600080fd5b614e76816154be565b6000816151b1576040805160e560020a62461bcd02815260206004820152600c60248201527f4552525f4449565f5a45524f0000000000000000000000000000000000000000604482015290519081900360640190fd5b670de0b6b3a764000083028315806151d95750670de0b6b3a76400008482816151d657fe5b04145b61522d576040805160e560020a62461bcd02815260206004820152601060248201527f4552525f4449565f494e5445524e414c00000000000000000000000000000000604482015290519081900360640190fd5b6002830481018181101561528b576040805160e560020a62461bcd02815260206004820152601060248201527f4552525f4449565f494e5445524e414c00000000000000000000000000000000604482015290519081900360640190fd5b6000848281614de357fe5b600060018310156152f1576040805160e560020a62461bcd02815260206004820152601560248201527f4552525f42504f575f424153455f544f4f5f4c4f570000000000000000000000604482015290519081900360640190fd5b671bc16d674ec7ffff831115615351576040805160e560020a62461bcd02815260206004820152601660248201527f4552525f42504f575f424153455f544f4f5f4849474800000000000000000000604482015290519081900360640190fd5b600061535c83615521565b9050600061536a8483614dee565b905060006153808661537b8561553c565b61554a565b9050816153915792506110d4915050565b60006153a287846305f5e1006155a1565b90506153ae8282614d05565b979650505050505050565b6000808284106153cf57505080820360006153d7565b505081810360015b9250929050565b614e69823083614f78565b30600090815260208190526040902054811115615450576040805160e560020a62461bcd02815260206004820152601460248201527f4552525f494e53554646494349454e545f42414c000000000000000000000000604482015290519081900360640190fd5b3060009081526020819052604090205461546a9082614dee565b306000908152602081905260409020556002546154879082614dee565b60025560408051828152905160009130916000805160206157608339815191529181900360200190a350565b614e69308383614f78565b306000908152602081905260409020546154d89082615082565b306000908152602081905260409020556002546154f59082615082565b60025560408051828152905130916000916000805160206157608339815191529181900360200190a350565b6000670de0b6b3a76400006155358361553c565b0292915050565b670de0b6b3a7640000900490565b6000806002830661556357670de0b6b3a7640000615565565b835b90506002830492505b8215614b9d5761557e8485614d05565b93506002830615615596576155938185614d05565b90505b60028304925061556e565b60008281806155b887670de0b6b3a76400006153b9565b9092509050670de0b6b3a764000080600060015b888410615670576000670de0b6b3a7640000820290506000806156008a6155fb85670de0b6b3a7640000614dee565b6153b9565b91509150615612876137e9848c614d05565b965061561e878461515a565b96508661562d57505050615670565b8715615637579315935b8015615641579315935b8415615658576156518688614dee565b9550615665565b6156628688615082565b95505b5050506001016155cc565b5090999850505050505050505056fe4552525f4e4f545f46494e414c495a45440000000000000000000000000000004552525f5245454e5452590000000000000000000000000000000000000000004552525f4c494d49545f494e00000000000000000000000000000000000000004552525f4d41585f4f55545f524154494f00000000000000000000000000000063982df10efd8dfaaaa0fcc7f50b2d93b7cba26ccc48adee2873220d485dc39a4552525f4e4f545f434f4e54524f4c4c455200000000000000000000000000004552525f4d41585f494e5f524154494f00000000000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4552525f4e4f545f424f554e4400000000000000000000000000000000000000e74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9254552525f49535f46494e414c495a4544000000000000000000000000000000004552525f4c494d49545f4f5554000000000000000000000000000000000000004552525f4d4154485f415050524f580000000000000000000000000000000000a265627a7a723158202b5a60166bb5b113e86d3e715d8d891e57428121f0c4ed3916bb69f71e21311d64736f6c634300050c0032",
"deployedBytecode": "0x608060405234801561001057600080fd5b5060043610610378576000357c0100000000000000000000000000000000000000000000000000000000900480638d4e4083116101e7578063bc694ea211610122578063d73dd623116100c5578063d73dd62314610b7f578063dd62ed3e14610bab578063e4a28a521461047e578063e4e1e53814610bd9578063ec09302114610c0b578063f1b8a9b714610c13578063f8b2cb4f14610c39578063f8d6aed414610c5f578063fde924f714610c9a57610378565b8063bc694ea214610ad9578063be3bbd2e14610ae1578063c36596a6146104f2578063c6580d1214610b39578063cc77828d14610b41578063cd2ed8fb14610b49578063cf5e7bd314610b51578063d4cadf6814610b7757610378565b8063a221ee491161018a578063a221ee49146109a6578063a9059cbb146109db578063b02f0b7314610a07578063b0e0d13614610a7e578063b7b800a414610a86578063ba019dab14610a8e578063ba9530a614610a96578063bc063e1a14610ad157610378565b80638d4e40831461092a57806392eefe9b14610932578063936c3477146109585780639381cd2b14610960578063948d8ce61461096857806395d89b411461098e578063992e2a92146109965780639a86139b1461099e57610378565b806349b59552116102b757806376c7a3c71161025a57806376c7a3c7146107aa5780637c5e9ea4146107b25780638201aa3f1461080b57806382f652ad1461084b5780638656b65314610886578063867378c5146108c157806389298012146108c95780638c28cbe81461090457610378565b806349b595521461061b5780634bb278f31461063a5780634f69c0d4146106425780635c1bbaf7146106b95780635db34277146106f457806366188463146107265780636d06dfa01461075257806370a082311461078457610378565b8063218b53821161031f578063218b5382146104f257806323b872dd146104fa5780632f37b624146105305780633018205f14610556578063313ce5671461057a57806334e19907146105985780633fdddaa2146105b757806346ab38f1146105e957610378565b806302c967481461037d57806306fdde03146103c1578063095ea7b31461043e57806309a3bbe41461047e5780631446a7ff1461048657806315e84af9146104b457806318160ddd146104e2578063189d00ca146104ea575b600080fd5b6103af6004803603606081101561039357600080fd5b50600160a060020a038135169060208101359060400135610ca2565b60408051918252519081900360200190f35b6103c9610fef565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104035781810151838201526020016103eb565b50505050905090810190601f1680156104305780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61046a6004803603604081101561045457600080fd5b50600160a060020a038135169060200135611085565b604080519115158252519081900360200190f35b6103af6110da565b6103af6004803603604081101561049c57600080fd5b50600160a060020a03813581169160200135166110e7565b6103af600480360360408110156104ca57600080fd5b50600160a060020a0381358116916020013516611241565b6103af611392565b6103af611398565b6103af6113ac565b61046a6004803603606081101561051057600080fd5b50600160a060020a038135811691602081013590911690604001356113b8565b61046a6004803603602081101561054657600080fd5b5035600160a060020a031661151d565b61055e61153b565b60408051600160a060020a039092168252519081900360200190f35b61058261159c565b6040805160ff9092168252519081900360200190f35b6105b5600480360360208110156105ae57600080fd5b50356115a5565b005b6105b5600480360360608110156105cd57600080fd5b50600160a060020a0381351690602081013590604001356117c9565b6103af600480360360608110156105ff57600080fd5b50600160a060020a038135169060208101359060400135611c15565b6105b56004803603602081101561063157600080fd5b50351515611f01565b6105b5612092565b6105b56004803603604081101561065857600080fd5b8135919081019060408101602082013564010000000081111561067a57600080fd5b82018360208201111561068c57600080fd5b803590602001918460208302840111640100000000831117156106ae57600080fd5b5090925090506122a9565b6103af600480360360c08110156106cf57600080fd5b5080359060208101359060408101359060608101359060808101359060a00135612590565b6103af6004803603606081101561070a57600080fd5b50600160a060020a038135169060208101359060400135612648565b61046a6004803603604081101561073c57600080fd5b50600160a060020a038135169060200135612919565b6103af6004803603606081101561076857600080fd5b50600160a060020a0381351690602081013590604001356129f1565b6103af6004803603602081101561079a57600080fd5b5035600160a060020a0316612cf0565b6103af612d0b565b6107f2600480360360a08110156107c857600080fd5b50600160a060020a0381358116916020810135916040820135169060608101359060800135612d1d565b6040805192835260208301919091528051918290030190f35b6107f2600480360360a081101561082157600080fd5b50600160a060020a038135811691602081013591604082013516906060810135906080013561320d565b6103af600480360360c081101561086157600080fd5b5080359060208101359060408101359060608101359060808101359060a001356136e4565b6103af600480360360c081101561089c57600080fd5b5080359060208101359060408101359060608101359060808101359060a001356137a3565b6103af613844565b6103af600480360360c08110156108df57600080fd5b5080359060208101359060408101359060608101359060808101359060a00135613858565b6105b56004803603602081101561091a57600080fd5b5035600160a060020a0316613908565b61046a613ad9565b6105b56004803603602081101561094857600080fd5b5035600160a060020a0316613ae2565b6103af613c2c565b6103af613c84565b6103af6004803603602081101561097e57600080fd5b5035600160a060020a0316613c91565b6103c9613d5f565b6103af613dc0565b6103af613dcc565b6103af600480360360a08110156109bc57600080fd5b5080359060208101359060408101359060608101359060800135613df0565b61046a600480360360408110156109f157600080fd5b50600160a060020a038135169060200135613e55565b6105b560048036036040811015610a1d57600080fd5b81359190810190604081016020820135640100000000811115610a3f57600080fd5b820183602082011115610a5157600080fd5b80359060200191846020830284011164010000000083111715610a7357600080fd5b509092509050613e6b565b6103af61419f565b6103af6141a4565b6103af6141a9565b6103af600480360360c0811015610aac57600080fd5b5080359060208101359060408101359060608101359060808101359060a001356141ae565b6103af61422f565b6103af61423f565b610ae961424b565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610b25578181015183820152602001610b0d565b505050509050019250505060405180910390f35b6103af614343565b610ae9614348565b6103af614399565b6105b560048036036020811015610b6757600080fd5b5035600160a060020a031661439f565b6103af61472c565b61046a60048036036040811015610b9557600080fd5b50600160a060020a038135169060200135614784565b6103af60048036036040811015610bc157600080fd5b50600160a060020a0381358116916020013516614805565b6105b560048036036060811015610bef57600080fd5b50600160a060020a038135169060208101359060400135614830565b6103af614ab4565b6103af60048036036020811015610c2957600080fd5b5035600160a060020a0316614ac4565b6103af60048036036020811015610c4f57600080fd5b5035600160a060020a0316614ba4565b6103af600480360360c0811015610c7557600080fd5b5080359060208101359060408101359060608101359060808101359060a00135614c72565b61046a614cf5565b600033600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615610d53576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff16610daa576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615680833981519152604482015290519081900360640190fd5b600160a060020a0384166000908152600a602052604090205460ff16610e08576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a0384166000908152600a60205260409020600390810154610e3d91670de0b6b3a76400005b04600101614d05565b831115610e82576040805160e560020a62461bcd02815260206004820152601160248201526000805160206156e0833981519152604482015290519081900360640190fd5b600160a060020a0384166000908152600a6020526040902060038101546002808301549054600b54600754610ebc949392919089906136e4565b915081610f01576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020615820833981519152604482015290519081900360640190fd5b82821115610f47576040805160e560020a62461bcd02815260206004820152600c60248201526000805160206156c0833981519152604482015290519081900360640190fd5b610f55816003015485614dee565b60038201556000610f668382614d05565b604080518781529051919250600160a060020a0388169133916000805160206157a0833981519152919081900360200190a3610fa23384614e5f565b610fb4610faf8483614dee565b614e6d565b600554610fd090620100009004600160a060020a031682614e79565b610fdb863387614e83565b50506005805461ff00191690559392505050565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561107b5780601f106110505761010080835404028352916020019161107b565b820191906000526020600020905b81548152906001019060200180831161105e57829003601f168201915b5050505050905090565b336000818152600160209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390926000805160206157c0833981519152928290030190a35060015b92915050565b6802b5e3af16b188000081565b600554600090610100900460ff1615611138576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b600160a060020a0383166000908152600a602052604090205460ff16611196576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a0382166000908152600a602052604090205460ff166111f4576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a038084166000908152600a602052604080822092851682528120600380840154600280860154928401549084015493946112389492939290613df0565b95945050505050565b600554600090610100900460ff1615611292576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b600160a060020a0383166000908152600a602052604090205460ff166112f0576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a0382166000908152600a602052604090205460ff1661134e576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a038084166000908152600a602052604080822092851682529020600380830154600280850154928401549084015460075461123894929190613df0565b60025490565b6402540be400670de0b6b3a76400005b0481565b670de0b6b3a764000081565b600033600160a060020a03851614806113f45750600160a060020a03841660009081526001602090815260408083203384529091529020548211155b611448576040805160e560020a62461bcd02815260206004820152601560248201527f4552525f42544f4b454e5f4241445f43414c4c45520000000000000000000000604482015290519081900360640190fd5b611453848484614f78565b33600160a060020a038516148015906114915750600160a060020a038416600090815260016020908152604080832033845290915290205460001914155b1561151357600160a060020a03841660009081526001602090815260408083203384529091529020546114c49083614dee565b600160a060020a03858116600090815260016020908152604080832033808552908352928190208590558051948552519287169391926000805160206157c08339815191529281900390910190a35b5060019392505050565b600160a060020a03166000908152600a602052604090205460ff1690565b600554600090610100900460ff161561158c576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b50600654600160a060020a031690565b60055460ff1690565b33600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615611654576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff16156116ac576040805160e560020a62461bcd02815260206004820152601060248201526000805160206157e0833981519152604482015290519081900360640190fd5b600654600160a060020a031633146116fc576040805160e560020a62461bcd0281526020600482015260126024820152600080516020615720833981519152604482015290519081900360640190fd5b64e8d4a51000811015611759576040805160e560020a62461bcd02815260206004820152600b60248201527f4552525f4d494e5f464545000000000000000000000000000000000000000000604482015290519081900360640190fd5b67016345785d8a00008111156117b9576040805160e560020a62461bcd02815260206004820152600b60248201527f4552525f4d41585f464545000000000000000000000000000000000000000000604482015290519081900360640190fd5b6007556005805461ff0019169055565b33600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615611878576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560065433600160a060020a03909116146118d9576040805160e560020a62461bcd0281526020600482015260126024820152600080516020615720833981519152604482015290519081900360640190fd5b600160a060020a0383166000908152600a602052604090205460ff16611937576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b60085460ff1615611980576040805160e560020a62461bcd02815260206004820152601060248201526000805160206157e0833981519152604482015290519081900360640190fd5b670de0b6b3a76400008110156119e0576040805160e560020a62461bcd02815260206004820152600e60248201527f4552525f4d494e5f574549474854000000000000000000000000000000000000604482015290519081900360640190fd5b6802b5e3af16b1880000811115611a41576040805160e560020a62461bcd02815260206004820152600e60248201527f4552525f4d41585f574549474854000000000000000000000000000000000000604482015290519081900360640190fd5b620f4240821015611a9c576040805160e560020a62461bcd02815260206004820152600f60248201527f4552525f4d494e5f42414c414e43450000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0383166000908152600a602052604090206002015480821115611b3f57611ad5600b54611ad08484614dee565b615082565b600b8190556802b5e3af16b18800001015611b3a576040805160e560020a62461bcd02815260206004820152601460248201527f4552525f4d41585f544f54414c5f574549474854000000000000000000000000604482015290519081900360640190fd5b611b60565b80821015611b6057611b5c600b54611b578385614dee565b614dee565b600b555b600160a060020a0384166000908152600a602052604090206002810183905560030180549084905580841115611ba957611ba48533611b9f8785614dee565b6150df565b611c03565b80841015611c03576000611bbd8286614dee565b90506000611bcc826000614d05565b9050611be28733611bdd8585614dee565b614e83565b600554611c00908890620100009004600160a060020a031683614e83565b50505b50506005805461ff0019169055505050565b600033600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615611cc6576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff16611d1d576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615680833981519152604482015290519081900360640190fd5b600160a060020a0384166000908152600a602052604090205460ff16611d7b576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a0384166000908152600a6020526040902060038101546002808301549054600b54600754611db594939291908990613858565b915082821015611dfd576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615800833981519152604482015290519081900360640190fd5b600160a060020a0385166000908152600a60205260409020600390810154611e2d91670de0b6b3a7640000610e34565b821115611e72576040805160e560020a62461bcd02815260206004820152601160248201526000805160206156e0833981519152604482015290519081900360640190fd5b611e80816003015483614dee565b60038201556000611e918582614d05565b604080518581529051919250600160a060020a0388169133916000805160206157a0833981519152919081900360200190a3611ecd3386614e5f565b611eda610faf8683614dee565b600554611ef690620100009004600160a060020a031682614e79565b610fdb863385614e83565b33600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615611fb0576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff1615612008576040805160e560020a62461bcd02815260206004820152601060248201526000805160206157e0833981519152604482015290519081900360640190fd5b600654600160a060020a03163314612058576040805160e560020a62461bcd0281526020600482015260126024820152600080516020615720833981519152604482015290519081900360640190fd5b6006805491151560a060020a0274ff0000000000000000000000000000000000000000199092169190911790556005805461ff0019169055565b33600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615612141576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560065433600160a060020a03909116146121a2576040805160e560020a62461bcd0281526020600482015260126024820152600080516020615720833981519152604482015290519081900360640190fd5b60085460ff16156121eb576040805160e560020a62461bcd02815260206004820152601060248201526000805160206157e0833981519152604482015290519081900360640190fd5b60095460021115612246576040805160e560020a62461bcd02815260206004820152600e60248201527f4552525f4d494e5f544f4b454e53000000000000000000000000000000000000604482015290519081900360640190fd5b6008805460ff191660011790556006805474ff0000000000000000000000000000000000000000191660a060020a17905561228968056bc75e2d63100000615151565b61229c3368056bc75e2d63100000614e79565b6005805461ff0019169055565b33600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615612358576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff166123af576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615680833981519152604482015290519081900360640190fd5b60006123b9611392565b905060006123c7858361515a565b90508061240c576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020615820833981519152604482015290519081900360640190fd5b60005b60095481101561257c5760006009828154811061242857fe5b6000918252602080832090910154600160a060020a0316808352600a90915260408220600301549092509061245d8583614d05565b9050806124a2576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020615820833981519152604482015290519081900360640190fd5b8787858181106124ae57fe5b905060200201358111156124fa576040805160e560020a62461bcd02815260206004820152600c60248201526000805160206156c0833981519152604482015290519081900360640190fd5b600160a060020a0383166000908152600a60205260409020600301546125209082615082565b600160a060020a0384166000818152600a60209081526040918290206003019390935580518481529051919233926000805160206157008339815191529281900390910190a36125718333836150df565b50505060010161240f565b5061258685615151565b611c033386614e79565b60008061259d878661515a565b905060006125ab8786615082565b905060006125b9828961515a565b905060006125cf670de0b6b3a76400008561515a565b905060006125dd8383615296565b905060006125eb828e614d05565b905060006125f9828f614dee565b90506000612618612612670de0b6b3a76400008a614dee565b8b614d05565b905061263582612630670de0b6b3a764000084614dee565b61515a565b9f9e505050505050505050505050505050565b600033600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff16156126f9576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff16612750576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615680833981519152604482015290519081900360640190fd5b600160a060020a0384166000908152600a602052604090205460ff166127ae576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a0384166000908152600a60205260409020600301546127e0906002670de0b6b3a76400005b04614d05565b831115612825576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615740833981519152604482015290519081900360640190fd5b600160a060020a0384166000908152600a6020526040902060038101546002808301549054600b5460075461285f949392919089906137a3565b9150828210156128a7576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615800833981519152604482015290519081900360640190fd5b6128b5816003015485615082565b6003820155604080518581529051600160a060020a0387169133916000805160206157008339815191529181900360200190a36128f182615151565b6128fb3383614e79565b6129068533866150df565b506005805461ff00191690559392505050565b336000908152600160209081526040808320600160a060020a03861684529091528120548083111561296e57336000908152600160209081526040808320600160a060020a038816845290915281205561299d565b6129788184614dee565b336000908152600160209081526040808320600160a060020a03891684529091529020555b336000818152600160209081526040808320600160a060020a0389168085529083529281902054815190815290519293926000805160206157c0833981519152929181900390910190a35060019392505050565b600033600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615612aa2576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff16612af9576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615680833981519152604482015290519081900360640190fd5b600160a060020a0384166000908152600a602052604090205460ff16612b57576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a0384166000908152600a6020526040902060038101546002808301549054600b54600754612b9194939291908990612590565b915081612bd6576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020615820833981519152604482015290519081900360640190fd5b82821115612c1c576040805160e560020a62461bcd02815260206004820152600c60248201526000805160206156c0833981519152604482015290519081900360640190fd5b600160a060020a0385166000908152600a6020526040902060030154612c4c906002670de0b6b3a76400006127da565b821115612c91576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615740833981519152604482015290519081900360640190fd5b612c9f816003015483615082565b6003820155604080518381529051600160a060020a0387169133916000805160206157008339815191529181900360200190a3612cdb84615151565b612ce53385614e79565b6129068533846150df565b600160a060020a031660009081526020819052604090205490565b620f4240670de0b6b3a76400006113a8565b6040805160208082523690820181905260009283923392600160e060020a03198535169285929081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615612dbd576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff001916610100179055600160a060020a0387166000908152600a602052604090205460ff16612e2a576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a0385166000908152600a602052604090205460ff16612e88576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b60065460a060020a900460ff16612ee9576040805160e560020a62461bcd02815260206004820152601360248201527f4552525f535741505f4e4f545f5055424c494300000000000000000000000000604482015290519081900360640190fd5b600160a060020a038088166000908152600a602052604080822092881682529020600380820154612f2291670de0b6b3a7640000610e34565b861115612f67576040805160e560020a62461bcd02815260206004820152601160248201526000805160206156e0833981519152604482015290519081900360640190fd5b6000612f888360030154846002015484600301548560020154600754613df0565b905085811115612fe2576040805160e560020a62461bcd02815260206004820152601360248201527f4552525f4241445f4c494d49545f505249434500000000000000000000000000604482015290519081900360640190fd5b61300283600301548460020154846003015485600201548b600754614c72565b94508885111561304a576040805160e560020a62461bcd02815260206004820152600c60248201526000805160206156c0833981519152604482015290519081900360640190fd5b613058836003015486615082565b836003018190555061306e826003015488614dee565b600380840182905584015460028086015490850154600754613091949190613df0565b9350808410156130d9576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020615820833981519152604482015290519081900360640190fd5b85841115613131576040805160e560020a62461bcd02815260206004820152600f60248201527f4552525f4c494d49545f50524943450000000000000000000000000000000000604482015290519081900360640190fd5b61313b858861515a565b811115613180576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020615820833981519152604482015290519081900360640190fd5b87600160a060020a03168a600160a060020a031633600160a060020a03167f908fb5ee8f16c6bc9bc3690973819f32a4d4b10188134543c88706e0e1d43378888b604051808381526020018281526020019250505060405180910390a46131e88a33876150df565b6131f3883389614e83565b5050506005805461ff001916905590969095509350505050565b6040805160208082523690820181905260009283923392600160e060020a03198535169285929081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff16156132ad576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff001916610100179055600160a060020a0387166000908152600a602052604090205460ff1661331a576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a0385166000908152600a602052604090205460ff16613378576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b60065460a060020a900460ff166133d9576040805160e560020a62461bcd02815260206004820152601360248201527f4552525f535741505f4e4f545f5055424c494300000000000000000000000000604482015290519081900360640190fd5b600160a060020a038088166000908152600a6020526040808220928816825290206003820154613413906002670de0b6b3a76400006127da565b881115613458576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615740833981519152604482015290519081900360640190fd5b60006134798360030154846002015484600301548560020154600754613df0565b9050858111156134d3576040805160e560020a62461bcd02815260206004820152601360248201527f4552525f4241445f4c494d49545f505249434500000000000000000000000000604482015290519081900360640190fd5b6134f383600301548460020154846003015485600201548d6007546141ae565b94508685101561353b576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615800833981519152604482015290519081900360640190fd5b61354983600301548a615082565b836003018190555061355f826003015486614dee565b600380840182905584015460028086015490850154600754613582949190613df0565b9350808410156135ca576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020615820833981519152604482015290519081900360640190fd5b85841115613622576040805160e560020a62461bcd02815260206004820152600f60248201527f4552525f4c494d49545f50524943450000000000000000000000000000000000604482015290519081900360640190fd5b61362c898661515a565b811115613671576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020615820833981519152604482015290519081900360640190fd5b87600160a060020a03168a600160a060020a031633600160a060020a03167f908fb5ee8f16c6bc9bc3690973819f32a4d4b10188134543c88706e0e1d433788c89604051808381526020018281526020019250505060405180910390a46136d98a338b6150df565b6131f3883387614e83565b6000806136f1878661515a565b90506000613707670de0b6b3a764000083614dee565b905060006137158286614d05565b9050600061372f87612630670de0b6b3a764000085614dee565b9050600061373d8c83614dee565b9050600061374b828e61515a565b905060006137598288615296565b90506000613767828e614d05565b905060006137758e83614dee565b905061378e81612630670de0b6b3a76400006000614dee565b99505050505050505050509695505050505050565b6000806137b0878661515a565b905060006137cf6137c9670de0b6b3a764000084614dee565b85614d05565b905060006137ee866137e9670de0b6b3a764000085614dee565b614d05565b905060006137fc8b83615082565b9050600061380a828d61515a565b905060006138188287615296565b90506000613826828d614d05565b9050613832818d614dee565b9e9d5050505050505050505050505050565b64e8d4a51000670de0b6b3a76400006113a8565b600080613865878661515a565b90506000613880856137e9670de0b6b3a76400006000614dee565b9050600061388e8883614dee565b9050600061389c828a61515a565b905060006138bb826138b6670de0b6b3a76400008861515a565b615296565b905060006138c9828e614d05565b905060006138d78e83614dee565b905060006138f0612612670de0b6b3a76400008a614dee565b9050612635826137e9670de0b6b3a764000084614dee565b33600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff16156139b7576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff001916610100179055600160a060020a0381166000908152600a602052604090205460ff16613a24576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038316916370a08231916024808301926020929190829003018186803b158015613a8357600080fd5b505afa158015613a97573d6000803e3d6000fd5b505050506040513d6020811015613aad57600080fd5b5051600160a060020a039091166000908152600a60205260409020600301556005805461ff0019169055565b60085460ff1690565b33600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615613b91576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560065433600160a060020a0390911614613bf2576040805160e560020a62461bcd0281526020600482015260126024820152600080516020615720833981519152604482015290519081900360640190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556005805461ff0019169055565b600554600090610100900460ff1615613c7d576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b50600b5490565b68056bc75e2d6310000081565b600554600090610100900460ff1615613ce2576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b600160a060020a0382166000908152600a602052604090205460ff16613d40576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b50600160a060020a03166000908152600a602052604090206002015490565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561107b5780601f106110505761010080835404028352916020019161107b565b6704a03ce68d21555681565b7f42524f4e5a45000000000000000000000000000000000000000000000000000090565b600080613dfd878761515a565b90506000613e0b868661515a565b90506000613e19838361515a565b90506000613e3b670de0b6b3a7640000612630670de0b6b3a764000089614dee565b9050613e478282614d05565b9a9950505050505050505050565b6000613e62338484614f78565b50600192915050565b33600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff1615613f1a576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560085460ff16613f71576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615680833981519152604482015290519081900360640190fd5b6000613f7b611392565b90506000613f8a856000614d05565b90506000613f988683614dee565b90506000613fa6828561515a565b905080613feb576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020615820833981519152604482015290519081900360640190fd5b613ff53388614e5f565b60055461401190620100009004600160a060020a031684614e79565b61401a82614e6d565b60005b60095481101561418a5760006009828154811061403657fe5b6000918252602080832090910154600160a060020a0316808352600a90915260408220600301549092509061406b8583614d05565b9050806140b0576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020615820833981519152604482015290519081900360640190fd5b8989858181106140bc57fe5b90506020020135811015614108576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615800833981519152604482015290519081900360640190fd5b600160a060020a0383166000908152600a602052604090206003015461412e9082614dee565b600160a060020a0384166000818152600a60209081526040918290206003019390935580518481529051919233926000805160206157a08339815191529281900390910190a361417f833383614e83565b50505060010161401d565b50506005805461ff0019169055505050505050565b600881565b600281565b600181565b6000806141bb878661515a565b905060006141d1670de0b6b3a764000085614dee565b90506141dd8582614d05565b905060006141ef8a6126308c85615082565b905060006141fd8285615296565b90506000614213670de0b6b3a764000083614dee565b905061421f8a82614d05565b9c9b505050505050505050505050565b600a670de0b6b3a76400006113a8565b671bc16d674ec7ffff81565b600554606090610100900460ff161561429c576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b60085460ff166142e4576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615680833981519152604482015290519081900360640190fd5b600980548060200260200160405190810160405280929190818152602001828054801561107b57602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831161431c575050505050905090565b600081565b600554606090610100900460ff16156142e4576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b60095490565b33600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600554610100900460ff161561444e576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b6005805461ff00191661010017905560065433600160a060020a03909116146144af576040805160e560020a62461bcd0281526020600482015260126024820152600080516020615720833981519152604482015290519081900360640190fd5b600160a060020a0381166000908152600a602052604090205460ff1661450d576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b60085460ff1615614556576040805160e560020a62461bcd02815260206004820152601060248201526000805160206157e0833981519152604482015290519081900360640190fd5b600160a060020a0381166000908152600a60205260408120600301549061457d8282614d05565b600b54600160a060020a0385166000908152600a60205260409020600201549192506145a891614dee565b600b55600160a060020a0383166000908152600a60205260409020600101546009805460001981019190829081106145dc57fe5b60009182526020909120015460098054600160a060020a03909216918490811061460257fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a0316021790555081600a60006009858154811061464257fe5b6000918252602080832090910154600160a060020a03168352820192909252604001902060010155600980548061467557fe5b600082815260208082206000199084018101805473ffffffffffffffffffffffffffffffffffffffff191690559092019092556040805160808101825283815280830184815281830185815260608301868152600160a060020a038c168752600a909552929094209051815460ff1916901515178155925160018401555160028301555160039091015561470e8533611bdd8787614dee565b600554611c03908690620100009004600160a060020a031685614e83565b600554600090610100900460ff161561477d576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b5060075490565b336000908152600160209081526040808320600160a060020a03861684529091528120546147b29083615082565b336000818152600160209081526040808320600160a060020a0389168085529083529281902085905580519485525191936000805160206157c0833981519152929081900390910190a350600192915050565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b33600160a060020a0316600035600160e060020a031916600160e060020a03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600654600160a060020a031633146148e1576040805160e560020a62461bcd0281526020600482015260126024820152600080516020615720833981519152604482015290519081900360640190fd5b600160a060020a0383166000908152600a602052604090205460ff1615614952576040805160e560020a62461bcd02815260206004820152600c60248201527f4552525f49535f424f554e440000000000000000000000000000000000000000604482015290519081900360640190fd5b60085460ff161561499b576040805160e560020a62461bcd02815260206004820152601060248201526000805160206157e0833981519152604482015290519081900360640190fd5b6009546008116149f5576040805160e560020a62461bcd02815260206004820152600e60248201527f4552525f4d41585f544f4b454e53000000000000000000000000000000000000604482015290519081900360640190fd5b604080516080810182526001808252600980546020808501918252600085870181815260608701828152600160a060020a038c16808452600a9094529782209651875460ff1916901515178755925186860155915160028601559451600390940193909355805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19169091179055614aaf8383836117c9565b505050565b6002670de0b6b3a76400006113a8565b600554600090610100900460ff1615614b15576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b600160a060020a0382166000908152600a602052604090205460ff16614b73576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b600160a060020a0382166000908152600a6020526040902060020154600b54614b9d90829061515a565b9392505050565b600554600090610100900460ff1615614bf5576040805160e560020a62461bcd02815260206004820152600b60248201526000805160206156a0833981519152604482015290519081900360640190fd5b600160a060020a0382166000908152600a602052604090205460ff16614c53576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020615780833981519152604482015290519081900360640190fd5b50600160a060020a03166000908152600a602052604090206003015490565b600080614c7f858861515a565b90506000614c8d8786614dee565b90506000614c9b888361515a565b90506000614ca98285615296565b9050614cbd81670de0b6b3a7640000614dee565b9050614cd1670de0b6b3a764000087614dee565b9450614ce6614ce08c83614d05565b8661515a565b9b9a5050505050505050505050565b60065460a060020a900460ff1690565b6000828202831580614d1f575082848281614d1c57fe5b04145b614d73576040805160e560020a62461bcd02815260206004820152601060248201527f4552525f4d554c5f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b6706f05b59d3b20000810181811015614dd6576040805160e560020a62461bcd02815260206004820152601060248201527f4552525f4d554c5f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b6000670de0b6b3a7640000825b049695505050505050565b6000806000614dfd85856153b9565b915091508015614e57576040805160e560020a62461bcd02815260206004820152601160248201527f4552525f5355425f554e444552464c4f57000000000000000000000000000000604482015290519081900360640190fd5b509392505050565b614e6982826153de565b5050565b614e76816153e9565b50565b614e6982826154b3565b604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a03848116600483015260248201849052915160009286169163a9059cbb91604480830192602092919082900301818787803b158015614eef57600080fd5b505af1158015614f03573d6000803e3d6000fd5b505050506040513d6020811015614f1957600080fd5b5051905080614f72576040805160e560020a62461bcd02815260206004820152600f60248201527f4552525f45524332305f46414c53450000000000000000000000000000000000604482015290519081900360640190fd5b50505050565b600160a060020a038316600090815260208190526040902054811115614fe8576040805160e560020a62461bcd02815260206004820152601460248201527f4552525f494e53554646494349454e545f42414c000000000000000000000000604482015290519081900360640190fd5b600160a060020a03831660009081526020819052604090205461500b9082614dee565b600160a060020a03808516600090815260208190526040808220939093559084168152205461503a9082615082565b600160a060020a0380841660008181526020818152604091829020949094558051858152905191939287169260008051602061576083398151915292918290030190a3505050565b600082820183811015614b9d576040805160e560020a62461bcd02815260206004820152601060248201527f4552525f4144445f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301523060248301526044820184905291516000928616916323b872dd91606480830192602092919082900301818787803b158015614eef57600080fd5b614e76816154be565b6000816151b1576040805160e560020a62461bcd02815260206004820152600c60248201527f4552525f4449565f5a45524f0000000000000000000000000000000000000000604482015290519081900360640190fd5b670de0b6b3a764000083028315806151d95750670de0b6b3a76400008482816151d657fe5b04145b61522d576040805160e560020a62461bcd02815260206004820152601060248201527f4552525f4449565f494e5445524e414c00000000000000000000000000000000604482015290519081900360640190fd5b6002830481018181101561528b576040805160e560020a62461bcd02815260206004820152601060248201527f4552525f4449565f494e5445524e414c00000000000000000000000000000000604482015290519081900360640190fd5b6000848281614de357fe5b600060018310156152f1576040805160e560020a62461bcd02815260206004820152601560248201527f4552525f42504f575f424153455f544f4f5f4c4f570000000000000000000000604482015290519081900360640190fd5b671bc16d674ec7ffff831115615351576040805160e560020a62461bcd02815260206004820152601660248201527f4552525f42504f575f424153455f544f4f5f4849474800000000000000000000604482015290519081900360640190fd5b600061535c83615521565b9050600061536a8483614dee565b905060006153808661537b8561553c565b61554a565b9050816153915792506110d4915050565b60006153a287846305f5e1006155a1565b90506153ae8282614d05565b979650505050505050565b6000808284106153cf57505080820360006153d7565b505081810360015b9250929050565b614e69823083614f78565b30600090815260208190526040902054811115615450576040805160e560020a62461bcd02815260206004820152601460248201527f4552525f494e53554646494349454e545f42414c000000000000000000000000604482015290519081900360640190fd5b3060009081526020819052604090205461546a9082614dee565b306000908152602081905260409020556002546154879082614dee565b60025560408051828152905160009130916000805160206157608339815191529181900360200190a350565b614e69308383614f78565b306000908152602081905260409020546154d89082615082565b306000908152602081905260409020556002546154f59082615082565b60025560408051828152905130916000916000805160206157608339815191529181900360200190a350565b6000670de0b6b3a76400006155358361553c565b0292915050565b670de0b6b3a7640000900490565b6000806002830661556357670de0b6b3a7640000615565565b835b90506002830492505b8215614b9d5761557e8485614d05565b93506002830615615596576155938185614d05565b90505b60028304925061556e565b60008281806155b887670de0b6b3a76400006153b9565b9092509050670de0b6b3a764000080600060015b888410615670576000670de0b6b3a7640000820290506000806156008a6155fb85670de0b6b3a7640000614dee565b6153b9565b91509150615612876137e9848c614d05565b965061561e878461515a565b96508661562d57505050615670565b8715615637579315935b8015615641579315935b8415615658576156518688614dee565b9550615665565b6156628688615082565b95505b5050506001016155cc565b5090999850505050505050505056fe4552525f4e4f545f46494e414c495a45440000000000000000000000000000004552525f5245454e5452590000000000000000000000000000000000000000004552525f4c494d49545f494e00000000000000000000000000000000000000004552525f4d41585f4f55545f524154494f00000000000000000000000000000063982df10efd8dfaaaa0fcc7f50b2d93b7cba26ccc48adee2873220d485dc39a4552525f4e4f545f434f4e54524f4c4c455200000000000000000000000000004552525f4d41585f494e5f524154494f00000000000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4552525f4e4f545f424f554e4400000000000000000000000000000000000000e74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9254552525f49535f46494e414c495a4544000000000000000000000000000000004552525f4c494d49545f4f5554000000000000000000000000000000000000004552525f4d4154485f415050524f580000000000000000000000000000000000a265627a7a723158202b5a60166bb5b113e86d3e715d8d891e57428121f0c4ed3916bb69f71e21311d64736f6c634300050c0032",
"sourceMap": "2796:49:6:-;732:23252:5;2796:49:6;;732:23252:5;2796:49:6;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2852:33:6;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2892:30:6;;;-1:-1:-1;;2892:30:6;2920:2;2892:30;;;2441:184:5;5:2:-1;;;;30:1;27;20:12;5:2;-1:-1;2473:11:5;:24;;2508:8;:21;;-1:-1:-1;;2508:21:5;-1:-1:-1;2487:10:5;2508:21;;;;;;;;;;940:12:1;2540:8:5;:18;-1:-1:-1;;2473:24:5;;;;-1:-1:-1;;2569:19:5;;;2599:10;:18;;-1:-1:-1;;2599:18:5;;;732:23252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;732:23252:5;;;-1:-1:-1;732:23252:5;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
"deployedSourceMap": "732:23252:5:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;732:23252:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21561:1386;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21561:1386:5;;-1:-1:-1;;;;;21561:1386:5;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2931:83:6;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2931:83:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3541:184;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3541:184:6;;-1:-1:-1;;;;;3541:184:6;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1176:50:1;;;:::i;10181:491:5:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10181:491:5;;;;;;;;;;:::i;9682:::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9682:491:5;;;;;;;;;;:::i;3445:88:6:-;;;:::i;1475:54:1:-;;;:::i;1067:45::-;;;:::i;4539:491:6:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4539:491:6;;;;;;;;;;;;;;;;;:::i;2873:123:5:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2873:123:5;-1:-1:-1;;;;;2873:123:5;;:::i;4522:137::-;;;:::i;:::-;;;;-1:-1:-1;;;;;4522:137:5;;;;;;;;;;;;;;3117:82:6;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4667:351:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4667:351:5;;:::i;:::-;;6676:1639;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6676:1639:5;;-1:-1:-1;;;;;6676:1639:5;;;;;;;;;;;:::i;20225:1328::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20225:1328:5;;-1:-1:-1;;;;;20225:1328:5;;;;;;;;;;;:::i;5236:250::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5236:250:5;;;;:::i;5494:432::-;;;:::i;10680:948::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10680:948:5;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;10680:948:5;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;10680:948:5;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;10680:948:5;;-1:-1:-1;10680:948:5;-1:-1:-1;10680:948:5;:::i;8766:1193:3:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;8766:1193:3;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17752:1206:5:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17752:1206:5;;-1:-1:-1;;;;;17752:1206:5;;;;;;;;;;;:::i;3993:397:6:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3993:397:6;;-1:-1:-1;;;;;3993:397:6;;;;;;:::i;18966:1251:5:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18966:1251:5;;-1:-1:-1;;;;;18966:1251:5;;;;;;;;;;;:::i;3335:102:6:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3335:102:6;-1:-1:-1;;;;;3335:102:6;;:::i;899:53:1:-;;;:::i;15262:2480:5:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;15262:2480:5;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12768:2486;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;12768:2486:5;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13460:1285:3:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;13460:1285:3;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6581:1167::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;6581:1167:3;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1233:54:1:-;;;:::i;11078:1263:3:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;11078:1263:3;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9449:225:5:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9449:225:5;-1:-1:-1;;;;;9449:225:5;;:::i;2754:111::-;;;:::i;5026:202::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5026:202:5;-1:-1:-1;;;;;5026:202:5;;:::i;3723:148::-;;;:::i;1296:51:1:-;;;:::i;3489:226:5:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3489:226:5;-1:-1:-1;;;;;3489:226:5;;:::i;3022:87:6:-;;;:::i;1594:59:1:-;;;:::i;817:121:0:-;;;:::i;1663:509:3:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;1663:509:3;;;;;;;;;;;;;;;;;;;;;;:::i;4398:133:6:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4398:133:6;;-1:-1:-1;;;;;4398:133:6;;;;;;:::i;11636:1122:5:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11636:1122:5;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;11636:1122:5;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11636:1122:5;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;11636:1122:5;;-1:-1:-1;11636:1122:5;-1:-1:-1;11636:1122:5;:::i;848:42:1:-;;;:::i;799:::-;;;:::i;1356:46::-;;;:::i;3190:683:3:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;3190:683:3;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;959:50:1:-;;;:::i;1409:59::-;;;:::i;3280:201:5:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3280:201:5;;;;;;;;;;;;;;;;;1016:42:1;;;:::i;3129:143:5:-;;;:::i;3004:117::-;;;:::i;8323:1041::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8323:1041:5;-1:-1:-1;;;;;8323:1041:5;;:::i;4386:128::-;;;:::i;3733:252:6:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3733:252:6;;-1:-1:-1;;;;;3733:252:6;;;;;;:::i;3207:120::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3207:120:6;;;;;;;;;;:::i;5936:732:5:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5936:732:5;;-1:-1:-1;;;;;5936:732:5;;;;;;;;;;;:::i;1538:49:1:-;;;:::i;3879:275:5:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3879:275:5;-1:-1:-1;;;;;3879:275:5;;:::i;4162:216::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4162:216:5;-1:-1:-1;;;;;4162:216:5;;:::i;4891:672:3:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;4891:672:3;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2633:113:5:-;;;:::i;21561:1386::-;1621:39;;;;;;;1651:8;1621:39;;;;;;21723:17;;1639:10;;-1:-1:-1;;;;;;1630:7:5;;;;21723:17;;1651:8;;1621:39;;;;;21723:17;1651:8;;21723:17;1621:39;1:33:-1;99:1;81:16;;;74:27;1621:39:5;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;1621:39:5;;;;-1:-1:-1;1621:39:5;;-1:-1:-1;;;;1621:39:5;1726:6;;;;;;;1725:7;1717:31;;;;;-1:-1:-1;;;;;1717:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1717:31:5;;;;;;;;;;;;;;;1759:6;:13;;-1:-1:-1;;1759:13:5;;;;;21766:10;;1759:13;21766:10;21758:40;;;;;-1:-1:-1;;;;;21758:40:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;21758:40:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;21817:18:5;;;;;;:8;:18;;;;;:24;;;21809:50;;;;;-1:-1:-1;;;;;21809:50:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;21809:50:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;21901:18:5;;;;;;:8;:18;;;;;:26;;;;;21896:47;;784:6:1;1636:8;;1648:5;1635:18;21896:4:5;:47::i;:::-;21878:14;:65;;21870:95;;;;;-1:-1:-1;;;;;21870:95:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;21870:95:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;22005:18:5;;21978:24;22005:18;;;:8;:18;;;;;22106:17;;;;-1:-1:-1;22154:16:5;;;;22201:12;;22244;;22332:8;;22051:316;;22106:17;22154:16;22201:12;22244;22287:14;;22051:24;:316::i;:::-;22036:331;-1:-1:-1;22388:17:5;22380:45;;;;;-1:-1:-1;;;;;22380:45:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;22380:45:5;;;;;;;;;;;;;;;22460:15;22444:12;:31;;22436:56;;;;;-1:-1:-1;;;;;22436:56:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;22436:56:5;;;;;;;;;;;;;;;22525:39;22530:9;:17;;;22549:14;22525:4;:39::i;:::-;22505:17;;;:59;22577:12;22592:28;22597:12;22577;22592:4;:28::i;:::-;22638:46;;;;;;;;-1:-1:-1;;;22577:43:5;;-1:-1:-1;;;;;;22638:46:5;;;22647:10;;22638:46;-1:-1:-1;;;;;;;;;22638:46:5;;;;;;;;;22697:40;22712:10;22724:12;22697:14;:40::i;:::-;22748:43;22763:27;22768:12;22782:7;22763:4;:27::i;:::-;22748:14;:43::i;:::-;22817:8;;22802:33;;22817:8;;;-1:-1:-1;;;;;22817:8:5;22827:7;22802:14;:33::i;:::-;22846:53;22862:8;22872:10;22884:14;22846:15;:53::i;:::-;-1:-1:-1;;1795:6:5;:14;;-1:-1:-1;;1795:14:5;;;21561:1386;;-1:-1:-1;;;21561:1386:5:o;2931:83:6:-;3001:5;2994:12;;;;;;;;;;;;;-1:-1:-1;;2994:12:6;;;;;;;;;;;;;;;;;;;;;;;;;;2968:13;;2994:12;;3001:5;;2994:12;;;3001:5;2994:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2931:83;:::o;3541:184::-;3627:10;3599:4;3616:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;3616:27:6;;;;;;;;;;;:33;;;3665:30;;;;;;;-1:-1:-1;;3599:4:6;;3616:27;;3627:10;;3665:30;;3599:4;;3616:22;-1:-1:-1;3599:4:6;-1:-1:-1;;;;;3665:30:6;;;;;;;-1:-1:-1;3713:4:6;3541:184;;;;;:::o;1176:50:1:-;1217:9;1176:50;:::o;10181:491:5:-;1867:6;;10306:14;;1867:6;;;;;1866:7;1858:31;;;;;-1:-1:-1;;;;;1858:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1858:31:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;10346:17:5;;;;;;:8;:17;;;;;:23;;;10338:49;;;;;-1:-1:-1;;;;;10338:49:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;10338:49:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;10406:18:5;;;;;;:8;:18;;;;;:24;;;10398:50;;;;;-1:-1:-1;;;;;10398:50:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;10398:50:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;10485:17:5;;;10459:23;10485:17;;;:8;:17;;;;;;10540:18;;;;;;;10590:16;;;;;-1:-1:-1;10608:15:5;;;;10625:17;;;;10644:16;;;;10540:18;;10576:88;;10590:16;;10608:15;10644:16;10576:13;:88::i;:::-;10569:95;10181:491;-1:-1:-1;;;;;10181:491:5:o;9682:::-;1867:6;;9800:14;;1867:6;;;;;1866:7;1858:31;;;;;-1:-1:-1;;;;;1858:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1858:31:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;9840:17:5;;;;;;:8;:17;;;;;:23;;;9832:49;;;;;-1:-1:-1;;;;;9832:49:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;9832:49:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;9900:18:5;;;;;;:8;:18;;;;;:24;;;9892:50;;;;;-1:-1:-1;;;;;9892:50:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;9892:50:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;9979:17:5;;;9953:23;9979:17;;;:8;:17;;;;;;10034:18;;;;;;;10084:16;;;;;-1:-1:-1;10102:15:5;;;;10119:17;;;;10138:16;;;;10156:8;;10070:95;;10102:15;10119:17;10138:16;10070:13;:95::i;3445:88:6:-;3513:12;;3445:88;:::o;1475:54:1:-;1523:6;784;1516:13;;1475:54;:::o;1067:45::-;784:6;1067:45;:::o;4539:491:6:-;4615:4;-1:-1:-1;;;;;4640:17:6;;:10;:17;;:55;;-1:-1:-1;;;;;;4668:15:6;;;;;;-1:-1:-1;4668:15:6;;;;;;;;4684:10;4668:27;;;;;;;;4661:34;;;4640:55;4632:89;;;;;-1:-1:-1;;;;;4632:89:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;4732:20;4738:3;4743;4748;4732:5;:20::i;:::-;-1:-1:-1;;;;;4767:17:6;;:10;:17;;;;:63;;-1:-1:-1;;;;;;4788:15:6;;;;;;-1:-1:-1;4788:15:6;;;;;;;;4804:10;4788:27;;;;;;;;-1:-1:-1;;4788:42:6;;4767:63;4763:238;;;-1:-1:-1;;;;;4882:15:6;;;;;;-1:-1:-1;4882:15:6;;;;;;;;4898:10;4882:27;;;;;;;;4877:38;;4911:3;4877:4;:38::i;:::-;-1:-1:-1;;;;;4847:15:6;;;;;;;-1:-1:-1;4847:15:6;;;;;;;;4863:10;4847:27;;;;;;;;;:68;;;4935:54;;;;;;;-1:-1:-1;;4935:54:6;;;;4863:10;;4935:54;;;;4847:15;-1:-1:-1;4847:15:6;-1:-1:-1;;;;;4935:54:6;;;;;;;;;4763:238;-1:-1:-1;5018:4:6;4539:491;;;;;:::o;2873:123:5:-;-1:-1:-1;;;;;2971:11:5;2942:4;2971:11;;;:8;:11;;;;;:17;;;;2873:123::o;4522:137::-;1867:6;;4608:7;;1867:6;;;;;1866:7;1858:31;;;;;-1:-1:-1;;;;;1858:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1858:31:5;;;;;;;;;;;;;;;-1:-1:-1;4640:11:5;;-1:-1:-1;;;;;4640:11:5;;4522:137::o;3117:82:6:-;3182:9;;;;3117:82;:::o;4667:351:5:-;1621:39;;;;;;;1651:8;1621:39;;;;;;1639:10;;-1:-1:-1;1630:7:5;;-1:-1:-1;;;;;;1630:7:5;;-1:-1:-1;;1651:8:5;1621:39;;;;-1:-1:-1;1651:8:5;;-1:-1:-1;1621:39:5;1:33:-1;99:1;81:16;;;74:27;1621:39:5;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;1621:39:5;;;;-1:-1:-1;1621:39:5;;-1:-1:-1;;;;1621:39:5;1726:6;;;;;;;1725:7;1717:31;;;;;-1:-1:-1;;;;;1717:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1717:31:5;;;;;;;;;;;;;;;1759:6;:13;;-1:-1:-1;;1759:13:5;;;;;4777:10;;1759:13;4777:10;4776:11;4768:40;;;;;-1:-1:-1;;;;;4768:40:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;4768:40:5;;;;;;;;;;;;;;;4841:11;;-1:-1:-1;;;;;4841:11:5;4827:10;:25;4819:56;;;;;-1:-1:-1;;;;;4819:56:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;4819:56:5;;;;;;;;;;;;;;;940:12:1;4894:18:5;;;4886:42;;;;;-1:-1:-1;;;;;4886:42:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;1000:9:1;4947:18:5;;;4939:42;;;;;-1:-1:-1;;;;;4939:42:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;4992:8;:18;1795:6;:14;;-1:-1:-1;;1795:14:5;;;4667:351::o;6676:1639::-;1621:39;;;;;;;1651:8;1621:39;;;;;;1639:10;;-1:-1:-1;1630:7:5;;-1:-1:-1;;;;;;1630:7:5;;-1:-1:-1;;1651:8:5;1621:39;;;;-1:-1:-1;1651:8:5;;-1:-1:-1;1621:39:5;1:33:-1;99:1;81:16;;;74:27;1621:39:5;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;1621:39:5;;;;-1:-1:-1;1621:39:5;;-1:-1:-1;;;;1621:39:5;1726:6;;;;;;;1725:7;1717:31;;;;;-1:-1:-1;;;;;1717:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1717:31:5;;;;;;;;;;;;;;;1759:6;:13;;;-1:-1:-1;;1759:13:5;;;;;;6822:11;;-1:-1:-1;;;;;6822:11:5;6808:10;:25;6800:56;;;;;-1:-1:-1;;;;;6800:56:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;6800:56:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;6875:15:5;;;;;;:8;:15;;;;;:21;;;6867:47;;;;;-1:-1:-1;;;;;6867:47:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;6867:47:5;;;;;;;;;;;;;;;6934:10;;;;6933:11;6925:40;;;;;-1:-1:-1;;;;;6925:40:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;6925:40:5;;;;;;;;;;;;;;;784:6:1;6986::5;:20;;6978:47;;;;;-1:-1:-1;;;;;6978:47:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;1160:9:1;7044:20:5;;;7036:47;;;;;-1:-1:-1;;;;;7036:47:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;1274:13:1;7102:22:5;;;7094:50;;;;;-1:-1:-1;;;;;7094:50:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7220:15:5;;7203:14;7220:15;;;:8;:15;;;;;-1:-1:-1;7220:22:5;;7257:18;;;7253:304;;;7307:43;7312:12;;7326:23;7331:6;7339:9;7326:4;:23::i;:::-;7307:4;:43::i;:::-;7292:12;:58;;;1217:9:1;-1:-1:-1;7373:32:5;7365:65;;;;;-1:-1:-1;;;;;7365:65:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;7253:304;;;7461:9;7452:6;:18;7448:109;;;7502:43;7507:12;;7521:23;7526:9;7537:6;7521:4;:23::i;:::-;7502:4;:43::i;:::-;7487:12;:58;7448:109;-1:-1:-1;;;;;7575:15:5;;;;;;:8;:15;;;;;-1:-1:-1;7575:22:5;;:31;;;7700:23;;;;7734:33;;;;7782:20;;;7778:530;;;7819:61;7835:5;7842:10;7854:25;7859:7;7868:10;7854:4;:25::i;:::-;7819:15;:61::i;:::-;7778:530;;;7912:10;7902:7;:20;7898:410;;;8017:26;8046:25;8051:10;8063:7;8046:4;:25::i;:::-;8017:54;;8086:17;8106:37;8111:21;1057:1:1;8106:4:5;:37::i;:::-;8086:57;;8158:77;8174:5;8181:10;8193:41;8198:21;8221:12;8193:4;:41::i;:::-;8158:15;:77::i;:::-;8273:8;;8250:46;;8266:5;;8273:8;;;-1:-1:-1;;;;;8273:8:5;8283:12;8250:15;:46::i;:::-;7898:410;;;-1:-1:-1;;1795:6:5;:14;;-1:-1:-1;;1795:14:5;;;-1:-1:-1;;;6676:1639:5:o;20225:1328::-;1621:39;;;;;;;1651:8;1621:39;;;;;;20379:19;;1639:10;;-1:-1:-1;;;;;;1630:7:5;;;;20379:19;;1651:8;;1621:39;;;;;20379:19;1651:8;;20379:19;1621:39;1:33:-1;99:1;81:16;;;74:27;1621:39:5;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;1621:39:5;;;;-1:-1:-1;1621:39:5;;-1:-1:-1;;;;1621:39:5;1726:6;;;;;;;1725:7;1717:31;;;;;-1:-1:-1;;;;;1717:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1717:31:5;;;;;;;;;;;;;;;1759:6;:13;;-1:-1:-1;;1759:13:5;;;;;20424:10;;1759:13;20424:10;20416:40;;;;;-1:-1:-1;;;;;20416:40:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;20416:40:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;20475:18:5;;;;;;:8;:18;;;;;:24;;;20467:50;;;;;-1:-1:-1;;;;;20467:50:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;20467:50:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;20557:18:5;;20530:24;20557:18;;;:8;:18;;;;;20660:17;;;;-1:-1:-1;20708:16:5;;;;20755:12;;20798;;20884:8;;20605:314;;20660:17;20708:16;20755:12;20798;20841;;20605:24;:314::i;:::-;20588:331;;20958:12;20940:14;:30;;20932:56;;;;;-1:-1:-1;;;;;20932:56:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;20932:56:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;21040:18:5;;;;;;:8;:18;;;;;:26;;;;;21035:47;;784:6:1;1636:8;;21035:47:5;21017:14;:65;;21009:95;;;;;-1:-1:-1;;;;;21009:95:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;21009:95:5;;;;;;;;;;;;;;;21137:39;21142:9;:17;;;21161:14;21137:4;:39::i;:::-;21117:17;;;:59;21189:12;21204:28;21209:12;21189;21204:4;:28::i;:::-;21250:46;;;;;;;;-1:-1:-1;;;21189:43:5;;-1:-1:-1;;;;;;21250:46:5;;;21259:10;;21250:46;-1:-1:-1;;;;;;;;;21250:46:5;;;;;;;;;21309:40;21324:10;21336:12;21309:14;:40::i;:::-;21360:43;21375:27;21380:12;21394:7;21375:4;:27::i;21360:43::-;21429:8;;21414:33;;21429:8;;;-1:-1:-1;;;;;21429:8:5;21439:7;21414:14;:33::i;:::-;21458:53;21474:8;21484:10;21496:14;21458:15;:53::i;5236:250::-;1621:39;;;;;;;1651:8;1621:39;;;;;;1639:10;;-1:-1:-1;1630:7:5;;-1:-1:-1;;;;;;1630:7:5;;-1:-1:-1;;1651:8:5;1621:39;;;;-1:-1:-1;1651:8:5;;-1:-1:-1;1621:39:5;1:33:-1;99:1;81:16;;;74:27;1621:39:5;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;1621:39:5;;;;-1:-1:-1;1621:39:5;;-1:-1:-1;;;;1621:39:5;1726:6;;;;;;;1725:7;1717:31;;;;;-1:-1:-1;;;;;1717:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1717:31:5;;;;;;;;;;;;;;;1759:6;:13;;-1:-1:-1;;1759:13:5;;;;;5348:10;;1759:13;5348:10;5347:11;5339:40;;;;;-1:-1:-1;;;;;5339:40:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;5339:40:5;;;;;;;;;;;;;;;5412:11;;-1:-1:-1;;;;;5412:11:5;5398:10;:25;5390:56;;;;;-1:-1:-1;;;;;5390:56:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;5390:56:5;;;;;;;;;;;;;;;5457:11;:21;;;;;-1:-1:-1;;;5457:21:5;-1:-1:-1;;5457:21:5;;;;;;;;;1795:6;:14;;-1:-1:-1;;1795:14:5;;;5236:250::o;5494:432::-;1621:39;;;;;;;1651:8;1621:39;;;;;;1639:10;;-1:-1:-1;1630:7:5;;-1:-1:-1;;;;;;1630:7:5;;-1:-1:-1;;1651:8:5;1621:39;;;;-1:-1:-1;1651:8:5;;-1:-1:-1;1621:39:5;1:33:-1;99:1;81:16;;;74:27;1621:39:5;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;1621:39:5;;;;-1:-1:-1;1621:39:5;;-1:-1:-1;;;;1621:39:5;1726:6;;;;;;;1725:7;1717:31;;;;;-1:-1:-1;;;;;1717:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1717:31:5;;;;;;;;;;;;;;;1759:6;:13;;;-1:-1:-1;;1759:13:5;;;;;;5602:11;;-1:-1:-1;;;;;5602:11:5;5588:10;:25;5580:56;;;;;-1:-1:-1;;;;;5580:56:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;5580:56:5;;;;;;;;;;;;;;;5656:10;;;;5655:11;5647:40;;;;;-1:-1:-1;;;;;5647:40:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;5647:40:5;;;;;;;;;;;;;;;5706:7;:14;840:1:1;-1:-1:-1;5706:34:5;5698:61;;;;;-1:-1:-1;;;;;5698:61:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;5772:10;:17;;-1:-1:-1;;5772:17:5;5785:4;5772:17;;;5800:11;:18;;-1:-1:-1;;5800:18:5;-1:-1:-1;;;5800:18:5;;;5831:32;1337:10:1;5831:14:5;:32::i;:::-;5874:44;5889:10;1337::1;5874:14:5;:44::i;:::-;1795:6;:14;;-1:-1:-1;;1795:14:5;;;5494:432::o;10680:948::-;1621:39;;;;;;;1651:8;1621:39;;;;;;1639:10;;-1:-1:-1;1630:7:5;;-1:-1:-1;;;;;;1630:7:5;;-1:-1:-1;;1651:8:5;1621:39;;;;-1:-1:-1;1651:8:5;;-1:-1:-1;1621:39:5;1:33:-1;99:1;81:16;;;74:27;1621:39:5;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;1621:39:5;;;;-1:-1:-1;1621:39:5;;-1:-1:-1;;;;1621:39:5;1726:6;;;;;;;1725:7;1717:31;;;;;-1:-1:-1;;;;;1717:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1717:31:5;;;;;;;;;;;;;;;1759:6;:13;;-1:-1:-1;;1759:13:5;;;;;10822:10;;1759:13;10822:10;10814:40;;;;;-1:-1:-1;;;;;10814:40:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;10814:40:5;;;;;;;;;;;;;;;10867:14;10884:13;:11;:13::i;:::-;10867:30;;10908:10;10921:30;10926:13;10941:9;10921:4;:30::i;:::-;10908:43;-1:-1:-1;10970:10:5;10962:38;;;;;-1:-1:-1;;;;;10962:38:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;10962:38:5;;;;;;;;;;;;;;;11018:6;11013:516;11034:7;:14;11030:18;;11013:516;;;11070:9;11082:7;11090:1;11082:10;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11082:10:5;11118:11;;;:8;:11;;;;;;:19;;;11082:10;;-1:-1:-1;11118:19:5;11173:16;11178:5;11118:19;11173:4;:16::i;:::-;11152:37;-1:-1:-1;11212:18:5;11204:46;;;;;-1:-1:-1;;;;;11204:46:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;11204:46:5;;;;;;;;;;;;;;;11290:12;;11303:1;11290:15;;;;;;;;;;;;;11273:13;:32;;11265:57;;;;;-1:-1:-1;;;;;11265:57:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;11265:57:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;11364:11:5;;;;;;:8;:11;;;;;:19;;;11359:40;;11385:13;11359:4;:40::i;:::-;-1:-1:-1;;;;;11337:11:5;;;;;;:8;:11;;;;;;;;:19;;:62;;;;11419:38;;;;;;;-1:-1:-1;;11337:11:5;;11428:10;;11419:38;;11337:11;;-1:-1:-1;11337:11:5;-1:-1:-1;;;;;11419:38:5;;;;;;;;;11472:45;11488:1;11491:10;11503:13;11472:15;:45::i;:::-;-1:-1:-1;;;11050:3:5;;11013:516;;;;11539:29;11554:13;11539:14;:29::i;:::-;11579:41;11594:10;11606:13;11579:14;:41::i;8766:1193:3:-;9010:18;9046:21;9070:32;9075:13;9090:11;9070:4;:32::i;:::-;9046:56;;9113:18;9134:31;9139:10;9151:13;9134:4;:31::i;:::-;9113:52;;9176:14;9193:31;9198:13;9213:10;9193:4;:31::i;:::-;9176:48;;9302:8;9313:28;784:6:1;9324:16:3;9313:4;:28::i;:::-;9302:39;;9353:17;9373:20;9378:9;9389:3;9373:4;:20::i;:::-;9353:40;;9404:22;9429:34;9434:12;9448:14;9429:4;:34::i;:::-;9404:59;;9474:26;9503:39;9508:17;9527:14;9503:4;:39::i;:::-;9474:68;;9795:8;9806:43;9811:28;784:6:1;9822:16:3;9811:4;:28::i;:::-;9841:7;9806:4;:43::i;:::-;9795:54;;9876:44;9881:21;9904:15;784:6:1;9915:3:3;9904:4;:15::i;:::-;9876:4;:44::i;:::-;9860:60;8766:1193;-1:-1:-1;;;;;;;;;;;;;;;8766:1193:3:o;17752:1206:5:-;1621:39;;;;;;;1651:8;1621:39;;;;;;17912:18;;1639:10;;-1:-1:-1;;;;;;1630:7:5;;;;17912:18;;1651:8;;1621:39;;;;;17912:18;1651:8;;17912:18;1621:39;1:33:-1;99:1;81:16;;;74:27;1621:39:5;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;1621:39:5;;;;-1:-1:-1;1621:39:5;;-1:-1:-1;;;;1621:39:5;1726:6;;;;;;;1725:7;1717:31;;;;;-1:-1:-1;;;;;1717:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1717:31:5;;;;;;;;;;;;;;;1759:6;:13;;-1:-1:-1;;1759:13:5;;;;;17966:10;;1759:13;17966:10;17958:40;;;;;-1:-1:-1;;;;;17958:40:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;17958:40:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;18017:17:5;;;;;;:8;:17;;;;;:23;;;18009:49;;;;;-1:-1:-1;;;;;18009:49:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;18009:49:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;18099:17:5;;;;;;:8;:17;;;;;:25;;;18094:45;;-1:-1:-1;784:6:1;1579:8;;18094:4:5;:45::i;:::-;18077:13;:62;;18069:91;;;;;-1:-1:-1;;;;;18069:91:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;18069:91:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;18199:17:5;;18173:23;18199:17;;;:8;:17;;;;;18300:16;;;;-1:-1:-1;18347:15:5;;;;18393:12;;18436;;18523:8;;18245:313;;18300:16;18347:15;18393:12;18436;18479:13;;18245:24;:313::i;:::-;18229:329;;18596:16;18579:13;:33;;18571:59;;;;;-1:-1:-1;;;;;18571:59:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;18571:59:5;;;;;;;;;;;;;;;18662:37;18667:8;:16;;;18685:13;18662:4;:37::i;:::-;18643:16;;;:56;18717:44;;;;;;;;-1:-1:-1;;;;;18717:44:5;;;18726:10;;-1:-1:-1;;;;;;;;;;;18717:44:5;;;;;;;;18774:29;18789:13;18774:14;:29::i;:::-;18814:41;18829:10;18841:13;18814:14;:41::i;:::-;18866:51;18882:7;18891:10;18903:13;18866:15;:51::i;:::-;-1:-1:-1;1795:6:5;:14;;-1:-1:-1;;1795:14:5;;;17752:1206;;-1:-1:-1;;;17752:1206:5:o;3993:397:6:-;4104:10;4060:4;4093:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;4093:27:6;;;;;;;;;;4135:14;;;4131:160;;;4177:10;4196:1;4166:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;4166:27:6;;;;;;;;;:31;4131:160;;;4260:19;4265:8;4275:3;4260:4;:19::i;:::-;4241:10;4230:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;4230:27:6;;;;;;;;;:49;4131:160;4315:10;4332:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;4306:54:6;;4332:27;;;;;;;;;;4306:54;;;;;;;-1:-1:-1;;4306:54:6;;4315:10;4306:54;;4332:22;-1:-1:-1;4332:22:6;-1:-1:-1;;;;;4306:54:6;;;;;;;;;;-1:-1:-1;4378:4:6;;3993:397;-1:-1:-1;;;3993:397:6:o;18966:1251:5:-;1621:39;;;;;;;1651:8;1621:39;;;;;;19120:18;;1639:10;;-1:-1:-1;;;;;;1630:7:5;;;;19120:18;;1651:8;;1621:39;;;;;19120:18;1651:8;;19120:18;1621:39;1:33:-1;99:1;81:16;;;74:27;1621:39:5;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;1621:39:5;;;;-1:-1:-1;1621:39:5;;-1:-1:-1;;;;1621:39:5;1726:6;;;;;;;1725:7;1717:31;;;;;-1:-1:-1;;;;;1717:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1717:31:5;;;;;;;;;;;;;;;1759:6;:13;;-1:-1:-1;;1759:13:5;;;;;19164:10;;1759:13;19164:10;19156:40;;;;;-1:-1:-1;;;;;19156:40:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;19156:40:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;19215:17:5;;;;;;:8;:17;;;;;:23;;;19207:49;;;;;-1:-1:-1;;;;;19207:49:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;19207:49:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;19295:17:5;;19269:23;19295:17;;;:8;:17;;;;;19396:16;;;;-1:-1:-1;19443:15:5;;;;19489:12;;19532;;19619:8;;19341:313;;19396:16;19443:15;19489:12;19532;19575:13;;19341:24;:313::i;:::-;19325:329;-1:-1:-1;19675:18:5;19667:46;;;;;-1:-1:-1;;;;;19667:46:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;19667:46:5;;;;;;;;;;;;;;;19749:11;19732:13;:28;;19724:53;;;;;-1:-1:-1;;;;;19724:53:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;19724:53:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;19828:17:5;;;;;;:8;:17;;;;;:25;;;19823:45;;-1:-1:-1;784:6:1;1579:8;;19823:45:5;19806:13;:62;;19798:91;;;;;-1:-1:-1;;;;;19798:91:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;19798:91:5;;;;;;;;;;;;;;;19921:37;19926:8;:16;;;19944:13;19921:4;:37::i;:::-;19902:16;;;:56;19976:44;;;;;;;;-1:-1:-1;;;;;19976:44:5;;;19985:10;;-1:-1:-1;;;;;;;;;;;19976:44:5;;;;;;;;20033:29;20048:13;20033:14;:29::i;:::-;20073:41;20088:10;20100:13;20073:14;:41::i;:::-;20125:51;20141:7;20150:10;20162:13;20125:15;:51::i;3335:102:6:-;-1:-1:-1;;;;;3415:14:6;3391:4;3415:14;;;;;;;;;;;;3335:102::o;899:53:1:-;947:5;784:6;940:12;;15262:2480:5;1621:39;;;;;;;1651:8;1621:39;;;;;;-1:-1:-1;;;;1639:10:5;;1630:7;;-1:-1:-1;;;;;;1630:7:5;;-1:-1:-1;;1621:39:5;;;;;-1:-1:-1;1651:8:5;;-1:-1:-1;1621:39:5;1:33:-1;99:1;81:16;;;74:27;1621:39:5;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;1621:39:5;;;;-1:-1:-1;1621:39:5;;-1:-1:-1;;;;1621:39:5;1726:6;;;;;;;1725:7;1717:31;;;;;-1:-1:-1;;;;;1717:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1717:31:5;;;;;;;;;;;;;;;1759:6;:13;;-1:-1:-1;;1759:13:5;;;;;-1:-1:-1;;;;;15565:17:5;;-1:-1:-1;15565:17:5;;;:8;:17;;;;;:23;1759:13;15565:23;15557:49;;;;;-1:-1:-1;;;;;15557:49:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;15557:49:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;15625:18:5;;;;;;:8;:18;;;;;:24;;;15617:50;;;;;-1:-1:-1;;;;;15617:50:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;15617:50:5;;;;;;;;;;;;;;;15686:11;;-1:-1:-1;;;15686:11:5;;;;15678:43;;;;;-1:-1:-1;;;;;15678:43:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15760:26:5;;;15734:23;15760:26;;;:8;:26;;;;;;15824:27;;;;;;;15895:17;;;;;15890:38;;784:6:1;1636:8;;15890:38:5;15872:14;:56;;15864:86;;;;;-1:-1:-1;;;;;15864:86:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;15864:86:5;;;;;;;;;;;;;;;15963:20;15986:315;16038:8;:16;;;16093:8;:15;;;16147:9;:17;;;16203:9;:16;;;16258:8;;15986:13;:315::i;:::-;15963:338;;16339:8;16320:15;:27;;16312:59;;;;;-1:-1:-1;;;;;16312:59:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;16400:313;16445:8;:16;;;16492:8;:15;;;16538:9;:17;;;16586:9;:16;;;16633:14;16678:8;;16400:14;:313::i;:::-;16384:329;;16749:11;16732:13;:28;;16724:53;;;;;-1:-1:-1;;;;;16724:53:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;16724:53:5;;;;;;;;;;;;;;;16809:37;16814:8;:16;;;16832:13;16809:4;:37::i;:::-;16790:8;:16;;:56;;;;16877:39;16882:9;:17;;;16901:14;16877:4;:39::i;:::-;16857:17;;;;:59;;;16994:16;;;17045:15;;;;;17147:16;;;;17198:8;;16946:291;;16857:59;17147:16;16946:13;:291::i;:::-;16929:308;;17274:15;17256:14;:33;;17248:61;;;;;-1:-1:-1;;;;;17248:61:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;17248:61:5;;;;;;;;;;;;;;;17346:8;17328:14;:26;;17320:54;;;;;-1:-1:-1;;;;;17320:54:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;17412:35;17417:13;17432:14;17412:4;:35::i;:::-;17393:15;:54;;17385:82;;;;;-1:-1:-1;;;;;17385:82:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;17385:82:5;;;;;;;;;;;;;;;17485:70;;;;;;;;;;;;;;-1:-1:-1;;;;;17485:70:5;;;;;;;;17494:10;;17485:70;;;;;;;;;;;17568:51;17584:7;17593:10;17605:13;17568:15;:51::i;:::-;17630:53;17646:8;17656:10;17668:14;17630:15;:53::i;:::-;-1:-1:-1;;1795:6:5;:14;;-1:-1:-1;;1795:14:5;;;-1:-1:-1;15262:2480:5;;;;-1:-1:-1;15262:2480:5;-1:-1:-1;;;;15262:2480:5:o;12768:2486::-;1621:39;;;;;;;1651:8;1621:39;;;;;;-1:-1:-1;;;;1639:10:5;;1630:7;;-1:-1:-1;;;;;;1630:7:5;;-1:-1:-1;;1621:39:5;;;;;-1:-1:-1;1651:8:5;;-1:-1:-1;1621:39:5;1:33:-1;99:1;81:16;;;74:27;1621:39:5;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;1621:39:5;;;;-1:-1:-1;1621:39:5;;-1:-1:-1;;;;1621:39:5;1726:6;;;;;;;1725:7;1717:31;;;;;-1:-1:-1;;;;;1717:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1717:31:5;;;;;;;;;;;;;;;1759:6;:13;;-1:-1:-1;;1759:13:5;;;;;-1:-1:-1;;;;;13072:17:5;;-1:-1:-1;13072:17:5;;;:8;:17;;;;;:23;1759:13;13072:23;13064:49;;;;;-1:-1:-1;;;;;13064:49:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;13064:49:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;13132:18:5;;;;;;:8;:18;;;;;:24;;;13124:50;;;;;-1:-1:-1;;;;;13124:50:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;13124:50:5;;;;;;;;;;;;;;;13193:11;;-1:-1:-1;;;13193:11:5;;;;13185:43;;;;;-1:-1:-1;;;;;13185:43:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13267:26:5;;;13241:23;13267:26;;;:8;:26;;;;;;13331:27;;;;;;;13401:16;;;;13396:36;;-1:-1:-1;784:6:1;1579:8;;13396:36:5;13379:13;:53;;13371:82;;;;;-1:-1:-1;;;;;13371:82:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;13371:82:5;;;;;;;;;;;;;;;13466:20;13489:315;13541:8;:16;;;13596:8;:15;;;13650:9;:17;;;13706:9;:16;;;13761:8;;13489:13;:315::i;:::-;13466:338;;13842:8;13823:15;:27;;13815:59;;;;;-1:-1:-1;;;;;13815:59:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;13904:312;13949:8;:16;;;13996:8;:15;;;14042:9;:17;;;14090:9;:16;;;14137:13;14181:8;;13904:14;:312::i;:::-;13887:329;;14253:12;14235:14;:30;;14227:56;;;;;-1:-1:-1;;;;;14227:56:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;14227:56:5;;;;;;;;;;;;;;;14315:37;14320:8;:16;;;14338:13;14315:4;:37::i;:::-;14296:8;:16;;:56;;;;14383:39;14388:9;:17;;;14407:14;14383:4;:39::i;:::-;14363:17;;;;:59;;;14500:16;;;14551:15;;;;;14653:16;;;;14704:8;;14452:291;;14363:59;14653:16;14452:13;:291::i;:::-;14435:308;;14780:15;14762:14;:33;;14754:61;;;;;-1:-1:-1;;;;;14754:61:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;14754:61:5;;;;;;;;;;;;;;;14857:8;14839:14;:26;;14831:54;;;;;-1:-1:-1;;;;;14831:54:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;14923:35;14928:13;14943:14;14923:4;:35::i;:::-;14904:15;:54;;14896:82;;;;;-1:-1:-1;;;;;14896:82:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;14896:82:5;;;;;;;;;;;;;;;14996:70;;;;;;;;;;;;;;-1:-1:-1;;;;;14996:70:5;;;;;;;;15005:10;;14996:70;;;;;;;;;;;15079:51;15095:7;15104:10;15116:13;15079:15;:51::i;:::-;15141:53;15157:8;15167:10;15179:14;15141:15;:53::i;13460:1285:3:-;13707:17;13798:21;13822:33;13827:14;13843:11;13822:4;:33::i;:::-;13798:57;;13938:8;13949:28;784:6:1;13960:16:3;13949:4;:28::i;:::-;13938:39;;13988:8;13999:18;14004:3;14009:7;13999:4;:18::i;:::-;13988:29;;14029:32;14064:37;14069:14;14085:15;784:6:1;14096:3:3;14085:4;:15::i;14064:37::-;14029:72;;14114:23;14140:50;14145:15;14162:27;14140:4;:50::i;:::-;14114:76;;14201:18;14222:41;14227:18;14247:15;14222:4;:41::i;:::-;14201:62;;14343:14;14360:37;14365:13;14380:16;14360:4;:37::i;:::-;14343:54;;14408:18;14429:27;14434:9;14445:10;14429:4;:27::i;:::-;14408:48;;14467:29;14499:31;14504:10;14516:13;14499:4;:31::i;:::-;14467:63;;14655:52;14660:24;14686:20;784:6:1;1057:1;14686:4:3;:20::i;14655:52::-;14640:67;-1:-1:-1;;;;;;;;;;13460:1285:3;;;;;;;;:::o;6581:1167::-;6825:18;7109:21;7133:32;7138:13;7153:11;7133:4;:32::i;:::-;7109:56;;7176:8;7187:43;7192:28;784:6:1;7203:16:3;7192:4;:28::i;:::-;7222:7;7187:4;:43::i;:::-;7176:54;;7242:26;7271:36;7276:13;7291:15;784:6:1;7302:3:3;7291:4;:15::i;:::-;7271:4;:36::i;:::-;7242:65;;7320:22;7345:43;7350:14;7366:21;7345:4;:43::i;:::-;7320:68;;7399:17;7419:39;7424:17;7443:14;7419:4;:39::i;:::-;7399:59;;7539:14;7556:36;7561:12;7575:16;7556:4;:36::i;:::-;7539:53;;7603:18;7624:27;7629:9;7640:10;7624:4;:27::i;:::-;7603:48;;7678:31;7683:13;7698:10;7678:4;:31::i;:::-;7662:47;6581:1167;-1:-1:-1;;;;;;;;;;;;;;6581:1167:3:o;1233:54:1:-;1281:6;784;1274:13;;11078:1263:3;11323:19;11360:21;11384:33;11389:14;11405:11;11384:4;:33::i;:::-;11360:57;;11525:29;11557:40;11562:12;11576:20;784:6:1;1057:1;11576:4:3;:20::i;11557:40::-;11525:72;;11608:18;11629:42;11634:10;11646:24;11629:4;:42::i;:::-;11608:63;;11682:14;11699:31;11704:13;11719:10;11699:4;:31::i;:::-;11682:48;;11803:18;11824:45;11829:9;11840:28;784:6:1;11851:16:3;11840:4;:28::i;:::-;11824:4;:45::i;:::-;11803:66;;11880:23;11906:36;11911:13;11926:15;11906:4;:36::i;:::-;11880:62;;11955:32;11990:41;11995:15;12012:18;11990:4;:41::i;:::-;11955:76;;12168:8;12179:43;12184:28;784:6:1;12195:16:3;12184:4;:28::i;12179:43::-;12168:54;;12251:50;12256:27;12285:15;784:6:1;12296:3:3;12285:4;:15::i;9449:225:5:-;1621:39;;;;;;;1651:8;1621:39;;;;;;1639:10;;-1:-1:-1;1630:7:5;;-1:-1:-1;;;;;;1630:7:5;;-1:-1:-1;;1651:8:5;1621:39;;;;-1:-1:-1;1651:8:5;;-1:-1:-1;1621:39:5;1:33:-1;99:1;81:16;;;74:27;1621:39:5;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;1621:39:5;;;;-1:-1:-1;1621:39:5;;-1:-1:-1;;;;1621:39:5;1726:6;;;;;;;1725:7;1717:31;;;;;-1:-1:-1;;;;;1717:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1717:31:5;;;;;;;;;;;;;;;1759:6;:13;;-1:-1:-1;;1759:13:5;;;;;-1:-1:-1;;;;;9552:15:5;;-1:-1:-1;9552:15:5;;;:8;:15;;;;;:21;1759:13;9552:21;9544:47;;;;;-1:-1:-1;;;;;9544:47:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;9544:47:5;;;;;;;;;;;;;;;9628:38;;;;;;9660:4;9628:38;;;;;;-1:-1:-1;;;;;9628:23:5;;;;;:38;;;;;;;;;;;;;;:23;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;9628:38:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9628:38:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9628:38:5;-1:-1:-1;;;;;9602:15:5;;;;;;;;:8;9628:38;9602:15;;;;:23;;:64;1795:6;:14;;-1:-1:-1;;1795:14:5;;;9449:225::o;2754:111::-;2847:10;;;;2754:111;:::o;5026:202::-;1621:39;;;;;;;1651:8;1621:39;;;;;;1639:10;;-1:-1:-1;1630:7:5;;-1:-1:-1;;;;;;1630:7:5;;-1:-1:-1;;1651:8:5;1621:39;;;;-1:-1:-1;1651:8:5;;-1:-1:-1;1621:39:5;1:33:-1;99:1;81:16;;;74:27;1621:39:5;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;1621:39:5;;;;-1:-1:-1;1621:39:5;;-1:-1:-1;;;;1621:39:5;1726:6;;;;;;;1725:7;1717:31;;;;;-1:-1:-1;;;;;1717:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1717:31:5;;;;;;;;;;;;;;;1759:6;:13;;;-1:-1:-1;;1759:13:5;;;;;;5154:11;;-1:-1:-1;;;;;5154:11:5;5140:10;:25;5132:56;;;;;-1:-1:-1;;;;;5132:56:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;5132:56:5;;;;;;;;;;;;;;;5199:11;:21;;-1:-1:-1;;;;;;5199:21:5;-1:-1:-1;;;;;5199:21:5;;;;;;;;;;1795:6;:14;;-1:-1:-1;;1795:14:5;;;5026:202::o;3723:148::-;1867:6;;3822:4;;1867:6;;;;;1866:7;1858:31;;;;;-1:-1:-1;;;;;1858:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1858:31:5;;;;;;;;;;;;;;;-1:-1:-1;3851:12:5;;3723:148;:::o;1296:51:1:-;1337:10;1296:51;:::o;3489:226:5:-;1867:6;;3596:4;;1867:6;;;;;1866:7;1858:31;;;;;-1:-1:-1;;;;;1858:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1858:31:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;3628:15:5;;;;;;:8;:15;;;;;:21;;;3620:47;;;;;-1:-1:-1;;;;;3620:47:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;3620:47:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3685:15:5;;;;;:8;:15;;;;;-1:-1:-1;3685:22:5;;;3489:226::o;3022:87:6:-;3094:7;3087:14;;;;;;;;;;;;;-1:-1:-1;;3087:14:6;;;;;;;;;;;;;;;;;;;;;;;;;;3061:13;;3087:14;;3094:7;;3087:14;;;3094:7;3087:14;;;;;;;;;;;;;;;;;;;;;;;;1594:59:1;1635:18;1594:59;:::o;817:121:0:-;909:17;817:121;:::o;1663:509:3:-;1875:14;1907:10;1920:35;1925:14;1941:13;1920:4;:35::i;:::-;1907:48;;1966:10;1979:37;1984:15;2001:14;1979:4;:37::i;:::-;1966:50;;2027:10;2040:18;2045:5;2052;2040:4;:18::i;:::-;2027:31;;2069:10;2082:31;784:6:1;2093:19:3;784:6:1;2104:7:3;2093:4;:19::i;2082:31::-;2069:44;;2145:18;2150:5;2157;2145:4;:18::i;:::-;2133:30;1663:509;-1:-1:-1;;;;;;;;;;1663:509:3:o;4398:133:6:-;4457:4;4474:27;4480:10;4492:3;4497;4474:5;:27::i;:::-;-1:-1:-1;4519:4:6;4398:133;;;;:::o;11636:1122:5:-;1621:39;;;;;;;1651:8;1621:39;;;;;;1639:10;;-1:-1:-1;1630:7:5;;-1:-1:-1;;;;;;1630:7:5;;-1:-1:-1;;1651:8:5;1621:39;;;;-1:-1:-1;1651:8:5;;-1:-1:-1;1621:39:5;1:33:-1;99:1;81:16;;;74:27;1621:39:5;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;1621:39:5;;;;-1:-1:-1;1621:39:5;;-1:-1:-1;;;;1621:39:5;1726:6;;;;;;;1725:7;1717:31;;;;;-1:-1:-1;;;;;1717:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1717:31:5;;;;;;;;;;;;;;;1759:6;:13;;-1:-1:-1;;1759:13:5;;;;;11778:10;;1759:13;11778:10;11770:40;;;;;-1:-1:-1;;;;;11770:40:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;11770:40:5;;;;;;;;;;;;;;;11823:14;11840:13;:11;:13::i;:::-;11823:30;;11864:12;11879:28;11884:12;1057:1:1;11879:4:5;:28::i;:::-;11864:43;;11918:20;11941:27;11946:12;11960:7;11941:4;:27::i;:::-;11918:50;;11979:10;11992:32;11997:15;12014:9;11992:4;:32::i;:::-;11979:45;-1:-1:-1;12043:10:5;12035:38;;;;;-1:-1:-1;;;;;12035:38:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;12035:38:5;;;;;;;;;;;;;;;12086:40;12101:10;12113:12;12086:14;:40::i;:::-;12152:8;;12137:33;;12152:8;;;-1:-1:-1;;;;;12152:8:5;12162:7;12137:14;:33::i;:::-;12181:31;12196:15;12181:14;:31::i;:::-;12230:6;12225:524;12246:7;:14;12242:18;;12225:524;;;12282:9;12294:7;12302:1;12294:10;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12294:10:5;12330:11;;;:8;:11;;;;;;:19;;;12294:10;;-1:-1:-1;12330:19:5;12386:16;12391:5;12330:19;12386:4;:16::i;:::-;12364:38;-1:-1:-1;12425:19:5;12417:47;;;;;-1:-1:-1;;;;;12417:47:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;12417:47:5;;;;;;;;;;;;;;;12505:13;;12519:1;12505:16;;;;;;;;;;;;;12487:14;:34;;12479:60;;;;;-1:-1:-1;;;;;12479:60:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;12479:60:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;12581:11:5;;;;;;:8;:11;;;;;:19;;;12576:41;;12602:14;12576:4;:41::i;:::-;-1:-1:-1;;;;;12554:11:5;;;;;;:8;:11;;;;;;;;:19;;:63;;;;12637:39;;;;;;;-1:-1:-1;;12554:11:5;;12646:10;;12637:39;;12554:11;;-1:-1:-1;12554:11:5;-1:-1:-1;;;;;12637:39:5;;;;;;;;;12691:46;12707:1;12710:10;12722:14;12691:15;:46::i;:::-;-1:-1:-1;;;12262:3:5;;12225:524;;;-1:-1:-1;;1795:6:5;:14;;-1:-1:-1;;1795:14:5;;;-1:-1:-1;;;;;;11636:1122:5:o;848:42:1:-;889:1;848:42;:::o;799:::-;840:1;799:42;:::o;1356:46::-;1397:5;1356:46;:::o;3190:683:3:-;3432:19;3469:16;3488:35;3493:13;3508:14;3488:4;:35::i;:::-;3469:54;;3534:15;3552:19;784:6:1;3563:7:3;3552:4;:19::i;:::-;3534:37;;3595:31;3600:13;3615:10;3595:4;:31::i;:::-;3582:44;;3637:6;3646:54;3651:14;3667:32;3672:14;3688:10;3667:4;:32::i;3646:54::-;3637:63;;3711:8;3722:20;3727:1;3730:11;3722:4;:20::i;:::-;3711:31;;3753:8;3764:15;784:6:1;3775:3:3;3764:4;:15::i;:::-;3753:26;;3807;3812:15;3829:3;3807:4;:26::i;:::-;3790:43;3190:683;-1:-1:-1;;;;;;;;;;;;3190:683:3:o;959:50:1:-;1007:2;784:6;1000:9;;1409:59;1450:18;1409:59;:::o;3280:201:5:-;1867:6;;3367:23;;1867:6;;;;;1866:7;1858:31;;;;;-1:-1:-1;;;;;1858:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1858:31:5;;;;;;;;;;;;;;;3416:10;;;;3408:40;;;;;-1:-1:-1;;;;;3408:40:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;3408:40:5;;;;;;;;;;;;;;;3466:7;3459:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3459:14:5;;;-1:-1:-1;3459:14:5;;;;;;;;;;;;;;;;;;3280:201;:::o;1016:42:1:-;1057:1;1016:42;:::o;3129:143:5:-;1867:6;;3209:23;;1867:6;;;;;1866:7;1858:31;;;;;-1:-1:-1;;;;;1858:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1858:31:5;;;;;;;;;;;;;;3004:117;3099:7;:14;3004:117;:::o;8323:1041::-;1621:39;;;;;;;1651:8;1621:39;;;;;;1639:10;;-1:-1:-1;1630:7:5;;-1:-1:-1;;;;;;1630:7:5;;-1:-1:-1;;1651:8:5;1621:39;;;;-1:-1:-1;1651:8:5;;-1:-1:-1;1621:39:5;1:33:-1;99:1;81:16;;;74:27;1621:39:5;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;1621:39:5;;;;-1:-1:-1;1621:39:5;;-1:-1:-1;;;;1621:39:5;1726:6;;;;;;;1725:7;1717:31;;;;;-1:-1:-1;;;;;1717:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1717:31:5;;;;;;;;;;;;;;;1759:6;:13;;;-1:-1:-1;;1759:13:5;;;;;;8444:11;;-1:-1:-1;;;;;8444:11:5;8430:10;:25;8422:56;;;;;-1:-1:-1;;;;;8422:56:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;8422:56:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;8497:15:5;;;;;;:8;:15;;;;;:21;;;8489:47;;;;;-1:-1:-1;;;;;8489:47:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;8489:47:5;;;;;;;;;;;;;;;8556:10;;;;8555:11;8547:40;;;;;-1:-1:-1;;;;;8547:40:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;8547:40:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;8620:15:5;;8600:17;8620:15;;;:8;:15;;;;;:23;;;;8674:28;8620:23;8600:17;8674:4;:28::i;:::-;8735:12;;-1:-1:-1;;;;;8749:15:5;;;;;;:8;:15;;;;;-1:-1:-1;8749:22:5;;8654:48;;-1:-1:-1;8730:42:5;;:4;:42::i;:::-;8715:12;:57;-1:-1:-1;;;;;8895:15:5;;8882:10;8895:15;;;:8;:15;;;;;-1:-1:-1;8895:21:5;;8939:7;:14;;-1:-1:-1;;8939:18:5;;;:7;:18;;8985:13;;;;;;;;;;;;;;;;8968:7;:14;;-1:-1:-1;;;;;8985:13:5;;;;8976:5;;8968:14;;;;;;;;;;;;;;:30;;-1:-1:-1;;;;;;8968:30:5;-1:-1:-1;;;;;8968:30:5;;;;;;;;;;;9018:7;:14;;9042:5;;9009:8;;8968:14;;9042:5;;9018:14;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9018:14:5;9009:24;;;;;;;;;;;;-1:-1:-1;9009:30:5;:38;9058:7;:13;;;;;;;;;;;;;;;-1:-1:-1;;9058:13:5;;;;;;;-1:-1:-1;;;;;;9058:13:5;;;;;;;;;9100:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9082:15:5;;;;:8;:15;;;;;;;:136;;;;-1:-1:-1;;9082:136:5;;;;;;;;;-1:-1:-1;9082:136:5;;;;-1:-1:-1;9082:136:5;;;;;;;;;9231:68;9082:15;9254:10;9266:32;9271:12;9285;9266:4;:32::i;9231:68::-;9333:8;;9310:46;;9326:5;;9333:8;;;-1:-1:-1;;;;;9333:8:5;9343:12;9310:15;:46::i;4386:128::-;1867:6;;4469:4;;1867:6;;;;;1866:7;1858:31;;;;;-1:-1:-1;;;;;1858:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1858:31:5;;;;;;;;;;;;;;;-1:-1:-1;4498:8:5;;4386:128;:::o;3733:252:6:-;3863:10;3800:4;3852:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;3852:27:6;;;;;;;;;;3847:38;;3881:3;3847:4;:38::i;:::-;3828:10;3817:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;3817:27:6;;;;;;;;;;;:68;;;3901:54;;;;;;;-1:-1:-1;;3817:27:6;;3901:54;;;;3817:22;-1:-1:-1;3817:22:6;-1:-1:-1;;;;;3901:54:6;;;;;;;;;;-1:-1:-1;3973:4:6;3733:252;;;;:::o;3207:120::-;-1:-1:-1;;;;;3299:15:6;;;3275:4;3299:15;;;-1:-1:-1;3299:15:6;;;;;;;;:20;;;;;;;;;;;;;3207:120::o;5936:732:5:-;1621:39;;;;;;;1651:8;1621:39;;;;;;1639:10;;-1:-1:-1;1630:7:5;;-1:-1:-1;;;;;;1630:7:5;;-1:-1:-1;;1651:8:5;1621:39;;;;-1:-1:-1;1651:8:5;;-1:-1:-1;1621:39:5;1:33:-1;99:1;81:16;;;74:27;1621:39:5;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;1621:39:5;;;;-1:-1:-1;1621:39:5;;-1:-1:-1;;;;1621:39:5;6144:11;;-1:-1:-1;;;;;6144:11:5;6130:10;:25;6122:56;;;;;-1:-1:-1;;;;;6122:56:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;6122:56:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;6198:15:5;;;;;;:8;:15;;;;;:21;;;6197:22;6189:47;;;;;-1:-1:-1;;;;;6189:47:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;6256:10;;;;6255:11;6247:40;;;;;-1:-1:-1;;;;;6247:40:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;6247:40:5;;;;;;;;;;;;;;;6308:7;:14;889:1:1;-1:-1:-1;6300:60:5;;;;;-1:-1:-1;;;;;6300:60:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;6391:198;;;;;;;;6420:4;6391:198;;;6446:7;:14;;6391:198;;;;;;;-1:-1:-1;6391:198:5;;;;;;;;;;;;-1:-1:-1;;;;;6373:15:5;;;;;:8;:15;;;;;;:216;;;;-1:-1:-1;;6373:216:5;;;;;;;;;;;;;;;-1:-1:-1;6373:216:5;;;;;;;;;;;;;27:10:-1;;23:18;;;45:23;;6600:19:5;;;;;;;-1:-1:-1;;;;;;6600:19:5;;;;;;6630:30;6373:15;6644:7;6653:6;6630;:30::i;:::-;5936:732;;;:::o;1538:49:1:-;1586:1;784:6;1579:8;;3879:275:5;1867:6;;3984:4;;1867:6;;;;;1866:7;1858:31;;;;;-1:-1:-1;;;;;1858:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1858:31:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;4016:15:5;;;;;;:8;:15;;;;;:21;;;4008:47;;;;;-1:-1:-1;;;;;4008:47:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;4008:47:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;4080:15:5;;4066:11;4080:15;;;:8;:15;;;;;-1:-1:-1;4080:22:5;;4133:12;;4120:26;;4080:22;;4120:4;:26::i;:::-;4113:33;3879:275;-1:-1:-1;;;3879:275:5:o;4162:216::-;1867:6;;4258:4;;1867:6;;;;;1866:7;1858:31;;;;;-1:-1:-1;;;;;1858:31:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;1858:31:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;4290:15:5;;;;;;:8;:15;;;;;:21;;;4282:47;;;;;-1:-1:-1;;;;;4282:47:5;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;4282:47:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4347:15:5;;;;;:8;:15;;;;;:23;;;;4162:216::o;4891:672:3:-;5134:18;5170:16;5189:35;5194:14;5210:13;5189:4;:35::i;:::-;5170:54;;5235:9;5247:37;5252:15;5269:14;5247:4;:37::i;:::-;5235:49;;5295:6;5304:27;5309:15;5326:4;5304;:27::i;:::-;5295:36;;5342:8;5353:20;5358:1;5361:11;5353:4;:20::i;:::-;5342:31;;5390:15;5395:3;784:6:1;5390:4:3;:15::i;:::-;5384:21;;5432:19;784:6:1;5443:7:3;5432:4;:19::i;:::-;5416:35;;5478:46;5483:25;5488:14;5504:3;5483:4;:25::i;:::-;5510:13;5478:4;:46::i;:::-;5462:62;4891:672;-1:-1:-1;;;;;;;;;;;4891:672:3:o;2633:113:5:-;2727:11;;-1:-1:-1;;;2727:11:5;;;;;2633:113::o;1612:311:4:-;1683:4;1715:5;;;1739:6;;;:21;;;1759:1;1754;1749:2;:6;;;;;;:11;1739:21;1731:50;;;;;-1:-1:-1;;;;;1731:50:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;1808:8;1802:15;;1836:8;;;;1828:37;;;;;-1:-1:-1;;;;;1828:37:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;1876:7;784:6:1;1886:2:4;:9;;;1612:311;-1:-1:-1;;;;;;1612:311:4:o;1171:202::-;1242:4;1265:6;1273:9;1286:14;1295:1;1298;1286:8;:14::i;:::-;1264:36;;;;1320:4;1319:5;1311:35;;;;;-1:-1:-1;;;;;1311:35:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1364:1:4;1171:202;-1:-1:-1;;;1171:202:4:o;23551:112:5:-;23636:19;23642:4;23648:6;23636:5;:19::i;:::-;23551:112;;:::o;23887:92::-;23958:13;23964:6;23958:5;:13::i;:::-;23887:92;:::o;23671:108::-;23754:17;23760:2;23764:6;23754:5;:17::i;23347:196::-;23458:34;;;;;;-1:-1:-1;;;;;23458:34:5;;;;;;;;;;;;;;;-1:-1:-1;;23458:22:5;;;;;:34;;;;;;;;;;;;;;-1:-1:-1;23458:22:5;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;23458:34:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23458:34:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23458:34:5;;-1:-1:-1;23458:34:5;23503:32;;;;;-1:-1:-1;;;;;23503:32:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;23347:196;;;;:::o;2261:273:6:-;-1:-1:-1;;;;;2340:13:6;;:8;:13;;;;;;;;;;;-1:-1:-1;;2340:20:6;2332:53;;;;;-1:-1:-1;;;;;2332:53:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2417:13:6;;:8;:13;;;;;;;;;;;2412:24;;2432:3;2412:4;:24::i;:::-;-1:-1:-1;;;;;2396:13:6;;;:8;:13;;;;;;;;;;;:40;;;;2468:13;;;;;;;2463:24;;2483:3;2463:4;:24::i;:::-;-1:-1:-1;;;;;2447:13:6;;;:8;:13;;;;;;;;;;;:40;;;;2503:23;;;;;;;-1:-1:-1;;2447:13:6;;2503:23;;;;;;;;2447:8;:13;-1:-1:-1;2447:8:6;-1:-1:-1;;;;;2503:23:6;;;;;;;;2261:273;;;:::o;983:180:4:-;1054:4;1085:5;;;1109:6;;;;1101:35;;;;;-1:-1:-1;;;;;1101:35:4;;;;;;;;;;;;;;;;;;;;;;;;;;;23120:219:5;23233:55;;;;;;-1:-1:-1;;;;;23233:55:5;;;;;;;23274:4;23233:55;;;;;;;;;;;;-1:-1:-1;;23233:26:5;;;;;:55;;;;;;;;;;;;;;-1:-1:-1;23233:26:5;:55;;;5:2:-1;;;;30:1;27;20:12;23787:92:5;23858:13;23864:6;23858:5;:13::i;1931:387:4:-;2002:4;2032:6;2024:31;;;;;-1:-1:-1;;;;;2024:31:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;784:6:1;2076:8:4;;2103:6;;;:24;;;784:6:1;2118:1:4;2113:2;:6;;;;;;:14;2103:24;2095:53;;;;;-1:-1:-1;;;;;2095:53:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;2196:1;2192:5;;2186:12;;2217:8;;;;2209:37;;;;;-1:-1:-1;;;;;2209:37:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;2274:7;2289:1;2284:2;:6;;;;2821:555;2897:4;1397:5:1;2927:4:4;:21;;2919:55;;;;;-1:-1:-1;;;;;2919:55:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;1450:18:1;2993:21:4;;;2985:56;;;;;-1:-1:-1;;;;;2985:56:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;3054:10;3068:11;3075:3;3068:6;:11::i;:::-;3054:25;;3093:11;3107:16;3112:3;3117:5;3107:4;:16::i;:::-;3093:30;;3136:13;3152:24;3158:4;3164:11;3169:5;3164:4;:11::i;:::-;3152:5;:24::i;:::-;3136:40;-1:-1:-1;3193:11:4;3189:59;;3228:8;-1:-1:-1;3221:15:4;;-1:-1:-1;;3221:15:4;3189:59;3260:18;3281:40;3292:4;3298:6;1516:13:1;3281:10:4;:40::i;:::-;3260:61;;3339:29;3344:8;3354:13;3339:4;:29::i;:::-;3332:36;2821:555;-1:-1:-1;;;;;;;2821:555:4:o;1381:223::-;1456:4;1462;1493:1;1488;:6;1484:113;;-1:-1:-1;;1519:5:4;;;1526;1511:21;;1484:113;-1:-1:-1;;1573:5:4;;;1580:4;1484:113;1381:223;;;;;:::o;2644:98:6:-;2703:31;2709:4;2723;2730:3;2703:5;:31::i;1961:292::-;2031:4;2014:8;:23;;;;;;;;;;;:30;-1:-1:-1;2014:30:6;2006:63;;;;;-1:-1:-1;;;;;2006:63:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;2128:4;2111:8;:23;;;;;;;;;;;2106:34;;2136:3;2106:4;:34::i;:::-;2097:4;2080:8;:23;;;;;;;;;;:60;2171:12;;2166:23;;2185:3;2166:4;:23::i;:::-;2151:12;:38;2205:40;;;;;;;;2237:1;;2222:4;;-1:-1:-1;;;;;;;;;;;2205:40:6;;;;;;;;1961:292;:::o;2542:94::-;2599:29;2613:4;2620:2;2624:3;2599:5;:29::i;1735:218::-;1828:4;1811:8;:23;;;;;;;;;;;1806:34;;1836:3;1806:4;:34::i;:::-;1797:4;1780:8;:23;;;;;;;;;;:60;1871:12;;1866:23;;1885:3;1866:4;:23::i;:::-;1851:12;:38;1905:40;;;;;;;;1934:4;;1922:1;;-1:-1:-1;;;;;;;;;;;1905:40:6;;;;;;;;1735:218;:::o;859:116:4:-;924:4;784:6:1;953:7:4;958:1;953:4;:7::i;:::-;:14;;859:116;-1:-1:-1;;859:116:4:o;742:109::-;784:6:1;835:8:4;;;742:109::o;2346:314::-;2418:4;;2453:1;2449;:5;:21;;784:6:1;2449:21:4;;;2462:1;2449:21;2440:30;-1:-1:-1;2493:1:4;2488:6;;;;2483:151;2496:6;;2483:151;;2531:10;2536:1;2539;2531:4;:10::i;:::-;2527:14;-1:-1:-1;2566:1:4;2562;:5;:10;2558:65;;2597:10;2602:1;2605;2597:4;:10::i;:::-;2593:14;;2558:65;2509:1;2504:6;;;;2483:151;;3384:1080;3482:4;3537:3;3482:4;;3574:20;3583:4;784:6:1;3574:8:4;:20::i;:::-;3551:43;;-1:-1:-1;3551:43:4;-1:-1:-1;784:6:1;;3605:9:4;3939:1;3925:509;3950:9;3942:4;:17;3925:509;;3981:9;784:6:1;3993:1:4;:8;3981:20;;4017:6;4025:9;4038:29;4047:1;4050:16;4055:4;784:6:1;4050:4:4;:16::i;:::-;4038:8;:29::i;:::-;4016:51;;;;4089:22;4094:4;4100:10;4105:1;4108;4100:4;:10::i;4089:22::-;4082:29;;4133:16;4138:4;4144;4133;:16::i;:::-;4126:23;-1:-1:-1;4168:9:4;4164:20;;4179:5;;;;;4164:20;4205:4;4201:30;;;4222:9;;;4201:30;4250:4;4246:30;;;4267:9;;;4246:30;4295:8;4291:132;;;4330:15;4335:3;4340:4;4330;:15::i;:::-;4324:21;;4291:132;;;4392:15;4397:3;4402:4;4392;:15::i;:::-;4386:21;;4291:132;-1:-1:-1;;;3961:3:4;;3925:509;;;-1:-1:-1;4453:3:4;;3384:1080;-1:-1:-1;;;;;;;;;3384:1080:4:o",
"source": "// This program is free software: you can redistribute it and/or modify\r\n// it under the terms of the GNU General Public License as published by\r\n// the Free Software Foundation, either version 3 of the License, or\r\n// (at your option) any later version.\r\n\r\n// This program is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n// GNU General Public License for more details.\r\n\r\n// You should have received a copy of the GNU General Public License\r\n// along with this program. If not, see <http://www.gnu.org/licenses/>.\r\n\r\npragma solidity 0.5.12;\r\n\r\nimport \"./BToken.sol\";\r\nimport \"./BMath.sol\";\r\n\r\ncontract BPool is BBronze, BToken, BMath {\r\n\r\n struct Record {\r\n bool bound; // is token bound to pool\r\n uint index; // private\r\n uint denorm; // denormalized weight\r\n uint balance;\r\n }\r\n\r\n event LOG_SWAP(\r\n address indexed caller,\r\n address indexed tokenIn,\r\n address indexed tokenOut,\r\n uint256 tokenAmountIn,\r\n uint256 tokenAmountOut\r\n );\r\n\r\n event LOG_JOIN(\r\n address indexed caller,\r\n address indexed tokenIn,\r\n uint256 tokenAmountIn\r\n );\r\n\r\n event LOG_EXIT(\r\n address indexed caller,\r\n address indexed tokenOut,\r\n uint256 tokenAmountOut\r\n );\r\n\r\n event LOG_CALL(\r\n bytes4 indexed sig,\r\n address indexed caller,\r\n bytes data\r\n ) anonymous;\r\n\r\n modifier _logs_() {\r\n emit LOG_CALL(msg.sig, msg.sender, msg.data);\r\n _;\r\n }\r\n\r\n modifier _lock_() {\r\n require(!_mutex, \"ERR_REENTRY\");\r\n _mutex = true;\r\n _;\r\n _mutex = false;\r\n }\r\n\r\n modifier _viewlock_() {\r\n require(!_mutex, \"ERR_REENTRY\");\r\n _;\r\n }\r\n\r\n bool private _mutex;\r\n\r\n address private _factory; // BFactory address to push token exitFee to\r\n address private _controller; // has CONTROL role\r\n bool private _publicSwap; // true if PUBLIC can call SWAP functions\r\n\r\n // `setSwapFee` and `finalize` require CONTROL\r\n // `finalize` sets `PUBLIC can SWAP`, `PUBLIC can JOIN`\r\n uint private _swapFee;\r\n bool private _finalized;\r\n\r\n address[] private _tokens;\r\n mapping(address=>Record) private _records;\r\n uint private _totalWeight;\r\n\r\n constructor() public {\r\n _controller = msg.sender;\r\n _factory = msg.sender;\r\n _swapFee = MIN_FEE;\r\n _publicSwap = false;\r\n _finalized = false;\r\n }\r\n\r\n function isPublicSwap()\r\n external view\r\n returns (bool)\r\n {\r\n return _publicSwap;\r\n }\r\n\r\n function isFinalized()\r\n external view\r\n returns (bool)\r\n {\r\n return _finalized;\r\n }\r\n\r\n function isBound(address t)\r\n external view\r\n returns (bool)\r\n {\r\n return _records[t].bound;\r\n }\r\n\r\n function getNumTokens()\r\n external view\r\n returns (uint) \r\n {\r\n return _tokens.length;\r\n }\r\n\r\n function getCurrentTokens()\r\n external view _viewlock_\r\n returns (address[] memory tokens)\r\n {\r\n return _tokens;\r\n }\r\n\r\n function getFinalTokens()\r\n external view\r\n _viewlock_\r\n returns (address[] memory tokens)\r\n {\r\n require(_finalized, \"ERR_NOT_FINALIZED\");\r\n return _tokens;\r\n }\r\n\r\n function getDenormalizedWeight(address token)\r\n external view\r\n _viewlock_\r\n returns (uint)\r\n {\r\n\r\n require(_records[token].bound, \"ERR_NOT_BOUND\");\r\n return _records[token].denorm;\r\n }\r\n\r\n function getTotalDenormalizedWeight()\r\n external view\r\n _viewlock_\r\n returns (uint)\r\n {\r\n return _totalWeight;\r\n }\r\n\r\n function getNormalizedWeight(address token)\r\n external view\r\n _viewlock_\r\n returns (uint)\r\n {\r\n\r\n require(_records[token].bound, \"ERR_NOT_BOUND\");\r\n uint denorm = _records[token].denorm;\r\n return bdiv(denorm, _totalWeight);\r\n }\r\n\r\n function getBalance(address token)\r\n external view\r\n _viewlock_\r\n returns (uint)\r\n {\r\n\r\n require(_records[token].bound, \"ERR_NOT_BOUND\");\r\n return _records[token].balance;\r\n }\r\n\r\n function getSwapFee()\r\n external view\r\n _viewlock_\r\n returns (uint)\r\n {\r\n return _swapFee;\r\n }\r\n\r\n function getController()\r\n external view\r\n _viewlock_\r\n returns (address)\r\n {\r\n return _controller;\r\n }\r\n\r\n function setSwapFee(uint swapFee)\r\n external\r\n _logs_\r\n _lock_\r\n { \r\n require(!_finalized, \"ERR_IS_FINALIZED\");\r\n require(msg.sender == _controller, \"ERR_NOT_CONTROLLER\");\r\n require(swapFee >= MIN_FEE, \"ERR_MIN_FEE\");\r\n require(swapFee <= MAX_FEE, \"ERR_MAX_FEE\");\r\n _swapFee = swapFee;\r\n }\r\n\r\n function setController(address manager)\r\n external\r\n _logs_\r\n _lock_\r\n {\r\n require(msg.sender == _controller, \"ERR_NOT_CONTROLLER\");\r\n _controller = manager;\r\n }\r\n\r\n function setPublicSwap(bool public_)\r\n external\r\n _logs_\r\n _lock_\r\n {\r\n require(!_finalized, \"ERR_IS_FINALIZED\");\r\n require(msg.sender == _controller, \"ERR_NOT_CONTROLLER\");\r\n _publicSwap = public_;\r\n }\r\n\r\n function finalize()\r\n external\r\n _logs_\r\n _lock_\r\n {\r\n require(msg.sender == _controller, \"ERR_NOT_CONTROLLER\");\r\n require(!_finalized, \"ERR_IS_FINALIZED\");\r\n require(_tokens.length >= MIN_BOUND_TOKENS, \"ERR_MIN_TOKENS\");\r\n\r\n _finalized = true;\r\n _publicSwap = true;\r\n\r\n _mintPoolShare(INIT_POOL_SUPPLY);\r\n _pushPoolShare(msg.sender, INIT_POOL_SUPPLY);\r\n }\r\n\r\n\r\n function bind(address token, uint balance, uint denorm)\r\n external\r\n _logs_\r\n // _lock_ Bind does not lock because it jumps to `rebind`, which does\r\n {\r\n require(msg.sender == _controller, \"ERR_NOT_CONTROLLER\");\r\n require(!_records[token].bound, \"ERR_IS_BOUND\");\r\n require(!_finalized, \"ERR_IS_FINALIZED\");\r\n\r\n require(_tokens.length < MAX_BOUND_TOKENS, \"ERR_MAX_TOKENS\");\r\n\r\n _records[token] = Record({\r\n bound: true,\r\n index: _tokens.length,\r\n denorm: 0, // balance and denorm will be validated\r\n balance: 0 // and set by `rebind`\r\n });\r\n _tokens.push(token);\r\n rebind(token, balance, denorm);\r\n }\r\n\r\n function rebind(address token, uint balance, uint denorm)\r\n public\r\n _logs_\r\n _lock_\r\n {\r\n\r\n require(msg.sender == _controller, \"ERR_NOT_CONTROLLER\");\r\n require(_records[token].bound, \"ERR_NOT_BOUND\");\r\n require(!_finalized, \"ERR_IS_FINALIZED\");\r\n\r\n require(denorm >= MIN_WEIGHT, \"ERR_MIN_WEIGHT\");\r\n require(denorm <= MAX_WEIGHT, \"ERR_MAX_WEIGHT\");\r\n require(balance >= MIN_BALANCE, \"ERR_MIN_BALANCE\");\r\n\r\n // Adjust the denorm and totalWeight\r\n uint oldWeight = _records[token].denorm;\r\n if (denorm > oldWeight) {\r\n _totalWeight = badd(_totalWeight, bsub(denorm, oldWeight));\r\n require(_totalWeight <= MAX_TOTAL_WEIGHT, \"ERR_MAX_TOTAL_WEIGHT\");\r\n } else if (denorm < oldWeight) {\r\n _totalWeight = bsub(_totalWeight, bsub(oldWeight, denorm));\r\n } \r\n _records[token].denorm = denorm;\r\n\r\n // Adjust the balance record and actual token balance\r\n uint oldBalance = _records[token].balance;\r\n _records[token].balance = balance;\r\n if (balance > oldBalance) {\r\n _pullUnderlying(token, msg.sender, bsub(balance, oldBalance));\r\n } else if (balance < oldBalance) {\r\n // In this case liquidity is being withdrawn, so charge EXIT_FEE\r\n uint tokenBalanceWithdrawn = bsub(oldBalance, balance);\r\n uint tokenExitFee = bmul(tokenBalanceWithdrawn, EXIT_FEE);\r\n _pushUnderlying(token, msg.sender, bsub(tokenBalanceWithdrawn, tokenExitFee));\r\n _pushUnderlying(token, _factory, tokenExitFee);\r\n }\r\n }\r\n\r\n function unbind(address token)\r\n external\r\n _logs_\r\n _lock_\r\n {\r\n\r\n require(msg.sender == _controller, \"ERR_NOT_CONTROLLER\");\r\n require(_records[token].bound, \"ERR_NOT_BOUND\");\r\n require(!_finalized, \"ERR_IS_FINALIZED\");\r\n\r\n uint tokenBalance = _records[token].balance;\r\n uint tokenExitFee = bmul(tokenBalance, EXIT_FEE);\r\n\r\n _totalWeight = bsub(_totalWeight, _records[token].denorm);\r\n\r\n // Swap the token-to-unbind with the last token,\r\n // then delete the last token\r\n uint index = _records[token].index;\r\n uint last = _tokens.length - 1;\r\n _tokens[index] = _tokens[last];\r\n _records[_tokens[index]].index = index;\r\n _tokens.pop();\r\n _records[token] = Record({\r\n bound: false,\r\n index: 0,\r\n denorm: 0,\r\n balance: 0\r\n });\r\n\r\n _pushUnderlying(token, msg.sender, bsub(tokenBalance, tokenExitFee));\r\n _pushUnderlying(token, _factory, tokenExitFee);\r\n }\r\n\r\n // Absorb any tokens that have been sent to this contract into the pool\r\n function gulp(address token)\r\n external\r\n _logs_\r\n _lock_\r\n {\r\n require(_records[token].bound, \"ERR_NOT_BOUND\");\r\n _records[token].balance = IERC20(token).balanceOf(address(this));\r\n }\r\n\r\n function getSpotPrice(address tokenIn, address tokenOut)\r\n external view\r\n _viewlock_\r\n returns (uint spotPrice)\r\n {\r\n require(_records[tokenIn].bound, \"ERR_NOT_BOUND\");\r\n require(_records[tokenOut].bound, \"ERR_NOT_BOUND\");\r\n Record storage inRecord = _records[tokenIn];\r\n Record storage outRecord = _records[tokenOut];\r\n return calcSpotPrice(inRecord.balance, inRecord.denorm, outRecord.balance, outRecord.denorm, _swapFee);\r\n }\r\n\r\n function getSpotPriceSansFee(address tokenIn, address tokenOut)\r\n external view\r\n _viewlock_\r\n returns (uint spotPrice)\r\n {\r\n require(_records[tokenIn].bound, \"ERR_NOT_BOUND\");\r\n require(_records[tokenOut].bound, \"ERR_NOT_BOUND\");\r\n Record storage inRecord = _records[tokenIn];\r\n Record storage outRecord = _records[tokenOut];\r\n return calcSpotPrice(inRecord.balance, inRecord.denorm, outRecord.balance, outRecord.denorm, 0);\r\n }\r\n\r\n function joinPool(uint poolAmountOut, uint[] calldata maxAmountsIn)\r\n external\r\n _logs_\r\n _lock_\r\n {\r\n require(_finalized, \"ERR_NOT_FINALIZED\");\r\n\r\n uint poolTotal = totalSupply();\r\n uint ratio = bdiv(poolAmountOut, poolTotal);\r\n require(ratio != 0, \"ERR_MATH_APPROX\");\r\n\r\n for (uint i = 0; i < _tokens.length; i++) {\r\n address t = _tokens[i];\r\n uint bal = _records[t].balance;\r\n uint tokenAmountIn = bmul(ratio, bal);\r\n require(tokenAmountIn != 0, \"ERR_MATH_APPROX\");\r\n require(tokenAmountIn <= maxAmountsIn[i], \"ERR_LIMIT_IN\");\r\n _records[t].balance = badd(_records[t].balance, tokenAmountIn);\r\n emit LOG_JOIN(msg.sender, t, tokenAmountIn);\r\n _pullUnderlying(t, msg.sender, tokenAmountIn);\r\n }\r\n _mintPoolShare(poolAmountOut);\r\n _pushPoolShare(msg.sender, poolAmountOut);\r\n }\r\n\r\n function exitPool(uint poolAmountIn, uint[] calldata minAmountsOut)\r\n external\r\n _logs_\r\n _lock_\r\n {\r\n require(_finalized, \"ERR_NOT_FINALIZED\");\r\n\r\n uint poolTotal = totalSupply();\r\n uint exitFee = bmul(poolAmountIn, EXIT_FEE);\r\n uint pAiAfterExitFee = bsub(poolAmountIn, exitFee);\r\n uint ratio = bdiv(pAiAfterExitFee, poolTotal);\r\n require(ratio != 0, \"ERR_MATH_APPROX\");\r\n\r\n _pullPoolShare(msg.sender, poolAmountIn);\r\n _pushPoolShare(_factory, exitFee);\r\n _burnPoolShare(pAiAfterExitFee);\r\n\r\n for (uint i = 0; i < _tokens.length; i++) {\r\n address t = _tokens[i];\r\n uint bal = _records[t].balance;\r\n uint tokenAmountOut = bmul(ratio, bal);\r\n require(tokenAmountOut != 0, \"ERR_MATH_APPROX\");\r\n require(tokenAmountOut >= minAmountsOut[i], \"ERR_LIMIT_OUT\");\r\n _records[t].balance = bsub(_records[t].balance, tokenAmountOut);\r\n emit LOG_EXIT(msg.sender, t, tokenAmountOut);\r\n _pushUnderlying(t, msg.sender, tokenAmountOut);\r\n }\r\n\r\n }\r\n\r\n\r\n function swapExactAmountIn(\r\n address tokenIn,\r\n uint tokenAmountIn,\r\n address tokenOut,\r\n uint minAmountOut,\r\n uint maxPrice\r\n )\r\n external\r\n _logs_\r\n _lock_\r\n returns (uint tokenAmountOut, uint spotPriceAfter)\r\n {\r\n\r\n require(_records[tokenIn].bound, \"ERR_NOT_BOUND\");\r\n require(_records[tokenOut].bound, \"ERR_NOT_BOUND\");\r\n require(_publicSwap, \"ERR_SWAP_NOT_PUBLIC\");\r\n\r\n Record storage inRecord = _records[address(tokenIn)];\r\n Record storage outRecord = _records[address(tokenOut)];\r\n\r\n require(tokenAmountIn <= bmul(inRecord.balance, MAX_IN_RATIO), \"ERR_MAX_IN_RATIO\");\r\n\r\n uint spotPriceBefore = calcSpotPrice(\r\n inRecord.balance,\r\n inRecord.denorm,\r\n outRecord.balance,\r\n outRecord.denorm,\r\n _swapFee\r\n );\r\n require(spotPriceBefore <= maxPrice, \"ERR_BAD_LIMIT_PRICE\");\r\n\r\n tokenAmountOut = calcOutGivenIn(\r\n inRecord.balance,\r\n inRecord.denorm,\r\n outRecord.balance,\r\n outRecord.denorm,\r\n tokenAmountIn,\r\n _swapFee\r\n );\r\n require(tokenAmountOut >= minAmountOut, \"ERR_LIMIT_OUT\");\r\n\r\n inRecord.balance = badd(inRecord.balance, tokenAmountIn);\r\n outRecord.balance = bsub(outRecord.balance, tokenAmountOut);\r\n\r\n spotPriceAfter = calcSpotPrice(\r\n inRecord.balance,\r\n inRecord.denorm,\r\n outRecord.balance,\r\n outRecord.denorm,\r\n _swapFee\r\n );\r\n require(spotPriceAfter >= spotPriceBefore, \"ERR_MATH_APPROX\"); \r\n require(spotPriceAfter <= maxPrice, \"ERR_LIMIT_PRICE\");\r\n require(spotPriceBefore <= bdiv(tokenAmountIn, tokenAmountOut), \"ERR_MATH_APPROX\");\r\n\r\n emit LOG_SWAP(msg.sender, tokenIn, tokenOut, tokenAmountIn, tokenAmountOut);\r\n\r\n _pullUnderlying(tokenIn, msg.sender, tokenAmountIn);\r\n _pushUnderlying(tokenOut, msg.sender, tokenAmountOut);\r\n\r\n return (tokenAmountOut, spotPriceAfter);\r\n }\r\n\r\n function swapExactAmountOut(\r\n address tokenIn,\r\n uint maxAmountIn,\r\n address tokenOut,\r\n uint tokenAmountOut,\r\n uint maxPrice\r\n )\r\n external\r\n _logs_\r\n _lock_ \r\n returns (uint tokenAmountIn, uint spotPriceAfter)\r\n {\r\n require(_records[tokenIn].bound, \"ERR_NOT_BOUND\");\r\n require(_records[tokenOut].bound, \"ERR_NOT_BOUND\");\r\n require(_publicSwap, \"ERR_SWAP_NOT_PUBLIC\");\r\n\r\n Record storage inRecord = _records[address(tokenIn)];\r\n Record storage outRecord = _records[address(tokenOut)];\r\n\r\n require(tokenAmountOut <= bmul(outRecord.balance, MAX_OUT_RATIO), \"ERR_MAX_OUT_RATIO\");\r\n\r\n uint spotPriceBefore = calcSpotPrice(\r\n inRecord.balance,\r\n inRecord.denorm,\r\n outRecord.balance,\r\n outRecord.denorm,\r\n _swapFee\r\n );\r\n require(spotPriceBefore <= maxPrice, \"ERR_BAD_LIMIT_PRICE\");\r\n\r\n tokenAmountIn = calcInGivenOut(\r\n inRecord.balance,\r\n inRecord.denorm,\r\n outRecord.balance,\r\n outRecord.denorm,\r\n tokenAmountOut,\r\n _swapFee\r\n );\r\n require(tokenAmountIn <= maxAmountIn, \"ERR_LIMIT_IN\");\r\n\r\n inRecord.balance = badd(inRecord.balance, tokenAmountIn);\r\n outRecord.balance = bsub(outRecord.balance, tokenAmountOut);\r\n\r\n spotPriceAfter = calcSpotPrice(\r\n inRecord.balance,\r\n inRecord.denorm,\r\n outRecord.balance,\r\n outRecord.denorm,\r\n _swapFee\r\n );\r\n require(spotPriceAfter >= spotPriceBefore, \"ERR_MATH_APPROX\");\r\n require(spotPriceAfter <= maxPrice, \"ERR_LIMIT_PRICE\");\r\n require(spotPriceBefore <= bdiv(tokenAmountIn, tokenAmountOut), \"ERR_MATH_APPROX\");\r\n\r\n emit LOG_SWAP(msg.sender, tokenIn, tokenOut, tokenAmountIn, tokenAmountOut);\r\n\r\n _pullUnderlying(tokenIn, msg.sender, tokenAmountIn);\r\n _pushUnderlying(tokenOut, msg.sender, tokenAmountOut);\r\n\r\n return (tokenAmountIn, spotPriceAfter);\r\n }\r\n\r\n\r\n function joinswapExternAmountIn(address tokenIn, uint tokenAmountIn, uint minPoolAmountOut)\r\n external\r\n _logs_\r\n _lock_\r\n returns (uint poolAmountOut)\r\n\r\n { \r\n require(_finalized, \"ERR_NOT_FINALIZED\");\r\n require(_records[tokenIn].bound, \"ERR_NOT_BOUND\");\r\n require(tokenAmountIn <= bmul(_records[tokenIn].balance, MAX_IN_RATIO), \"ERR_MAX_IN_RATIO\");\r\n\r\n Record storage inRecord = _records[tokenIn];\r\n\r\n poolAmountOut = calcPoolOutGivenSingleIn(\r\n inRecord.balance,\r\n inRecord.denorm,\r\n _totalSupply,\r\n _totalWeight,\r\n tokenAmountIn,\r\n _swapFee\r\n );\r\n\r\n require(poolAmountOut >= minPoolAmountOut, \"ERR_LIMIT_OUT\");\r\n\r\n inRecord.balance = badd(inRecord.balance, tokenAmountIn);\r\n\r\n emit LOG_JOIN(msg.sender, tokenIn, tokenAmountIn);\r\n\r\n _mintPoolShare(poolAmountOut);\r\n _pushPoolShare(msg.sender, poolAmountOut);\r\n _pullUnderlying(tokenIn, msg.sender, tokenAmountIn);\r\n\r\n return poolAmountOut;\r\n }\r\n\r\n function joinswapPoolAmountOut(address tokenIn, uint poolAmountOut, uint maxAmountIn)\r\n external\r\n _logs_\r\n _lock_\r\n returns (uint tokenAmountIn)\r\n {\r\n require(_finalized, \"ERR_NOT_FINALIZED\");\r\n require(_records[tokenIn].bound, \"ERR_NOT_BOUND\");\r\n\r\n Record storage inRecord = _records[tokenIn];\r\n\r\n tokenAmountIn = calcSingleInGivenPoolOut(\r\n inRecord.balance,\r\n inRecord.denorm,\r\n _totalSupply,\r\n _totalWeight,\r\n poolAmountOut,\r\n _swapFee\r\n );\r\n\r\n require(tokenAmountIn != 0, \"ERR_MATH_APPROX\");\r\n require(tokenAmountIn <= maxAmountIn, \"ERR_LIMIT_IN\");\r\n \r\n require(tokenAmountIn <= bmul(_records[tokenIn].balance, MAX_IN_RATIO), \"ERR_MAX_IN_RATIO\");\r\n\r\n inRecord.balance = badd(inRecord.balance, tokenAmountIn);\r\n\r\n emit LOG_JOIN(msg.sender, tokenIn, tokenAmountIn);\r\n\r\n _mintPoolShare(poolAmountOut);\r\n _pushPoolShare(msg.sender, poolAmountOut);\r\n _pullUnderlying(tokenIn, msg.sender, tokenAmountIn);\r\n\r\n return tokenAmountIn;\r\n }\r\n\r\n function exitswapPoolAmountIn(address tokenOut, uint poolAmountIn, uint minAmountOut)\r\n external\r\n _logs_\r\n _lock_\r\n returns (uint tokenAmountOut)\r\n {\r\n require(_finalized, \"ERR_NOT_FINALIZED\");\r\n require(_records[tokenOut].bound, \"ERR_NOT_BOUND\");\r\n\r\n Record storage outRecord = _records[tokenOut];\r\n\r\n tokenAmountOut = calcSingleOutGivenPoolIn(\r\n outRecord.balance,\r\n outRecord.denorm,\r\n _totalSupply,\r\n _totalWeight,\r\n poolAmountIn,\r\n _swapFee\r\n );\r\n\r\n require(tokenAmountOut >= minAmountOut, \"ERR_LIMIT_OUT\");\r\n \r\n require(tokenAmountOut <= bmul(_records[tokenOut].balance, MAX_OUT_RATIO), \"ERR_MAX_OUT_RATIO\");\r\n\r\n outRecord.balance = bsub(outRecord.balance, tokenAmountOut);\r\n\r\n uint exitFee = bmul(poolAmountIn, EXIT_FEE);\r\n\r\n emit LOG_EXIT(msg.sender, tokenOut, tokenAmountOut);\r\n\r\n _pullPoolShare(msg.sender, poolAmountIn);\r\n _burnPoolShare(bsub(poolAmountIn, exitFee));\r\n _pushPoolShare(_factory, exitFee);\r\n _pushUnderlying(tokenOut, msg.sender, tokenAmountOut);\r\n\r\n return tokenAmountOut;\r\n }\r\n\r\n function exitswapExternAmountOut(address tokenOut, uint tokenAmountOut, uint maxPoolAmountIn)\r\n external\r\n _logs_\r\n _lock_\r\n returns (uint poolAmountIn)\r\n {\r\n require(_finalized, \"ERR_NOT_FINALIZED\");\r\n require(_records[tokenOut].bound, \"ERR_NOT_BOUND\");\r\n require(tokenAmountOut <= bmul(_records[tokenOut].balance, MAX_OUT_RATIO), \"ERR_MAX_OUT_RATIO\");\r\n\r\n Record storage outRecord = _records[tokenOut];\r\n\r\n poolAmountIn = calcPoolInGivenSingleOut(\r\n outRecord.balance,\r\n outRecord.denorm,\r\n _totalSupply,\r\n _totalWeight,\r\n tokenAmountOut,\r\n _swapFee\r\n );\r\n\r\n require(poolAmountIn != 0, \"ERR_MATH_APPROX\");\r\n require(poolAmountIn <= maxPoolAmountIn, \"ERR_LIMIT_IN\");\r\n\r\n outRecord.balance = bsub(outRecord.balance, tokenAmountOut);\r\n\r\n uint exitFee = bmul(poolAmountIn, EXIT_FEE);\r\n\r\n emit LOG_EXIT(msg.sender, tokenOut, tokenAmountOut);\r\n\r\n _pullPoolShare(msg.sender, poolAmountIn);\r\n _burnPoolShare(bsub(poolAmountIn, exitFee));\r\n _pushPoolShare(_factory, exitFee);\r\n _pushUnderlying(tokenOut, msg.sender, tokenAmountOut); \r\n\r\n return poolAmountIn;\r\n }\r\n\r\n\r\n // ==\r\n // 'Underlying' token-manipulation functions make external calls but are NOT locked\r\n // You must `_lock_` or otherwise ensure reentry-safety\r\n\r\n function _pullUnderlying(address erc20, address from, uint amount)\r\n internal\r\n {\r\n bool xfer = IERC20(erc20).transferFrom(from, address(this), amount);\r\n require(xfer, \"ERR_ERC20_FALSE\");\r\n }\r\n\r\n function _pushUnderlying(address erc20, address to, uint amount)\r\n internal\r\n {\r\n bool xfer = IERC20(erc20).transfer(to, amount);\r\n require(xfer, \"ERR_ERC20_FALSE\");\r\n }\r\n\r\n function _pullPoolShare(address from, uint amount)\r\n internal\r\n {\r\n _pull(from, amount);\r\n }\r\n\r\n function _pushPoolShare(address to, uint amount)\r\n internal\r\n {\r\n _push(to, amount);\r\n }\r\n\r\n function _mintPoolShare(uint amount)\r\n internal\r\n {\r\n _mint(amount);\r\n }\r\n\r\n function _burnPoolShare(uint amount)\r\n internal\r\n {\r\n _burn(amount);\r\n }\r\n\r\n}\r\n",
"sourcePath": "C:\\Users\\ASUS\\Documents\\github\\balancer-core\\contracts\\BPool.sol",
"ast": {
"absolutePath": "project:/contracts/BPool.sol",
"exportedSymbols": {
"BPool": [
3473
]
},
"id": 3474,
"nodeType": "SourceUnit",
"nodes": [
{
"id": 1306,
"literals": [
"solidity",
"0.5",
".12"
],
"nodeType": "PragmaDirective",
"src": "656:23:5"
},
{
"absolutePath": "project:/contracts/BToken.sol",
"file": "./BToken.sol",
"id": 1307,
"nodeType": "ImportDirective",
"scope": 3474,
"sourceUnit": 4047,
"src": "683:22:5",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "project:/contracts/BMath.sol",
"file": "./BMath.sol",
"id": 1308,
"nodeType": "ImportDirective",
"scope": 3474,
"sourceUnit": 832,
"src": "707:21:5",
"symbolAliases": [],
"unitAlias": ""
},
{
"baseContracts": [
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 1309,
"name": "BBronze",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 20,
"src": "750:7:5",
"typeDescriptions": {
"typeIdentifier": "t_contract$_BBronze_$20",
"typeString": "contract BBronze"
}
},
"id": 1310,
"nodeType": "InheritanceSpecifier",
"src": "750:7:5"
},
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 1311,
"name": "BToken",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 4046,
"src": "759:6:5",
"typeDescriptions": {
"typeIdentifier": "t_contract$_BToken_$4046",
"typeString": "contract BToken"
}
},
"id": 1312,
"nodeType": "InheritanceSpecifier",
"src": "759:6:5"
},
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 1313,
"name": "BMath",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 831,
"src": "767:5:5",
"typeDescriptions": {
"typeIdentifier": "t_contract$_BMath_$831",
"typeString": "contract BMath"
}
},
"id": 1314,
"nodeType": "InheritanceSpecifier",
"src": "767:5:5"
}
],
"contractDependencies": [
7,
20,
108,
831,
1304,
3543,
3740,
4046
],
"contractKind": "contract",
"documentation": null,
"fullyImplemented": true,
"id": 3473,
"linearizedBaseContracts": [
3473,
831,
4046,
3543,
3740,
1304,
108,
20,
7
],
"name": "BPool",
"nodeType": "ContractDefinition",
"nodes": [
{
"canonicalName": "BPool.Record",
"id": 1323,
"members": [
{
"constant": false,
"id": 1316,
"name": "bound",
"nodeType": "VariableDeclaration",
"scope": 1323,
"src": "807:10:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 1315,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "807:4:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 1318,
"name": "index",
"nodeType": "VariableDeclaration",
"scope": 1323,
"src": "856:10:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1317,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "856:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 1320,
"name": "denorm",
"nodeType": "VariableDeclaration",
"scope": 1323,
"src": "890:11:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1319,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "890:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 1322,
"name": "balance",
"nodeType": "VariableDeclaration",
"scope": 1323,
"src": "936:12:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1321,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "936:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"name": "Record",
"nodeType": "StructDefinition",
"scope": 3473,
"src": "782:174:5",
"visibility": "public"
},
{
"anonymous": false,
"documentation": null,
"id": 1335,
"name": "LOG_SWAP",
"nodeType": "EventDefinition",
"parameters": {
"id": 1334,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1325,
"indexed": true,
"name": "caller",
"nodeType": "VariableDeclaration",
"scope": 1335,
"src": "989:22:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 1324,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "989:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 1327,
"indexed": true,
"name": "tokenIn",
"nodeType": "VariableDeclaration",
"scope": 1335,
"src": "1022:23:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 1326,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1022:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 1329,
"indexed": true,
"name": "tokenOut",
"nodeType": "VariableDeclaration",
"scope": 1335,
"src": "1056:24:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 1328,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1056:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 1331,
"indexed": false,
"name": "tokenAmountIn",
"nodeType": "VariableDeclaration",
"scope": 1335,
"src": "1091:29:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1330,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1091:7:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 1333,
"indexed": false,
"name": "tokenAmountOut",
"nodeType": "VariableDeclaration",
"scope": 1335,
"src": "1131:30:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1332,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1131:7:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "978:190:5"
},
"src": "964:205:5"
},
{
"anonymous": false,
"documentation": null,
"id": 1343,
"name": "LOG_JOIN",
"nodeType": "EventDefinition",
"parameters": {
"id": 1342,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1337,
"indexed": true,
"name": "caller",
"nodeType": "VariableDeclaration",
"scope": 1343,
"src": "1202:22:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 1336,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1202:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 1339,
"indexed": true,
"name": "tokenIn",
"nodeType": "VariableDeclaration",
"scope": 1343,
"src": "1235:23:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 1338,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1235:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 1341,
"indexed": false,
"name": "tokenAmountIn",
"nodeType": "VariableDeclaration",
"scope": 1343,
"src": "1269:29:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1340,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1269:7:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1191:114:5"
},
"src": "1177:129:5"
},
{
"anonymous": false,
"documentation": null,
"id": 1351,
"name": "LOG_EXIT",
"nodeType": "EventDefinition",
"parameters": {
"id": 1350,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1345,
"indexed": true,
"name": "caller",
"nodeType": "VariableDeclaration",
"scope": 1351,
"src": "1339:22:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 1344,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1339:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 1347,
"indexed": true,
"name": "tokenOut",
"nodeType": "VariableDeclaration",
"scope": 1351,
"src": "1372:24:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 1346,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1372:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 1349,
"indexed": false,
"name": "tokenAmountOut",
"nodeType": "VariableDeclaration",
"scope": 1351,
"src": "1407:30:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1348,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1407:7:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1328:116:5"
},
"src": "1314:131:5"
},
{
"anonymous": true,
"documentation": null,
"id": 1359,
"name": "LOG_CALL",
"nodeType": "EventDefinition",
"parameters": {
"id": 1358,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1353,
"indexed": true,
"name": "sig",
"nodeType": "VariableDeclaration",
"scope": 1359,
"src": "1478:19:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
},
"typeName": {
"id": 1352,
"name": "bytes4",
"nodeType": "ElementaryTypeName",
"src": "1478:6:5",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 1355,
"indexed": true,
"name": "caller",
"nodeType": "VariableDeclaration",
"scope": 1359,
"src": "1508:22:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 1354,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1508:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 1357,
"indexed": false,
"name": "data",
"nodeType": "VariableDeclaration",
"scope": 1359,
"src": "1541:20:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 1356,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "1541:5:5",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1467:101:5"
},
"src": "1453:126:5"
},
{
"body": {
"id": 1371,
"nodeType": "Block",
"src": "1605:75:5",
"statements": [
{
"eventCall": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 1362,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "1630:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 1363,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sig",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "1630:7:5",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 1364,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "1639:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 1365,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "1639:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 1366,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "1651:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 1367,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "data",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "1651:8:5",
"typeDescriptions": {
"typeIdentifier": "t_bytes_calldata_ptr",
"typeString": "bytes calldata"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
},
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_bytes_calldata_ptr",
"typeString": "bytes calldata"
}
],
"id": 1361,
"name": "LOG_CALL",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1359,
"src": "1621:8:5",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_bytes4_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
"typeString": "function (bytes4,address,bytes memory)"
}
},
"id": 1368,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1621:39:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1369,
"nodeType": "EmitStatement",
"src": "1616:44:5"
},
{
"id": 1370,
"nodeType": "PlaceholderStatement",
"src": "1671:1:5"
}
]
},
"documentation": null,
"id": 1372,
"name": "_logs_",
"nodeType": "ModifierDefinition",
"parameters": {
"id": 1360,
"nodeType": "ParameterList",
"parameters": [],
"src": "1602:2:5"
},
"src": "1587:93:5",
"visibility": "internal"
},
{
"body": {
"id": 1389,
"nodeType": "Block",
"src": "1706:111:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1376,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "1725:7:5",
"subExpression": {
"argumentTypes": null,
"id": 1375,
"name": "_mutex",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1402,
"src": "1726:6:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f5245454e545259",
"id": 1377,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1734:13:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_8186a91a8af60eddd7d544682e1b6922f650fc04d86fd0e4ee40391168ca67e4",
"typeString": "literal_string \"ERR_REENTRY\""
},
"value": "ERR_REENTRY"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_8186a91a8af60eddd7d544682e1b6922f650fc04d86fd0e4ee40391168ca67e4",
"typeString": "literal_string \"ERR_REENTRY\""
}
],
"id": 1374,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "1717:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1378,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1717:31:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1379,
"nodeType": "ExpressionStatement",
"src": "1717:31:5"
},
{
"expression": {
"argumentTypes": null,
"id": 1382,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 1380,
"name": "_mutex",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1402,
"src": "1759:6:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"hexValue": "74727565",
"id": 1381,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1768:4:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "true"
},
"src": "1759:13:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1383,
"nodeType": "ExpressionStatement",
"src": "1759:13:5"
},
{
"id": 1384,
"nodeType": "PlaceholderStatement",
"src": "1783:1:5"
},
{
"expression": {
"argumentTypes": null,
"id": 1387,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 1385,
"name": "_mutex",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1402,
"src": "1795:6:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"hexValue": "66616c7365",
"id": 1386,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1804:5:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "false"
},
"src": "1795:14:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1388,
"nodeType": "ExpressionStatement",
"src": "1795:14:5"
}
]
},
"documentation": null,
"id": 1390,
"name": "_lock_",
"nodeType": "ModifierDefinition",
"parameters": {
"id": 1373,
"nodeType": "ParameterList",
"parameters": [],
"src": "1703:2:5"
},
"src": "1688:129:5",
"visibility": "internal"
},
{
"body": {
"id": 1399,
"nodeType": "Block",
"src": "1847:62:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1394,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "1866:7:5",
"subExpression": {
"argumentTypes": null,
"id": 1393,
"name": "_mutex",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1402,
"src": "1867:6:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f5245454e545259",
"id": 1395,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1875:13:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_8186a91a8af60eddd7d544682e1b6922f650fc04d86fd0e4ee40391168ca67e4",
"typeString": "literal_string \"ERR_REENTRY\""
},
"value": "ERR_REENTRY"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_8186a91a8af60eddd7d544682e1b6922f650fc04d86fd0e4ee40391168ca67e4",
"typeString": "literal_string \"ERR_REENTRY\""
}
],
"id": 1392,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "1858:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1396,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1858:31:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1397,
"nodeType": "ExpressionStatement",
"src": "1858:31:5"
},
{
"id": 1398,
"nodeType": "PlaceholderStatement",
"src": "1900:1:5"
}
]
},
"documentation": null,
"id": 1400,
"name": "_viewlock_",
"nodeType": "ModifierDefinition",
"parameters": {
"id": 1391,
"nodeType": "ParameterList",
"parameters": [],
"src": "1844:2:5"
},
"src": "1825:84:5",
"visibility": "internal"
},
{
"constant": false,
"id": 1402,
"name": "_mutex",
"nodeType": "VariableDeclaration",
"scope": 3473,
"src": "1917:19:5",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 1401,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "1917:4:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "private"
},
{
"constant": false,
"id": 1404,
"name": "_factory",
"nodeType": "VariableDeclaration",
"scope": 3473,
"src": "1945:24:5",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 1403,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1945:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "private"
},
{
"constant": false,
"id": 1406,
"name": "_controller",
"nodeType": "VariableDeclaration",
"scope": 3473,
"src": "2024:27:5",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 1405,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2024:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "private"
},
{
"constant": false,
"id": 1408,
"name": "_publicSwap",
"nodeType": "VariableDeclaration",
"scope": 3473,
"src": "2078:24:5",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 1407,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2078:4:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "private"
},
{
"constant": false,
"id": 1410,
"name": "_swapFee",
"nodeType": "VariableDeclaration",
"scope": 3473,
"src": "2266:21:5",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1409,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "2266:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "private"
},
{
"constant": false,
"id": 1412,
"name": "_finalized",
"nodeType": "VariableDeclaration",
"scope": 3473,
"src": "2294:23:5",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 1411,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2294:4:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "private"
},
{
"constant": false,
"id": 1415,
"name": "_tokens",
"nodeType": "VariableDeclaration",
"scope": 3473,
"src": "2326:25:5",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage",
"typeString": "address[]"
},
"typeName": {
"baseType": {
"id": 1413,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2326:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 1414,
"length": null,
"nodeType": "ArrayTypeName",
"src": "2326:9:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
"typeString": "address[]"
}
},
"value": null,
"visibility": "private"
},
{
"constant": false,
"id": 1419,
"name": "_records",
"nodeType": "VariableDeclaration",
"scope": 3473,
"src": "2358:42:5",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record)"
},
"typeName": {
"id": 1418,
"keyType": {
"id": 1416,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2366:7:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "Mapping",
"src": "2358:24:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record)"
},
"valueType": {
"contractScope": null,
"id": 1417,
"name": "Record",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 1323,
"src": "2375:6:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage_ptr",
"typeString": "struct BPool.Record"
}
}
},
"value": null,
"visibility": "private"
},
{
"constant": false,
"id": 1421,
"name": "_totalWeight",
"nodeType": "VariableDeclaration",
"scope": 3473,
"src": "2407:25:5",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1420,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "2407:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "private"
},
{
"body": {
"id": 1446,
"nodeType": "Block",
"src": "2462:163:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 1427,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 1424,
"name": "_controller",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1406,
"src": "2473:11:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 1425,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "2487:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 1426,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "2487:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "2473:24:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 1428,
"nodeType": "ExpressionStatement",
"src": "2473:24:5"
},
{
"expression": {
"argumentTypes": null,
"id": 1432,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 1429,
"name": "_factory",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1404,
"src": "2508:8:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 1430,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "2519:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 1431,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "2519:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "2508:21:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 1433,
"nodeType": "ExpressionStatement",
"src": "2508:21:5"
},
{
"expression": {
"argumentTypes": null,
"id": 1436,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 1434,
"name": "_swapFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1410,
"src": "2540:8:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 1435,
"name": "MIN_FEE",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 43,
"src": "2551:7:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "2540:18:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1437,
"nodeType": "ExpressionStatement",
"src": "2540:18:5"
},
{
"expression": {
"argumentTypes": null,
"id": 1440,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 1438,
"name": "_publicSwap",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1408,
"src": "2569:11:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"hexValue": "66616c7365",
"id": 1439,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2583:5:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "false"
},
"src": "2569:19:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1441,
"nodeType": "ExpressionStatement",
"src": "2569:19:5"
},
{
"expression": {
"argumentTypes": null,
"id": 1444,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 1442,
"name": "_finalized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1412,
"src": "2599:10:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"hexValue": "66616c7365",
"id": 1443,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2612:5:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "false"
},
"src": "2599:18:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1445,
"nodeType": "ExpressionStatement",
"src": "2599:18:5"
}
]
},
"documentation": null,
"id": 1447,
"implemented": true,
"kind": "constructor",
"modifiers": [],
"name": "",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1422,
"nodeType": "ParameterList",
"parameters": [],
"src": "2452:2:5"
},
"returnParameters": {
"id": 1423,
"nodeType": "ParameterList",
"parameters": [],
"src": "2462:0:5"
},
"scope": 3473,
"src": "2441:184:5",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 1454,
"nodeType": "Block",
"src": "2709:37:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 1452,
"name": "_publicSwap",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1408,
"src": "2727:11:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"functionReturnParameters": 1451,
"id": 1453,
"nodeType": "Return",
"src": "2720:18:5"
}
]
},
"documentation": null,
"id": 1455,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "isPublicSwap",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1448,
"nodeType": "ParameterList",
"parameters": [],
"src": "2654:2:5"
},
"returnParameters": {
"id": 1451,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1450,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 1455,
"src": "2698:4:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 1449,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2698:4:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2697:6:5"
},
"scope": 3473,
"src": "2633:113:5",
"stateMutability": "view",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 1462,
"nodeType": "Block",
"src": "2829:36:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 1460,
"name": "_finalized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1412,
"src": "2847:10:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"functionReturnParameters": 1459,
"id": 1461,
"nodeType": "Return",
"src": "2840:17:5"
}
]
},
"documentation": null,
"id": 1463,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "isFinalized",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1456,
"nodeType": "ParameterList",
"parameters": [],
"src": "2774:2:5"
},
"returnParameters": {
"id": 1459,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1458,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 1463,
"src": "2818:4:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 1457,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2818:4:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2817:6:5"
},
"scope": 3473,
"src": "2754:111:5",
"stateMutability": "view",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 1475,
"nodeType": "Block",
"src": "2953:43:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 1470,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "2971:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 1472,
"indexExpression": {
"argumentTypes": null,
"id": 1471,
"name": "t",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1465,
"src": "2980:1:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "2971:11:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 1473,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "bound",
"nodeType": "MemberAccess",
"referencedDeclaration": 1316,
"src": "2971:17:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"functionReturnParameters": 1469,
"id": 1474,
"nodeType": "Return",
"src": "2964:24:5"
}
]
},
"documentation": null,
"id": 1476,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "isBound",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1466,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1465,
"name": "t",
"nodeType": "VariableDeclaration",
"scope": 1476,
"src": "2890:9:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 1464,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2890:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2889:11:5"
},
"returnParameters": {
"id": 1469,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1468,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 1476,
"src": "2942:4:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 1467,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2942:4:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2941:6:5"
},
"scope": 3473,
"src": "2873:123:5",
"stateMutability": "view",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 1484,
"nodeType": "Block",
"src": "3081:40:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 1481,
"name": "_tokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1415,
"src": "3099:7:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage",
"typeString": "address[] storage ref"
}
},
"id": 1482,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "3099:14:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 1480,
"id": 1483,
"nodeType": "Return",
"src": "3092:21:5"
}
]
},
"documentation": null,
"id": 1485,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "getNumTokens",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1477,
"nodeType": "ParameterList",
"parameters": [],
"src": "3025:2:5"
},
"returnParameters": {
"id": 1480,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1479,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 1485,
"src": "3069:4:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1478,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "3069:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3068:6:5"
},
"scope": 3473,
"src": "3004:117:5",
"stateMutability": "view",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 1495,
"nodeType": "Block",
"src": "3239:33:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 1493,
"name": "_tokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1415,
"src": "3257:7:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage",
"typeString": "address[] storage ref"
}
},
"functionReturnParameters": 1492,
"id": 1494,
"nodeType": "Return",
"src": "3250:14:5"
}
]
},
"documentation": null,
"id": 1496,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 1488,
"modifierName": {
"argumentTypes": null,
"id": 1487,
"name": "_viewlock_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1400,
"src": "3180:10:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "3180:10:5"
}
],
"name": "getCurrentTokens",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1486,
"nodeType": "ParameterList",
"parameters": [],
"src": "3154:2:5"
},
"returnParameters": {
"id": 1492,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1491,
"name": "tokens",
"nodeType": "VariableDeclaration",
"scope": 1496,
"src": "3209:23:5",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
"typeString": "address[]"
},
"typeName": {
"baseType": {
"id": 1489,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3209:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 1490,
"length": null,
"nodeType": "ArrayTypeName",
"src": "3209:9:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
"typeString": "address[]"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3208:25:5"
},
"scope": 3473,
"src": "3129:143:5",
"stateMutability": "view",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 1511,
"nodeType": "Block",
"src": "3397:84:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1505,
"name": "_finalized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1412,
"src": "3416:10:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f46494e414c495a4544",
"id": 1506,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3428:19:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_8e0a50e0802c41001c819a1d72124e98da239dcaeee85bac2236e5d8595f284f",
"typeString": "literal_string \"ERR_NOT_FINALIZED\""
},
"value": "ERR_NOT_FINALIZED"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_8e0a50e0802c41001c819a1d72124e98da239dcaeee85bac2236e5d8595f284f",
"typeString": "literal_string \"ERR_NOT_FINALIZED\""
}
],
"id": 1504,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "3408:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1507,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3408:40:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1508,
"nodeType": "ExpressionStatement",
"src": "3408:40:5"
},
{
"expression": {
"argumentTypes": null,
"id": 1509,
"name": "_tokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1415,
"src": "3466:7:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage",
"typeString": "address[] storage ref"
}
},
"functionReturnParameters": 1503,
"id": 1510,
"nodeType": "Return",
"src": "3459:14:5"
}
]
},
"documentation": null,
"id": 1512,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 1499,
"modifierName": {
"argumentTypes": null,
"id": 1498,
"name": "_viewlock_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1400,
"src": "3338:10:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "3338:10:5"
}
],
"name": "getFinalTokens",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1497,
"nodeType": "ParameterList",
"parameters": [],
"src": "3303:2:5"
},
"returnParameters": {
"id": 1503,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1502,
"name": "tokens",
"nodeType": "VariableDeclaration",
"scope": 1512,
"src": "3367:23:5",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
"typeString": "address[]"
},
"typeName": {
"baseType": {
"id": 1500,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3367:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 1501,
"length": null,
"nodeType": "ArrayTypeName",
"src": "3367:9:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
"typeString": "address[]"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3366:25:5"
},
"scope": 3473,
"src": "3280:201:5",
"stateMutability": "view",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 1534,
"nodeType": "Block",
"src": "3607:108:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 1522,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "3628:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 1524,
"indexExpression": {
"argumentTypes": null,
"id": 1523,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1514,
"src": "3637:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "3628:15:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 1525,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "bound",
"nodeType": "MemberAccess",
"referencedDeclaration": 1316,
"src": "3628:21:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f424f554e44",
"id": 1526,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3651:15:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_86a01019fb9a24504897a9ddf06d43e29c7ad173d46588f4f7aa1ef14d3c847c",
"typeString": "literal_string \"ERR_NOT_BOUND\""
},
"value": "ERR_NOT_BOUND"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_86a01019fb9a24504897a9ddf06d43e29c7ad173d46588f4f7aa1ef14d3c847c",
"typeString": "literal_string \"ERR_NOT_BOUND\""
}
],
"id": 1521,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "3620:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1527,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3620:47:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1528,
"nodeType": "ExpressionStatement",
"src": "3620:47:5"
},
{
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 1529,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "3685:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 1531,
"indexExpression": {
"argumentTypes": null,
"id": 1530,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1514,
"src": "3694:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "3685:15:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 1532,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "denorm",
"nodeType": "MemberAccess",
"referencedDeclaration": 1320,
"src": "3685:22:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 1520,
"id": 1533,
"nodeType": "Return",
"src": "3678:29:5"
}
]
},
"documentation": null,
"id": 1535,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 1517,
"modifierName": {
"argumentTypes": null,
"id": 1516,
"name": "_viewlock_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1400,
"src": "3567:10:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "3567:10:5"
}
],
"name": "getDenormalizedWeight",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1515,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1514,
"name": "token",
"nodeType": "VariableDeclaration",
"scope": 1535,
"src": "3520:13:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 1513,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3520:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3519:15:5"
},
"returnParameters": {
"id": 1520,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1519,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 1535,
"src": "3596:4:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1518,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "3596:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3595:6:5"
},
"scope": 3473,
"src": "3489:226:5",
"stateMutability": "view",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 1544,
"nodeType": "Block",
"src": "3833:38:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 1542,
"name": "_totalWeight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1421,
"src": "3851:12:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 1541,
"id": 1543,
"nodeType": "Return",
"src": "3844:19:5"
}
]
},
"documentation": null,
"id": 1545,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 1538,
"modifierName": {
"argumentTypes": null,
"id": 1537,
"name": "_viewlock_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1400,
"src": "3793:10:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "3793:10:5"
}
],
"name": "getTotalDenormalizedWeight",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1536,
"nodeType": "ParameterList",
"parameters": [],
"src": "3758:2:5"
},
"returnParameters": {
"id": 1541,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1540,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 1545,
"src": "3822:4:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1539,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "3822:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3821:6:5"
},
"scope": 3473,
"src": "3723:148:5",
"stateMutability": "view",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 1574,
"nodeType": "Block",
"src": "3995:159:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 1555,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "4016:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 1557,
"indexExpression": {
"argumentTypes": null,
"id": 1556,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1547,
"src": "4025:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "4016:15:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 1558,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "bound",
"nodeType": "MemberAccess",
"referencedDeclaration": 1316,
"src": "4016:21:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f424f554e44",
"id": 1559,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4039:15:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_86a01019fb9a24504897a9ddf06d43e29c7ad173d46588f4f7aa1ef14d3c847c",
"typeString": "literal_string \"ERR_NOT_BOUND\""
},
"value": "ERR_NOT_BOUND"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_86a01019fb9a24504897a9ddf06d43e29c7ad173d46588f4f7aa1ef14d3c847c",
"typeString": "literal_string \"ERR_NOT_BOUND\""
}
],
"id": 1554,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "4008:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1560,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4008:47:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1561,
"nodeType": "ExpressionStatement",
"src": "4008:47:5"
},
{
"assignments": [
1563
],
"declarations": [
{
"constant": false,
"id": 1563,
"name": "denorm",
"nodeType": "VariableDeclaration",
"scope": 1574,
"src": "4066:11:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1562,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "4066:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 1568,
"initialValue": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 1564,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "4080:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 1566,
"indexExpression": {
"argumentTypes": null,
"id": 1565,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1547,
"src": "4089:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "4080:15:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 1567,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "denorm",
"nodeType": "MemberAccess",
"referencedDeclaration": 1320,
"src": "4080:22:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "4066:36:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1570,
"name": "denorm",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1563,
"src": "4125:6:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 1571,
"name": "_totalWeight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1421,
"src": "4133:12:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 1569,
"name": "bdiv",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1057,
"src": "4120:4:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 1572,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4120:26:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 1553,
"id": 1573,
"nodeType": "Return",
"src": "4113:33:5"
}
]
},
"documentation": null,
"id": 1575,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 1550,
"modifierName": {
"argumentTypes": null,
"id": 1549,
"name": "_viewlock_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1400,
"src": "3955:10:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "3955:10:5"
}
],
"name": "getNormalizedWeight",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1548,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1547,
"name": "token",
"nodeType": "VariableDeclaration",
"scope": 1575,
"src": "3908:13:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 1546,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3908:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3907:15:5"
},
"returnParameters": {
"id": 1553,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1552,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 1575,
"src": "3984:4:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1551,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "3984:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3983:6:5"
},
"scope": 3473,
"src": "3879:275:5",
"stateMutability": "view",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 1597,
"nodeType": "Block",
"src": "4269:109:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 1585,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "4290:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 1587,
"indexExpression": {
"argumentTypes": null,
"id": 1586,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1577,
"src": "4299:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "4290:15:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 1588,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "bound",
"nodeType": "MemberAccess",
"referencedDeclaration": 1316,
"src": "4290:21:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f424f554e44",
"id": 1589,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4313:15:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_86a01019fb9a24504897a9ddf06d43e29c7ad173d46588f4f7aa1ef14d3c847c",
"typeString": "literal_string \"ERR_NOT_BOUND\""
},
"value": "ERR_NOT_BOUND"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_86a01019fb9a24504897a9ddf06d43e29c7ad173d46588f4f7aa1ef14d3c847c",
"typeString": "literal_string \"ERR_NOT_BOUND\""
}
],
"id": 1584,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "4282:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1590,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4282:47:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1591,
"nodeType": "ExpressionStatement",
"src": "4282:47:5"
},
{
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 1592,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "4347:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 1594,
"indexExpression": {
"argumentTypes": null,
"id": 1593,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1577,
"src": "4356:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "4347:15:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 1595,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 1322,
"src": "4347:23:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 1583,
"id": 1596,
"nodeType": "Return",
"src": "4340:30:5"
}
]
},
"documentation": null,
"id": 1598,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 1580,
"modifierName": {
"argumentTypes": null,
"id": 1579,
"name": "_viewlock_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1400,
"src": "4229:10:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "4229:10:5"
}
],
"name": "getBalance",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1578,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1577,
"name": "token",
"nodeType": "VariableDeclaration",
"scope": 1598,
"src": "4182:13:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 1576,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "4182:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "4181:15:5"
},
"returnParameters": {
"id": 1583,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1582,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 1598,
"src": "4258:4:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1581,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "4258:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "4257:6:5"
},
"scope": 3473,
"src": "4162:216:5",
"stateMutability": "view",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 1607,
"nodeType": "Block",
"src": "4480:34:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 1605,
"name": "_swapFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1410,
"src": "4498:8:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 1604,
"id": 1606,
"nodeType": "Return",
"src": "4491:15:5"
}
]
},
"documentation": null,
"id": 1608,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 1601,
"modifierName": {
"argumentTypes": null,
"id": 1600,
"name": "_viewlock_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1400,
"src": "4440:10:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "4440:10:5"
}
],
"name": "getSwapFee",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1599,
"nodeType": "ParameterList",
"parameters": [],
"src": "4405:2:5"
},
"returnParameters": {
"id": 1604,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1603,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 1608,
"src": "4469:4:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1602,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "4469:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "4468:6:5"
},
"scope": 3473,
"src": "4386:128:5",
"stateMutability": "view",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 1617,
"nodeType": "Block",
"src": "4622:37:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 1615,
"name": "_controller",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1406,
"src": "4640:11:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"functionReturnParameters": 1614,
"id": 1616,
"nodeType": "Return",
"src": "4633:18:5"
}
]
},
"documentation": null,
"id": 1618,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 1611,
"modifierName": {
"argumentTypes": null,
"id": 1610,
"name": "_viewlock_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1400,
"src": "4579:10:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "4579:10:5"
}
],
"name": "getController",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1609,
"nodeType": "ParameterList",
"parameters": [],
"src": "4544:2:5"
},
"returnParameters": {
"id": 1614,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1613,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 1618,
"src": "4608:7:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 1612,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "4608:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "4607:9:5"
},
"scope": 3473,
"src": "4522:137:5",
"stateMutability": "view",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 1659,
"nodeType": "Block",
"src": "4756:262:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1629,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "4776:11:5",
"subExpression": {
"argumentTypes": null,
"id": 1628,
"name": "_finalized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1412,
"src": "4777:10:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f49535f46494e414c495a4544",
"id": 1630,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4789:18:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_4e8186530b7c98466f35e0b14182dc6e751c9b9644c5bf1204c0609f892e5bbe",
"typeString": "literal_string \"ERR_IS_FINALIZED\""
},
"value": "ERR_IS_FINALIZED"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_4e8186530b7c98466f35e0b14182dc6e751c9b9644c5bf1204c0609f892e5bbe",
"typeString": "literal_string \"ERR_IS_FINALIZED\""
}
],
"id": 1627,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "4768:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1631,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4768:40:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1632,
"nodeType": "ExpressionStatement",
"src": "4768:40:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 1637,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 1634,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "4827:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 1635,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "4827:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"id": 1636,
"name": "_controller",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1406,
"src": "4841:11:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "4827:25:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f434f4e54524f4c4c4552",
"id": 1638,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4854:20:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_0479bbd6e0e904a96491e3adc0eda9022c19acd57f4922725f8618b3a0372668",
"typeString": "literal_string \"ERR_NOT_CONTROLLER\""
},
"value": "ERR_NOT_CONTROLLER"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_0479bbd6e0e904a96491e3adc0eda9022c19acd57f4922725f8618b3a0372668",
"typeString": "literal_string \"ERR_NOT_CONTROLLER\""
}
],
"id": 1633,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "4819:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1639,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4819:56:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1640,
"nodeType": "ExpressionStatement",
"src": "4819:56:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1644,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 1642,
"name": "swapFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1620,
"src": "4894:7:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">=",
"rightExpression": {
"argumentTypes": null,
"id": 1643,
"name": "MIN_FEE",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 43,
"src": "4905:7:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4894:18:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4d494e5f464545",
"id": 1645,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4914:13:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_3c95b37766e2e0764ffbea08cf33d7dd980794ea2229cf2b30f9a53dfb48c0a5",
"typeString": "literal_string \"ERR_MIN_FEE\""
},
"value": "ERR_MIN_FEE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_3c95b37766e2e0764ffbea08cf33d7dd980794ea2229cf2b30f9a53dfb48c0a5",
"typeString": "literal_string \"ERR_MIN_FEE\""
}
],
"id": 1641,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "4886:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1646,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4886:42:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1647,
"nodeType": "ExpressionStatement",
"src": "4886:42:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1651,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 1649,
"name": "swapFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1620,
"src": "4947:7:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<=",
"rightExpression": {
"argumentTypes": null,
"id": 1650,
"name": "MAX_FEE",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 48,
"src": "4958:7:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4947:18:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4d41585f464545",
"id": 1652,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4967:13:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_889e9e6c0c0fb5bbb40eea41a5a6b8208c6005e0eb9ab1570db8ca4038ab2ca2",
"typeString": "literal_string \"ERR_MAX_FEE\""
},
"value": "ERR_MAX_FEE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_889e9e6c0c0fb5bbb40eea41a5a6b8208c6005e0eb9ab1570db8ca4038ab2ca2",
"typeString": "literal_string \"ERR_MAX_FEE\""
}
],
"id": 1648,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "4939:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1653,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4939:42:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1654,
"nodeType": "ExpressionStatement",
"src": "4939:42:5"
},
{
"expression": {
"argumentTypes": null,
"id": 1657,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 1655,
"name": "_swapFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1410,
"src": "4992:8:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 1656,
"name": "swapFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1620,
"src": "5003:7:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4992:18:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1658,
"nodeType": "ExpressionStatement",
"src": "4992:18:5"
}
]
},
"documentation": null,
"id": 1660,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 1623,
"modifierName": {
"argumentTypes": null,
"id": 1622,
"name": "_logs_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1372,
"src": "4728:6:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "4728:6:5"
},
{
"arguments": null,
"id": 1625,
"modifierName": {
"argumentTypes": null,
"id": 1624,
"name": "_lock_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1390,
"src": "4744:6:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "4744:6:5"
}
],
"name": "setSwapFee",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1621,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1620,
"name": "swapFee",
"nodeType": "VariableDeclaration",
"scope": 1660,
"src": "4687:12:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1619,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "4687:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "4686:14:5"
},
"returnParameters": {
"id": 1626,
"nodeType": "ParameterList",
"parameters": [],
"src": "4756:0:5"
},
"scope": 3473,
"src": "4667:351:5",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 1681,
"nodeType": "Block",
"src": "5121:107:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 1673,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 1670,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "5140:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 1671,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "5140:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"id": 1672,
"name": "_controller",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1406,
"src": "5154:11:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "5140:25:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f434f4e54524f4c4c4552",
"id": 1674,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5167:20:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_0479bbd6e0e904a96491e3adc0eda9022c19acd57f4922725f8618b3a0372668",
"typeString": "literal_string \"ERR_NOT_CONTROLLER\""
},
"value": "ERR_NOT_CONTROLLER"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_0479bbd6e0e904a96491e3adc0eda9022c19acd57f4922725f8618b3a0372668",
"typeString": "literal_string \"ERR_NOT_CONTROLLER\""
}
],
"id": 1669,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "5132:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1675,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5132:56:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1676,
"nodeType": "ExpressionStatement",
"src": "5132:56:5"
},
{
"expression": {
"argumentTypes": null,
"id": 1679,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 1677,
"name": "_controller",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1406,
"src": "5199:11:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 1678,
"name": "manager",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1662,
"src": "5213:7:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "5199:21:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 1680,
"nodeType": "ExpressionStatement",
"src": "5199:21:5"
}
]
},
"documentation": null,
"id": 1682,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 1665,
"modifierName": {
"argumentTypes": null,
"id": 1664,
"name": "_logs_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1372,
"src": "5093:6:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "5093:6:5"
},
{
"arguments": null,
"id": 1667,
"modifierName": {
"argumentTypes": null,
"id": 1666,
"name": "_lock_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1390,
"src": "5109:6:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "5109:6:5"
}
],
"name": "setController",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1663,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1662,
"name": "manager",
"nodeType": "VariableDeclaration",
"scope": 1682,
"src": "5049:15:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 1661,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "5049:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "5048:17:5"
},
"returnParameters": {
"id": 1668,
"nodeType": "ParameterList",
"parameters": [],
"src": "5121:0:5"
},
"scope": 3473,
"src": "5026:202:5",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 1709,
"nodeType": "Block",
"src": "5328:158:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1693,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "5347:11:5",
"subExpression": {
"argumentTypes": null,
"id": 1692,
"name": "_finalized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1412,
"src": "5348:10:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f49535f46494e414c495a4544",
"id": 1694,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5360:18:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_4e8186530b7c98466f35e0b14182dc6e751c9b9644c5bf1204c0609f892e5bbe",
"typeString": "literal_string \"ERR_IS_FINALIZED\""
},
"value": "ERR_IS_FINALIZED"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_4e8186530b7c98466f35e0b14182dc6e751c9b9644c5bf1204c0609f892e5bbe",
"typeString": "literal_string \"ERR_IS_FINALIZED\""
}
],
"id": 1691,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "5339:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1695,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5339:40:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1696,
"nodeType": "ExpressionStatement",
"src": "5339:40:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 1701,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 1698,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "5398:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 1699,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "5398:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"id": 1700,
"name": "_controller",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1406,
"src": "5412:11:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "5398:25:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f434f4e54524f4c4c4552",
"id": 1702,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5425:20:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_0479bbd6e0e904a96491e3adc0eda9022c19acd57f4922725f8618b3a0372668",
"typeString": "literal_string \"ERR_NOT_CONTROLLER\""
},
"value": "ERR_NOT_CONTROLLER"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_0479bbd6e0e904a96491e3adc0eda9022c19acd57f4922725f8618b3a0372668",
"typeString": "literal_string \"ERR_NOT_CONTROLLER\""
}
],
"id": 1697,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "5390:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1703,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5390:56:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1704,
"nodeType": "ExpressionStatement",
"src": "5390:56:5"
},
{
"expression": {
"argumentTypes": null,
"id": 1707,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 1705,
"name": "_publicSwap",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1408,
"src": "5457:11:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 1706,
"name": "public_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1684,
"src": "5471:7:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "5457:21:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1708,
"nodeType": "ExpressionStatement",
"src": "5457:21:5"
}
]
},
"documentation": null,
"id": 1710,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 1687,
"modifierName": {
"argumentTypes": null,
"id": 1686,
"name": "_logs_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1372,
"src": "5300:6:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "5300:6:5"
},
{
"arguments": null,
"id": 1689,
"modifierName": {
"argumentTypes": null,
"id": 1688,
"name": "_lock_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1390,
"src": "5316:6:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "5316:6:5"
}
],
"name": "setPublicSwap",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1685,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1684,
"name": "public_",
"nodeType": "VariableDeclaration",
"scope": 1710,
"src": "5259:12:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 1683,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "5259:4:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "5258:14:5"
},
"returnParameters": {
"id": 1690,
"nodeType": "ParameterList",
"parameters": [],
"src": "5328:0:5"
},
"scope": 3473,
"src": "5236:250:5",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 1757,
"nodeType": "Block",
"src": "5569:357:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 1721,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 1718,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "5588:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 1719,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "5588:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"id": 1720,
"name": "_controller",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1406,
"src": "5602:11:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "5588:25:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f434f4e54524f4c4c4552",
"id": 1722,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5615:20:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_0479bbd6e0e904a96491e3adc0eda9022c19acd57f4922725f8618b3a0372668",
"typeString": "literal_string \"ERR_NOT_CONTROLLER\""
},
"value": "ERR_NOT_CONTROLLER"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_0479bbd6e0e904a96491e3adc0eda9022c19acd57f4922725f8618b3a0372668",
"typeString": "literal_string \"ERR_NOT_CONTROLLER\""
}
],
"id": 1717,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "5580:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1723,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5580:56:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1724,
"nodeType": "ExpressionStatement",
"src": "5580:56:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1727,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "5655:11:5",
"subExpression": {
"argumentTypes": null,
"id": 1726,
"name": "_finalized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1412,
"src": "5656:10:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f49535f46494e414c495a4544",
"id": 1728,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5668:18:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_4e8186530b7c98466f35e0b14182dc6e751c9b9644c5bf1204c0609f892e5bbe",
"typeString": "literal_string \"ERR_IS_FINALIZED\""
},
"value": "ERR_IS_FINALIZED"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_4e8186530b7c98466f35e0b14182dc6e751c9b9644c5bf1204c0609f892e5bbe",
"typeString": "literal_string \"ERR_IS_FINALIZED\""
}
],
"id": 1725,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "5647:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1729,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5647:40:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1730,
"nodeType": "ExpressionStatement",
"src": "5647:40:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1735,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 1732,
"name": "_tokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1415,
"src": "5706:7:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage",
"typeString": "address[] storage ref"
}
},
"id": 1733,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "5706:14:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">=",
"rightExpression": {
"argumentTypes": null,
"id": 1734,
"name": "MIN_BOUND_TOKENS",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 33,
"src": "5724:16:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5706:34:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4d494e5f544f4b454e53",
"id": 1736,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5742:16:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_e51b2df926e9f13c18594bdf17dd3e1810e2676b7bad834d6cfa8e46bba574a9",
"typeString": "literal_string \"ERR_MIN_TOKENS\""
},
"value": "ERR_MIN_TOKENS"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_e51b2df926e9f13c18594bdf17dd3e1810e2676b7bad834d6cfa8e46bba574a9",
"typeString": "literal_string \"ERR_MIN_TOKENS\""
}
],
"id": 1731,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "5698:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1737,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5698:61:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1738,
"nodeType": "ExpressionStatement",
"src": "5698:61:5"
},
{
"expression": {
"argumentTypes": null,
"id": 1741,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 1739,
"name": "_finalized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1412,
"src": "5772:10:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"hexValue": "74727565",
"id": 1740,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5785:4:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "true"
},
"src": "5772:17:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1742,
"nodeType": "ExpressionStatement",
"src": "5772:17:5"
},
{
"expression": {
"argumentTypes": null,
"id": 1745,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 1743,
"name": "_publicSwap",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1408,
"src": "5800:11:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"hexValue": "74727565",
"id": 1744,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5814:4:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "true"
},
"src": "5800:18:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1746,
"nodeType": "ExpressionStatement",
"src": "5800:18:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1748,
"name": "INIT_POOL_SUPPLY",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 76,
"src": "5846:16:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 1747,
"name": "_mintPoolShare",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3462,
"src": "5831:14:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
"typeString": "function (uint256)"
}
},
"id": 1749,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5831:32:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1750,
"nodeType": "ExpressionStatement",
"src": "5831:32:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 1752,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "5889:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 1753,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "5889:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 1754,
"name": "INIT_POOL_SUPPLY",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 76,
"src": "5901:16:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 1751,
"name": "_pushPoolShare",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3452,
"src": "5874:14:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,uint256)"
}
},
"id": 1755,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5874:44:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1756,
"nodeType": "ExpressionStatement",
"src": "5874:44:5"
}
]
},
"documentation": null,
"id": 1758,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 1713,
"modifierName": {
"argumentTypes": null,
"id": 1712,
"name": "_logs_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1372,
"src": "5541:6:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "5541:6:5"
},
{
"arguments": null,
"id": 1715,
"modifierName": {
"argumentTypes": null,
"id": 1714,
"name": "_lock_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1390,
"src": "5557:6:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "5557:6:5"
}
],
"name": "finalize",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1711,
"nodeType": "ParameterList",
"parameters": [],
"src": "5511:2:5"
},
"returnParameters": {
"id": 1716,
"nodeType": "ParameterList",
"parameters": [],
"src": "5569:0:5"
},
"scope": 3473,
"src": "5494:432:5",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 1824,
"nodeType": "Block",
"src": "6111:557:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 1773,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 1770,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "6130:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 1771,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "6130:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"id": 1772,
"name": "_controller",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1406,
"src": "6144:11:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "6130:25:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f434f4e54524f4c4c4552",
"id": 1774,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6157:20:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_0479bbd6e0e904a96491e3adc0eda9022c19acd57f4922725f8618b3a0372668",
"typeString": "literal_string \"ERR_NOT_CONTROLLER\""
},
"value": "ERR_NOT_CONTROLLER"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_0479bbd6e0e904a96491e3adc0eda9022c19acd57f4922725f8618b3a0372668",
"typeString": "literal_string \"ERR_NOT_CONTROLLER\""
}
],
"id": 1769,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "6122:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1775,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6122:56:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1776,
"nodeType": "ExpressionStatement",
"src": "6122:56:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1782,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "6197:22:5",
"subExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 1778,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "6198:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 1780,
"indexExpression": {
"argumentTypes": null,
"id": 1779,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1760,
"src": "6207:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "6198:15:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 1781,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "bound",
"nodeType": "MemberAccess",
"referencedDeclaration": 1316,
"src": "6198:21:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f49535f424f554e44",
"id": 1783,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6221:14:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_29524b4853ebf7d280374d088acc10bd6949cb77e38df49dfa9b02680b8a5f51",
"typeString": "literal_string \"ERR_IS_BOUND\""
},
"value": "ERR_IS_BOUND"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_29524b4853ebf7d280374d088acc10bd6949cb77e38df49dfa9b02680b8a5f51",
"typeString": "literal_string \"ERR_IS_BOUND\""
}
],
"id": 1777,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "6189:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1784,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6189:47:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1785,
"nodeType": "ExpressionStatement",
"src": "6189:47:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1788,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "6255:11:5",
"subExpression": {
"argumentTypes": null,
"id": 1787,
"name": "_finalized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1412,
"src": "6256:10:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f49535f46494e414c495a4544",
"id": 1789,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6268:18:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_4e8186530b7c98466f35e0b14182dc6e751c9b9644c5bf1204c0609f892e5bbe",
"typeString": "literal_string \"ERR_IS_FINALIZED\""
},
"value": "ERR_IS_FINALIZED"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_4e8186530b7c98466f35e0b14182dc6e751c9b9644c5bf1204c0609f892e5bbe",
"typeString": "literal_string \"ERR_IS_FINALIZED\""
}
],
"id": 1786,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "6247:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1790,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6247:40:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1791,
"nodeType": "ExpressionStatement",
"src": "6247:40:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1796,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 1793,
"name": "_tokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1415,
"src": "6308:7:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage",
"typeString": "address[] storage ref"
}
},
"id": 1794,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "6308:14:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"id": 1795,
"name": "MAX_BOUND_TOKENS",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 36,
"src": "6325:16:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "6308:33:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4d41585f544f4b454e53",
"id": 1797,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6343:16:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_2b41476dedca3afde44e68e1abeac58b7cde6712eb701df30a64635f310a23f5",
"typeString": "literal_string \"ERR_MAX_TOKENS\""
},
"value": "ERR_MAX_TOKENS"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_2b41476dedca3afde44e68e1abeac58b7cde6712eb701df30a64635f310a23f5",
"typeString": "literal_string \"ERR_MAX_TOKENS\""
}
],
"id": 1792,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "6300:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1798,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6300:60:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1799,
"nodeType": "ExpressionStatement",
"src": "6300:60:5"
},
{
"expression": {
"argumentTypes": null,
"id": 1810,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 1800,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "6373:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 1802,
"indexExpression": {
"argumentTypes": null,
"id": 1801,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1760,
"src": "6382:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "6373:15:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "74727565",
"id": 1804,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6420:4:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "true"
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 1805,
"name": "_tokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1415,
"src": "6446:7:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage",
"typeString": "address[] storage ref"
}
},
"id": 1806,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "6446:14:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"hexValue": "30",
"id": 1807,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6483:1:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
{
"argumentTypes": null,
"hexValue": "30",
"id": 1808,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6551:1:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
}
],
"id": 1803,
"name": "Record",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1323,
"src": "6391:6:5",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_struct$_Record_$1323_storage_ptr_$",
"typeString": "type(struct BPool.Record storage pointer)"
}
},
"id": 1809,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "structConstructorCall",
"lValueRequested": false,
"names": [
"bound",
"index",
"denorm",
"balance"
],
"nodeType": "FunctionCall",
"src": "6391:198:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_memory",
"typeString": "struct BPool.Record memory"
}
},
"src": "6373:216:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 1811,
"nodeType": "ExpressionStatement",
"src": "6373:216:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1815,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1760,
"src": "6613:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"expression": {
"argumentTypes": null,
"id": 1812,
"name": "_tokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1415,
"src": "6600:7:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage",
"typeString": "address[] storage ref"
}
},
"id": 1814,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "push",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "6600:12:5",
"typeDescriptions": {
"typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$_t_uint256_$",
"typeString": "function (address) returns (uint256)"
}
},
"id": 1816,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6600:19:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1817,
"nodeType": "ExpressionStatement",
"src": "6600:19:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1819,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1760,
"src": "6637:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 1820,
"name": "balance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1762,
"src": "6644:7:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 1821,
"name": "denorm",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1764,
"src": "6653:6:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 1818,
"name": "rebind",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1997,
"src": "6630:6:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
"typeString": "function (address,uint256,uint256)"
}
},
"id": 1822,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6630:30:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1823,
"nodeType": "ExpressionStatement",
"src": "6630:30:5"
}
]
},
"documentation": null,
"id": 1825,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 1767,
"modifierName": {
"argumentTypes": null,
"id": 1766,
"name": "_logs_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1372,
"src": "6019:6:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "6019:6:5"
}
],
"name": "bind",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1765,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1760,
"name": "token",
"nodeType": "VariableDeclaration",
"scope": 1825,
"src": "5950:13:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 1759,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "5950:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 1762,
"name": "balance",
"nodeType": "VariableDeclaration",
"scope": 1825,
"src": "5965:12:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1761,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "5965:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 1764,
"name": "denorm",
"nodeType": "VariableDeclaration",
"scope": 1825,
"src": "5979:11:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1763,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "5979:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "5949:42:5"
},
"returnParameters": {
"id": 1768,
"nodeType": "ParameterList",
"parameters": [],
"src": "6111:0:5"
},
"scope": 3473,
"src": "5936:732:5",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 1996,
"nodeType": "Block",
"src": "6787:1528:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 1842,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 1839,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "6808:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 1840,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "6808:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"id": 1841,
"name": "_controller",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1406,
"src": "6822:11:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "6808:25:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f434f4e54524f4c4c4552",
"id": 1843,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6835:20:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_0479bbd6e0e904a96491e3adc0eda9022c19acd57f4922725f8618b3a0372668",
"typeString": "literal_string \"ERR_NOT_CONTROLLER\""
},
"value": "ERR_NOT_CONTROLLER"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_0479bbd6e0e904a96491e3adc0eda9022c19acd57f4922725f8618b3a0372668",
"typeString": "literal_string \"ERR_NOT_CONTROLLER\""
}
],
"id": 1838,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "6800:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1844,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6800:56:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1845,
"nodeType": "ExpressionStatement",
"src": "6800:56:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 1847,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "6875:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 1849,
"indexExpression": {
"argumentTypes": null,
"id": 1848,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1827,
"src": "6884:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "6875:15:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 1850,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "bound",
"nodeType": "MemberAccess",
"referencedDeclaration": 1316,
"src": "6875:21:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f424f554e44",
"id": 1851,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6898:15:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_86a01019fb9a24504897a9ddf06d43e29c7ad173d46588f4f7aa1ef14d3c847c",
"typeString": "literal_string \"ERR_NOT_BOUND\""
},
"value": "ERR_NOT_BOUND"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_86a01019fb9a24504897a9ddf06d43e29c7ad173d46588f4f7aa1ef14d3c847c",
"typeString": "literal_string \"ERR_NOT_BOUND\""
}
],
"id": 1846,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "6867:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1852,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6867:47:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1853,
"nodeType": "ExpressionStatement",
"src": "6867:47:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1856,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "6933:11:5",
"subExpression": {
"argumentTypes": null,
"id": 1855,
"name": "_finalized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1412,
"src": "6934:10:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f49535f46494e414c495a4544",
"id": 1857,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6946:18:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_4e8186530b7c98466f35e0b14182dc6e751c9b9644c5bf1204c0609f892e5bbe",
"typeString": "literal_string \"ERR_IS_FINALIZED\""
},
"value": "ERR_IS_FINALIZED"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_4e8186530b7c98466f35e0b14182dc6e751c9b9644c5bf1204c0609f892e5bbe",
"typeString": "literal_string \"ERR_IS_FINALIZED\""
}
],
"id": 1854,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "6925:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1858,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6925:40:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1859,
"nodeType": "ExpressionStatement",
"src": "6925:40:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1863,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 1861,
"name": "denorm",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1831,
"src": "6986:6:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">=",
"rightExpression": {
"argumentTypes": null,
"id": 1862,
"name": "MIN_WEIGHT",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 54,
"src": "6996:10:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "6986:20:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4d494e5f574549474854",
"id": 1864,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7008:16:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_8df266f07de77e4ef407edb2fcb3334221f5d37909c32010ecedbd042f2b2362",
"typeString": "literal_string \"ERR_MIN_WEIGHT\""
},
"value": "ERR_MIN_WEIGHT"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_8df266f07de77e4ef407edb2fcb3334221f5d37909c32010ecedbd042f2b2362",
"typeString": "literal_string \"ERR_MIN_WEIGHT\""
}
],
"id": 1860,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "6978:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1865,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6978:47:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1866,
"nodeType": "ExpressionStatement",
"src": "6978:47:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1870,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 1868,
"name": "denorm",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1831,
"src": "7044:6:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<=",
"rightExpression": {
"argumentTypes": null,
"id": 1869,
"name": "MAX_WEIGHT",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 59,
"src": "7054:10:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7044:20:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4d41585f574549474854",
"id": 1871,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7066:16:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_4443a14e27060659cd754b886a4a9abce56b7a815ac41b5da14580c72eae7f33",
"typeString": "literal_string \"ERR_MAX_WEIGHT\""
},
"value": "ERR_MAX_WEIGHT"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_4443a14e27060659cd754b886a4a9abce56b7a815ac41b5da14580c72eae7f33",
"typeString": "literal_string \"ERR_MAX_WEIGHT\""
}
],
"id": 1867,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "7036:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1872,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7036:47:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1873,
"nodeType": "ExpressionStatement",
"src": "7036:47:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1877,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 1875,
"name": "balance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1829,
"src": "7102:7:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">=",
"rightExpression": {
"argumentTypes": null,
"id": 1876,
"name": "MIN_BALANCE",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 71,
"src": "7113:11:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7102:22:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4d494e5f42414c414e4345",
"id": 1878,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7126:17:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_69c7afc4064c1fa740d9fba5145c2c6cfc449ab58df3114718ec5abc7738730c",
"typeString": "literal_string \"ERR_MIN_BALANCE\""
},
"value": "ERR_MIN_BALANCE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_69c7afc4064c1fa740d9fba5145c2c6cfc449ab58df3114718ec5abc7738730c",
"typeString": "literal_string \"ERR_MIN_BALANCE\""
}
],
"id": 1874,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "7094:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1879,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7094:50:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1880,
"nodeType": "ExpressionStatement",
"src": "7094:50:5"
},
{
"assignments": [
1882
],
"declarations": [
{
"constant": false,
"id": 1882,
"name": "oldWeight",
"nodeType": "VariableDeclaration",
"scope": 1996,
"src": "7203:14:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1881,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "7203:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 1887,
"initialValue": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 1883,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "7220:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 1885,
"indexExpression": {
"argumentTypes": null,
"id": 1884,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1827,
"src": "7229:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "7220:15:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 1886,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "denorm",
"nodeType": "MemberAccess",
"referencedDeclaration": 1320,
"src": "7220:22:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "7203:39:5"
},
{
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1890,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 1888,
"name": "denorm",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1831,
"src": "7257:6:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"argumentTypes": null,
"id": 1889,
"name": "oldWeight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1882,
"src": "7266:9:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7257:18:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": {
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1911,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 1909,
"name": "denorm",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1831,
"src": "7452:6:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"id": 1910,
"name": "oldWeight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1882,
"src": "7461:9:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7452:18:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": null,
"id": 1923,
"nodeType": "IfStatement",
"src": "7448:109:5",
"trueBody": {
"id": 1922,
"nodeType": "Block",
"src": "7472:85:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 1920,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 1912,
"name": "_totalWeight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1421,
"src": "7487:12:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1914,
"name": "_totalWeight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1421,
"src": "7507:12:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1916,
"name": "oldWeight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1882,
"src": "7526:9:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 1917,
"name": "denorm",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1831,
"src": "7537:6:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 1915,
"name": "bsub",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 914,
"src": "7521:4:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 1918,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7521:23:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 1913,
"name": "bsub",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 914,
"src": "7502:4:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 1919,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7502:43:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7487:58:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1921,
"nodeType": "ExpressionStatement",
"src": "7487:58:5"
}
]
}
},
"id": 1924,
"nodeType": "IfStatement",
"src": "7253:304:5",
"trueBody": {
"id": 1908,
"nodeType": "Block",
"src": "7277:165:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 1899,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 1891,
"name": "_totalWeight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1421,
"src": "7292:12:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1893,
"name": "_totalWeight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1421,
"src": "7312:12:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1895,
"name": "denorm",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1831,
"src": "7331:6:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 1896,
"name": "oldWeight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1882,
"src": "7339:9:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 1894,
"name": "bsub",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 914,
"src": "7326:4:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 1897,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7326:23:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 1892,
"name": "badd",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 887,
"src": "7307:4:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 1898,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7307:43:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7292:58:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1900,
"nodeType": "ExpressionStatement",
"src": "7292:58:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1904,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 1902,
"name": "_totalWeight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1421,
"src": "7373:12:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<=",
"rightExpression": {
"argumentTypes": null,
"id": 1903,
"name": "MAX_TOTAL_WEIGHT",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 64,
"src": "7389:16:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7373:32:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4d41585f544f54414c5f574549474854",
"id": 1905,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7407:22:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_55ceb599893e4bee215a5c1285d9b5c12334585fcdd4c2c71690e94257494440",
"typeString": "literal_string \"ERR_MAX_TOTAL_WEIGHT\""
},
"value": "ERR_MAX_TOTAL_WEIGHT"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_55ceb599893e4bee215a5c1285d9b5c12334585fcdd4c2c71690e94257494440",
"typeString": "literal_string \"ERR_MAX_TOTAL_WEIGHT\""
}
],
"id": 1901,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "7365:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 1906,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7365:65:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1907,
"nodeType": "ExpressionStatement",
"src": "7365:65:5"
}
]
}
},
{
"expression": {
"argumentTypes": null,
"id": 1930,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 1925,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "7575:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 1927,
"indexExpression": {
"argumentTypes": null,
"id": 1926,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1827,
"src": "7584:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "7575:15:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 1928,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberName": "denorm",
"nodeType": "MemberAccess",
"referencedDeclaration": 1320,
"src": "7575:22:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 1929,
"name": "denorm",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1831,
"src": "7600:6:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7575:31:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1931,
"nodeType": "ExpressionStatement",
"src": "7575:31:5"
},
{
"assignments": [
1933
],
"declarations": [
{
"constant": false,
"id": 1933,
"name": "oldBalance",
"nodeType": "VariableDeclaration",
"scope": 1996,
"src": "7682:15:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1932,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "7682:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 1938,
"initialValue": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 1934,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "7700:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 1936,
"indexExpression": {
"argumentTypes": null,
"id": 1935,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1827,
"src": "7709:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "7700:15:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 1937,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 1322,
"src": "7700:23:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "7682:41:5"
},
{
"expression": {
"argumentTypes": null,
"id": 1944,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 1939,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "7734:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 1941,
"indexExpression": {
"argumentTypes": null,
"id": 1940,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1827,
"src": "7743:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "7734:15:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 1942,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 1322,
"src": "7734:23:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 1943,
"name": "balance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1829,
"src": "7760:7:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7734:33:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1945,
"nodeType": "ExpressionStatement",
"src": "7734:33:5"
},
{
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1948,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 1946,
"name": "balance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1829,
"src": "7782:7:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"argumentTypes": null,
"id": 1947,
"name": "oldBalance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1933,
"src": "7792:10:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7782:20:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": {
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1962,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 1960,
"name": "balance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1829,
"src": "7902:7:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"id": 1961,
"name": "oldBalance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1933,
"src": "7912:10:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7902:20:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": null,
"id": 1994,
"nodeType": "IfStatement",
"src": "7898:410:5",
"trueBody": {
"id": 1993,
"nodeType": "Block",
"src": "7924:384:5",
"statements": [
{
"assignments": [
1964
],
"declarations": [
{
"constant": false,
"id": 1964,
"name": "tokenBalanceWithdrawn",
"nodeType": "VariableDeclaration",
"scope": 1993,
"src": "8017:26:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1963,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "8017:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 1969,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1966,
"name": "oldBalance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1933,
"src": "8051:10:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 1967,
"name": "balance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1829,
"src": "8063:7:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 1965,
"name": "bsub",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 914,
"src": "8046:4:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 1968,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8046:25:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "8017:54:5"
},
{
"assignments": [
1971
],
"declarations": [
{
"constant": false,
"id": 1971,
"name": "tokenExitFee",
"nodeType": "VariableDeclaration",
"scope": 1993,
"src": "8086:17:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1970,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "8086:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 1976,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1973,
"name": "tokenBalanceWithdrawn",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1964,
"src": "8111:21:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 1974,
"name": "EXIT_FEE",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 51,
"src": "8134:8:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 1972,
"name": "bmul",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 997,
"src": "8106:4:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 1975,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8106:37:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "8086:57:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1978,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1827,
"src": "8174:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 1979,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "8181:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 1980,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "8181:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1982,
"name": "tokenBalanceWithdrawn",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1964,
"src": "8198:21:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 1983,
"name": "tokenExitFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1971,
"src": "8221:12:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 1981,
"name": "bsub",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 914,
"src": "8193:4:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 1984,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8193:41:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 1977,
"name": "_pushUnderlying",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3426,
"src": "8158:15:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,address,uint256)"
}
},
"id": 1985,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8158:77:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1986,
"nodeType": "ExpressionStatement",
"src": "8158:77:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1988,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1827,
"src": "8266:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 1989,
"name": "_factory",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1404,
"src": "8273:8:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 1990,
"name": "tokenExitFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1971,
"src": "8283:12:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 1987,
"name": "_pushUnderlying",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3426,
"src": "8250:15:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,address,uint256)"
}
},
"id": 1991,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8250:46:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1992,
"nodeType": "ExpressionStatement",
"src": "8250:46:5"
}
]
}
},
"id": 1995,
"nodeType": "IfStatement",
"src": "7778:530:5",
"trueBody": {
"id": 1959,
"nodeType": "Block",
"src": "7804:88:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1950,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1827,
"src": "7835:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 1951,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "7842:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 1952,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "7842:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 1954,
"name": "balance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1829,
"src": "7859:7:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 1955,
"name": "oldBalance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1933,
"src": "7868:10:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 1953,
"name": "bsub",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 914,
"src": "7854:4:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 1956,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7854:25:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 1949,
"name": "_pullUnderlying",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3401,
"src": "7819:15:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,address,uint256)"
}
},
"id": 1957,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7819:61:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 1958,
"nodeType": "ExpressionStatement",
"src": "7819:61:5"
}
]
}
}
]
},
"documentation": null,
"id": 1997,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 1834,
"modifierName": {
"argumentTypes": null,
"id": 1833,
"name": "_logs_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1372,
"src": "6759:6:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "6759:6:5"
},
{
"arguments": null,
"id": 1836,
"modifierName": {
"argumentTypes": null,
"id": 1835,
"name": "_lock_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1390,
"src": "6775:6:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "6775:6:5"
}
],
"name": "rebind",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1832,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1827,
"name": "token",
"nodeType": "VariableDeclaration",
"scope": 1997,
"src": "6692:13:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 1826,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "6692:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 1829,
"name": "balance",
"nodeType": "VariableDeclaration",
"scope": 1997,
"src": "6707:12:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1828,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "6707:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 1831,
"name": "denorm",
"nodeType": "VariableDeclaration",
"scope": 1997,
"src": "6721:11:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1830,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "6721:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "6691:42:5"
},
"returnParameters": {
"id": 1837,
"nodeType": "ParameterList",
"parameters": [],
"src": "6787:0:5"
},
"scope": 3473,
"src": "6676:1639:5",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 2115,
"nodeType": "Block",
"src": "8409:955:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 2010,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 2007,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "8430:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 2008,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "8430:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"id": 2009,
"name": "_controller",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1406,
"src": "8444:11:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "8430:25:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f434f4e54524f4c4c4552",
"id": 2011,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8457:20:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_0479bbd6e0e904a96491e3adc0eda9022c19acd57f4922725f8618b3a0372668",
"typeString": "literal_string \"ERR_NOT_CONTROLLER\""
},
"value": "ERR_NOT_CONTROLLER"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_0479bbd6e0e904a96491e3adc0eda9022c19acd57f4922725f8618b3a0372668",
"typeString": "literal_string \"ERR_NOT_CONTROLLER\""
}
],
"id": 2006,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "8422:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 2012,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8422:56:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2013,
"nodeType": "ExpressionStatement",
"src": "8422:56:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2015,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "8497:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2017,
"indexExpression": {
"argumentTypes": null,
"id": 2016,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1999,
"src": "8506:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "8497:15:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 2018,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "bound",
"nodeType": "MemberAccess",
"referencedDeclaration": 1316,
"src": "8497:21:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f424f554e44",
"id": 2019,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8520:15:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_86a01019fb9a24504897a9ddf06d43e29c7ad173d46588f4f7aa1ef14d3c847c",
"typeString": "literal_string \"ERR_NOT_BOUND\""
},
"value": "ERR_NOT_BOUND"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_86a01019fb9a24504897a9ddf06d43e29c7ad173d46588f4f7aa1ef14d3c847c",
"typeString": "literal_string \"ERR_NOT_BOUND\""
}
],
"id": 2014,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "8489:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 2020,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8489:47:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2021,
"nodeType": "ExpressionStatement",
"src": "8489:47:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2024,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "8555:11:5",
"subExpression": {
"argumentTypes": null,
"id": 2023,
"name": "_finalized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1412,
"src": "8556:10:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f49535f46494e414c495a4544",
"id": 2025,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8568:18:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_4e8186530b7c98466f35e0b14182dc6e751c9b9644c5bf1204c0609f892e5bbe",
"typeString": "literal_string \"ERR_IS_FINALIZED\""
},
"value": "ERR_IS_FINALIZED"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_4e8186530b7c98466f35e0b14182dc6e751c9b9644c5bf1204c0609f892e5bbe",
"typeString": "literal_string \"ERR_IS_FINALIZED\""
}
],
"id": 2022,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "8547:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 2026,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8547:40:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2027,
"nodeType": "ExpressionStatement",
"src": "8547:40:5"
},
{
"assignments": [
2029
],
"declarations": [
{
"constant": false,
"id": 2029,
"name": "tokenBalance",
"nodeType": "VariableDeclaration",
"scope": 2115,
"src": "8600:17:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2028,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "8600:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2034,
"initialValue": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2030,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "8620:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2032,
"indexExpression": {
"argumentTypes": null,
"id": 2031,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1999,
"src": "8629:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "8620:15:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 2033,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 1322,
"src": "8620:23:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "8600:43:5"
},
{
"assignments": [
2036
],
"declarations": [
{
"constant": false,
"id": 2036,
"name": "tokenExitFee",
"nodeType": "VariableDeclaration",
"scope": 2115,
"src": "8654:17:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2035,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "8654:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2041,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2038,
"name": "tokenBalance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2029,
"src": "8679:12:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 2039,
"name": "EXIT_FEE",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 51,
"src": "8693:8:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2037,
"name": "bmul",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 997,
"src": "8674:4:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 2040,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8674:28:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "8654:48:5"
},
{
"expression": {
"argumentTypes": null,
"id": 2050,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 2042,
"name": "_totalWeight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1421,
"src": "8715:12:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2044,
"name": "_totalWeight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1421,
"src": "8735:12:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2045,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "8749:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2047,
"indexExpression": {
"argumentTypes": null,
"id": 2046,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1999,
"src": "8758:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "8749:15:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 2048,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "denorm",
"nodeType": "MemberAccess",
"referencedDeclaration": 1320,
"src": "8749:22:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2043,
"name": "bsub",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 914,
"src": "8730:4:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 2049,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8730:42:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "8715:57:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 2051,
"nodeType": "ExpressionStatement",
"src": "8715:57:5"
},
{
"assignments": [
2053
],
"declarations": [
{
"constant": false,
"id": 2053,
"name": "index",
"nodeType": "VariableDeclaration",
"scope": 2115,
"src": "8882:10:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2052,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "8882:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2058,
"initialValue": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2054,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "8895:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2056,
"indexExpression": {
"argumentTypes": null,
"id": 2055,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1999,
"src": "8904:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "8895:15:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 2057,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "index",
"nodeType": "MemberAccess",
"referencedDeclaration": 1318,
"src": "8895:21:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "8882:34:5"
},
{
"assignments": [
2060
],
"declarations": [
{
"constant": false,
"id": 2060,
"name": "last",
"nodeType": "VariableDeclaration",
"scope": 2115,
"src": "8927:9:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2059,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "8927:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2065,
"initialValue": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 2064,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 2061,
"name": "_tokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1415,
"src": "8939:7:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage",
"typeString": "address[] storage ref"
}
},
"id": 2062,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "8939:14:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "-",
"rightExpression": {
"argumentTypes": null,
"hexValue": "31",
"id": 2063,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8956:1:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "8939:18:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "8927:30:5"
},
{
"expression": {
"argumentTypes": null,
"id": 2072,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2066,
"name": "_tokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1415,
"src": "8968:7:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage",
"typeString": "address[] storage ref"
}
},
"id": 2068,
"indexExpression": {
"argumentTypes": null,
"id": 2067,
"name": "index",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2053,
"src": "8976:5:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "8968:14:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2069,
"name": "_tokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1415,
"src": "8985:7:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage",
"typeString": "address[] storage ref"
}
},
"id": 2071,
"indexExpression": {
"argumentTypes": null,
"id": 2070,
"name": "last",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2060,
"src": "8993:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "8985:13:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "8968:30:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 2073,
"nodeType": "ExpressionStatement",
"src": "8968:30:5"
},
{
"expression": {
"argumentTypes": null,
"id": 2081,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2074,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "9009:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2078,
"indexExpression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2075,
"name": "_tokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1415,
"src": "9018:7:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage",
"typeString": "address[] storage ref"
}
},
"id": 2077,
"indexExpression": {
"argumentTypes": null,
"id": 2076,
"name": "index",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2053,
"src": "9026:5:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "9018:14:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "9009:24:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 2079,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberName": "index",
"nodeType": "MemberAccess",
"referencedDeclaration": 1318,
"src": "9009:30:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 2080,
"name": "index",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2053,
"src": "9042:5:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "9009:38:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 2082,
"nodeType": "ExpressionStatement",
"src": "9009:38:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"argumentTypes": null,
"id": 2083,
"name": "_tokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1415,
"src": "9058:7:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage",
"typeString": "address[] storage ref"
}
},
"id": 2085,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "pop",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "9058:11:5",
"typeDescriptions": {
"typeIdentifier": "t_function_arraypop_nonpayable$__$returns$__$",
"typeString": "function ()"
}
},
"id": 2086,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9058:13:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2087,
"nodeType": "ExpressionStatement",
"src": "9058:13:5"
},
{
"expression": {
"argumentTypes": null,
"id": 2097,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2088,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "9082:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2090,
"indexExpression": {
"argumentTypes": null,
"id": 2089,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1999,
"src": "9091:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "9082:15:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "66616c7365",
"id": 2092,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9129:5:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "false"
},
{
"argumentTypes": null,
"hexValue": "30",
"id": 2093,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9156:1:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
{
"argumentTypes": null,
"hexValue": "30",
"id": 2094,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9180:1:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
{
"argumentTypes": null,
"hexValue": "30",
"id": 2095,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9205:1:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
}
],
"id": 2091,
"name": "Record",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1323,
"src": "9100:6:5",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_struct$_Record_$1323_storage_ptr_$",
"typeString": "type(struct BPool.Record storage pointer)"
}
},
"id": 2096,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "structConstructorCall",
"lValueRequested": false,
"names": [
"bound",
"index",
"denorm",
"balance"
],
"nodeType": "FunctionCall",
"src": "9100:118:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_memory",
"typeString": "struct BPool.Record memory"
}
},
"src": "9082:136:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 2098,
"nodeType": "ExpressionStatement",
"src": "9082:136:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2100,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1999,
"src": "9247:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 2101,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "9254:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 2102,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "9254:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2104,
"name": "tokenBalance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2029,
"src": "9271:12:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 2105,
"name": "tokenExitFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2036,
"src": "9285:12:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2103,
"name": "bsub",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 914,
"src": "9266:4:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 2106,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9266:32:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2099,
"name": "_pushUnderlying",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3426,
"src": "9231:15:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,address,uint256)"
}
},
"id": 2107,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9231:68:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2108,
"nodeType": "ExpressionStatement",
"src": "9231:68:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2110,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1999,
"src": "9326:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 2111,
"name": "_factory",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1404,
"src": "9333:8:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 2112,
"name": "tokenExitFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2036,
"src": "9343:12:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2109,
"name": "_pushUnderlying",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3426,
"src": "9310:15:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,address,uint256)"
}
},
"id": 2113,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9310:46:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2114,
"nodeType": "ExpressionStatement",
"src": "9310:46:5"
}
]
},
"documentation": null,
"id": 2116,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 2002,
"modifierName": {
"argumentTypes": null,
"id": 2001,
"name": "_logs_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1372,
"src": "8381:6:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "8381:6:5"
},
{
"arguments": null,
"id": 2004,
"modifierName": {
"argumentTypes": null,
"id": 2003,
"name": "_lock_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1390,
"src": "8397:6:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "8397:6:5"
}
],
"name": "unbind",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 2000,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1999,
"name": "token",
"nodeType": "VariableDeclaration",
"scope": 2116,
"src": "8339:13:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 1998,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "8339:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "8338:15:5"
},
"returnParameters": {
"id": 2005,
"nodeType": "ParameterList",
"parameters": [],
"src": "8409:0:5"
},
"scope": 3473,
"src": "8323:1041:5",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 2147,
"nodeType": "Block",
"src": "9533:141:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2126,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "9552:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2128,
"indexExpression": {
"argumentTypes": null,
"id": 2127,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2118,
"src": "9561:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "9552:15:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 2129,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "bound",
"nodeType": "MemberAccess",
"referencedDeclaration": 1316,
"src": "9552:21:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f424f554e44",
"id": 2130,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9575:15:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_86a01019fb9a24504897a9ddf06d43e29c7ad173d46588f4f7aa1ef14d3c847c",
"typeString": "literal_string \"ERR_NOT_BOUND\""
},
"value": "ERR_NOT_BOUND"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_86a01019fb9a24504897a9ddf06d43e29c7ad173d46588f4f7aa1ef14d3c847c",
"typeString": "literal_string \"ERR_NOT_BOUND\""
}
],
"id": 2125,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "9544:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 2131,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9544:47:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2132,
"nodeType": "ExpressionStatement",
"src": "9544:47:5"
},
{
"expression": {
"argumentTypes": null,
"id": 2145,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2133,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "9602:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2135,
"indexExpression": {
"argumentTypes": null,
"id": 2134,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2118,
"src": "9611:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "9602:15:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 2136,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 1322,
"src": "9602:23:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2142,
"name": "this",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5280,
"src": "9660:4:5",
"typeDescriptions": {
"typeIdentifier": "t_contract$_BPool_$3473",
"typeString": "contract BPool"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_BPool_$3473",
"typeString": "contract BPool"
}
],
"id": 2141,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "9652:7:5",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": "address"
},
"id": 2143,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9652:13:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2138,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2118,
"src": "9635:5:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 2137,
"name": "IERC20",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3543,
"src": "9628:6:5",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_IERC20_$3543_$",
"typeString": "type(contract IERC20)"
}
},
"id": 2139,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9628:13:5",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3543",
"typeString": "contract IERC20"
}
},
"id": 2140,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "balanceOf",
"nodeType": "MemberAccess",
"referencedDeclaration": 3504,
"src": "9628:23:5",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
"typeString": "function (address) view external returns (uint256)"
}
},
"id": 2144,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9628:38:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "9602:64:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 2146,
"nodeType": "ExpressionStatement",
"src": "9602:64:5"
}
]
},
"documentation": null,
"id": 2148,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 2121,
"modifierName": {
"argumentTypes": null,
"id": 2120,
"name": "_logs_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1372,
"src": "9505:6:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "9505:6:5"
},
{
"arguments": null,
"id": 2123,
"modifierName": {
"argumentTypes": null,
"id": 2122,
"name": "_lock_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1390,
"src": "9521:6:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "9521:6:5"
}
],
"name": "gulp",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 2119,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 2118,
"name": "token",
"nodeType": "VariableDeclaration",
"scope": 2148,
"src": "9463:13:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 2117,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "9463:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "9462:15:5"
},
"returnParameters": {
"id": 2124,
"nodeType": "ParameterList",
"parameters": [],
"src": "9533:0:5"
},
"scope": 3473,
"src": "9449:225:5",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 2199,
"nodeType": "Block",
"src": "9821:352:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2160,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "9840:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2162,
"indexExpression": {
"argumentTypes": null,
"id": 2161,
"name": "tokenIn",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2150,
"src": "9849:7:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "9840:17:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 2163,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "bound",
"nodeType": "MemberAccess",
"referencedDeclaration": 1316,
"src": "9840:23:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f424f554e44",
"id": 2164,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9865:15:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_86a01019fb9a24504897a9ddf06d43e29c7ad173d46588f4f7aa1ef14d3c847c",
"typeString": "literal_string \"ERR_NOT_BOUND\""
},
"value": "ERR_NOT_BOUND"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_86a01019fb9a24504897a9ddf06d43e29c7ad173d46588f4f7aa1ef14d3c847c",
"typeString": "literal_string \"ERR_NOT_BOUND\""
}
],
"id": 2159,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "9832:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 2165,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9832:49:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2166,
"nodeType": "ExpressionStatement",
"src": "9832:49:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2168,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "9900:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2170,
"indexExpression": {
"argumentTypes": null,
"id": 2169,
"name": "tokenOut",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2152,
"src": "9909:8:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "9900:18:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 2171,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "bound",
"nodeType": "MemberAccess",
"referencedDeclaration": 1316,
"src": "9900:24:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f424f554e44",
"id": 2172,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9926:15:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_86a01019fb9a24504897a9ddf06d43e29c7ad173d46588f4f7aa1ef14d3c847c",
"typeString": "literal_string \"ERR_NOT_BOUND\""
},
"value": "ERR_NOT_BOUND"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_86a01019fb9a24504897a9ddf06d43e29c7ad173d46588f4f7aa1ef14d3c847c",
"typeString": "literal_string \"ERR_NOT_BOUND\""
}
],
"id": 2167,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "9892:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 2173,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9892:50:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2174,
"nodeType": "ExpressionStatement",
"src": "9892:50:5"
},
{
"assignments": [
2176
],
"declarations": [
{
"constant": false,
"id": 2176,
"name": "inRecord",
"nodeType": "VariableDeclaration",
"scope": 2199,
"src": "9953:23:5",
"stateVariable": false,
"storageLocation": "storage",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage_ptr",
"typeString": "struct BPool.Record"
},
"typeName": {
"contractScope": null,
"id": 2175,
"name": "Record",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 1323,
"src": "9953:6:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage_ptr",
"typeString": "struct BPool.Record"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2180,
"initialValue": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2177,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "9979:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2179,
"indexExpression": {
"argumentTypes": null,
"id": 2178,
"name": "tokenIn",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2150,
"src": "9988:7:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "9979:17:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "9953:43:5"
},
{
"assignments": [
2182
],
"declarations": [
{
"constant": false,
"id": 2182,
"name": "outRecord",
"nodeType": "VariableDeclaration",
"scope": 2199,
"src": "10007:24:5",
"stateVariable": false,
"storageLocation": "storage",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage_ptr",
"typeString": "struct BPool.Record"
},
"typeName": {
"contractScope": null,
"id": 2181,
"name": "Record",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 1323,
"src": "10007:6:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage_ptr",
"typeString": "struct BPool.Record"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2186,
"initialValue": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2183,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "10034:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2185,
"indexExpression": {
"argumentTypes": null,
"id": 2184,
"name": "tokenOut",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2152,
"src": "10043:8:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "10034:18:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "10007:45:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 2188,
"name": "inRecord",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2176,
"src": "10084:8:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage_ptr",
"typeString": "struct BPool.Record storage pointer"
}
},
"id": 2189,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 1322,
"src": "10084:16:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 2190,
"name": "inRecord",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2176,
"src": "10102:8:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage_ptr",
"typeString": "struct BPool.Record storage pointer"
}
},
"id": 2191,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "denorm",
"nodeType": "MemberAccess",
"referencedDeclaration": 1320,
"src": "10102:15:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 2192,
"name": "outRecord",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2182,
"src": "10119:9:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage_ptr",
"typeString": "struct BPool.Record storage pointer"
}
},
"id": 2193,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 1322,
"src": "10119:17:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 2194,
"name": "outRecord",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2182,
"src": "10138:9:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage_ptr",
"typeString": "struct BPool.Record storage pointer"
}
},
"id": 2195,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "denorm",
"nodeType": "MemberAccess",
"referencedDeclaration": 1320,
"src": "10138:16:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 2196,
"name": "_swapFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1410,
"src": "10156:8:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"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"
}
],
"id": 2187,
"name": "calcSpotPrice",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 324,
"src": "10070:13:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256,uint256,uint256,uint256) pure returns (uint256)"
}
},
"id": 2197,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "10070:95:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 2158,
"id": 2198,
"nodeType": "Return",
"src": "10063:102:5"
}
]
},
"documentation": null,
"id": 2200,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 2155,
"modifierName": {
"argumentTypes": null,
"id": 2154,
"name": "_viewlock_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1400,
"src": "9771:10:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "9771:10:5"
}
],
"name": "getSpotPrice",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 2153,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 2150,
"name": "tokenIn",
"nodeType": "VariableDeclaration",
"scope": 2200,
"src": "9704:15:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 2149,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "9704:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 2152,
"name": "tokenOut",
"nodeType": "VariableDeclaration",
"scope": 2200,
"src": "9721:16:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 2151,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "9721:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "9703:35:5"
},
"returnParameters": {
"id": 2158,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 2157,
"name": "spotPrice",
"nodeType": "VariableDeclaration",
"scope": 2200,
"src": "9800:14:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2156,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "9800:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "9799:16:5"
},
"scope": 3473,
"src": "9682:491:5",
"stateMutability": "view",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 2251,
"nodeType": "Block",
"src": "10327:345:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2212,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "10346:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2214,
"indexExpression": {
"argumentTypes": null,
"id": 2213,
"name": "tokenIn",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2202,
"src": "10355:7:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "10346:17:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 2215,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "bound",
"nodeType": "MemberAccess",
"referencedDeclaration": 1316,
"src": "10346:23:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f424f554e44",
"id": 2216,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10371:15:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_86a01019fb9a24504897a9ddf06d43e29c7ad173d46588f4f7aa1ef14d3c847c",
"typeString": "literal_string \"ERR_NOT_BOUND\""
},
"value": "ERR_NOT_BOUND"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_86a01019fb9a24504897a9ddf06d43e29c7ad173d46588f4f7aa1ef14d3c847c",
"typeString": "literal_string \"ERR_NOT_BOUND\""
}
],
"id": 2211,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "10338:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 2217,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "10338:49:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2218,
"nodeType": "ExpressionStatement",
"src": "10338:49:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2220,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "10406:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2222,
"indexExpression": {
"argumentTypes": null,
"id": 2221,
"name": "tokenOut",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2204,
"src": "10415:8:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "10406:18:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 2223,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "bound",
"nodeType": "MemberAccess",
"referencedDeclaration": 1316,
"src": "10406:24:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f424f554e44",
"id": 2224,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10432:15:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_86a01019fb9a24504897a9ddf06d43e29c7ad173d46588f4f7aa1ef14d3c847c",
"typeString": "literal_string \"ERR_NOT_BOUND\""
},
"value": "ERR_NOT_BOUND"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_86a01019fb9a24504897a9ddf06d43e29c7ad173d46588f4f7aa1ef14d3c847c",
"typeString": "literal_string \"ERR_NOT_BOUND\""
}
],
"id": 2219,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "10398:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 2225,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "10398:50:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2226,
"nodeType": "ExpressionStatement",
"src": "10398:50:5"
},
{
"assignments": [
2228
],
"declarations": [
{
"constant": false,
"id": 2228,
"name": "inRecord",
"nodeType": "VariableDeclaration",
"scope": 2251,
"src": "10459:23:5",
"stateVariable": false,
"storageLocation": "storage",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage_ptr",
"typeString": "struct BPool.Record"
},
"typeName": {
"contractScope": null,
"id": 2227,
"name": "Record",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 1323,
"src": "10459:6:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage_ptr",
"typeString": "struct BPool.Record"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2232,
"initialValue": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2229,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "10485:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2231,
"indexExpression": {
"argumentTypes": null,
"id": 2230,
"name": "tokenIn",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2202,
"src": "10494:7:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "10485:17:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "10459:43:5"
},
{
"assignments": [
2234
],
"declarations": [
{
"constant": false,
"id": 2234,
"name": "outRecord",
"nodeType": "VariableDeclaration",
"scope": 2251,
"src": "10513:24:5",
"stateVariable": false,
"storageLocation": "storage",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage_ptr",
"typeString": "struct BPool.Record"
},
"typeName": {
"contractScope": null,
"id": 2233,
"name": "Record",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 1323,
"src": "10513:6:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage_ptr",
"typeString": "struct BPool.Record"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2238,
"initialValue": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2235,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "10540:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2237,
"indexExpression": {
"argumentTypes": null,
"id": 2236,
"name": "tokenOut",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2204,
"src": "10549:8:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "10540:18:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "10513:45:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 2240,
"name": "inRecord",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2228,
"src": "10590:8:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage_ptr",
"typeString": "struct BPool.Record storage pointer"
}
},
"id": 2241,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 1322,
"src": "10590:16:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 2242,
"name": "inRecord",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2228,
"src": "10608:8:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage_ptr",
"typeString": "struct BPool.Record storage pointer"
}
},
"id": 2243,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "denorm",
"nodeType": "MemberAccess",
"referencedDeclaration": 1320,
"src": "10608:15:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 2244,
"name": "outRecord",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2234,
"src": "10625:9:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage_ptr",
"typeString": "struct BPool.Record storage pointer"
}
},
"id": 2245,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 1322,
"src": "10625:17:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 2246,
"name": "outRecord",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2234,
"src": "10644:9:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage_ptr",
"typeString": "struct BPool.Record storage pointer"
}
},
"id": 2247,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "denorm",
"nodeType": "MemberAccess",
"referencedDeclaration": 1320,
"src": "10644:16:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"hexValue": "30",
"id": 2248,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10662:1:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
}
],
"id": 2239,
"name": "calcSpotPrice",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 324,
"src": "10576:13:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256,uint256,uint256,uint256) pure returns (uint256)"
}
},
"id": 2249,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "10576:88:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 2210,
"id": 2250,
"nodeType": "Return",
"src": "10569:95:5"
}
]
},
"documentation": null,
"id": 2252,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 2207,
"modifierName": {
"argumentTypes": null,
"id": 2206,
"name": "_viewlock_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1400,
"src": "10277:10:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "10277:10:5"
}
],
"name": "getSpotPriceSansFee",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 2205,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 2202,
"name": "tokenIn",
"nodeType": "VariableDeclaration",
"scope": 2252,
"src": "10210:15:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 2201,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "10210:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 2204,
"name": "tokenOut",
"nodeType": "VariableDeclaration",
"scope": 2252,
"src": "10227:16:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 2203,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "10227:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "10209:35:5"
},
"returnParameters": {
"id": 2210,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 2209,
"name": "spotPrice",
"nodeType": "VariableDeclaration",
"scope": 2252,
"src": "10306:14:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2208,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "10306:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "10305:16:5"
},
"scope": 3473,
"src": "10181:491:5",
"stateMutability": "view",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 2374,
"nodeType": "Block",
"src": "10803:825:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2265,
"name": "_finalized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1412,
"src": "10822:10:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f46494e414c495a4544",
"id": 2266,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10834:19:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_8e0a50e0802c41001c819a1d72124e98da239dcaeee85bac2236e5d8595f284f",
"typeString": "literal_string \"ERR_NOT_FINALIZED\""
},
"value": "ERR_NOT_FINALIZED"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_8e0a50e0802c41001c819a1d72124e98da239dcaeee85bac2236e5d8595f284f",
"typeString": "literal_string \"ERR_NOT_FINALIZED\""
}
],
"id": 2264,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "10814:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 2267,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "10814:40:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2268,
"nodeType": "ExpressionStatement",
"src": "10814:40:5"
},
{
"assignments": [
2270
],
"declarations": [
{
"constant": false,
"id": 2270,
"name": "poolTotal",
"nodeType": "VariableDeclaration",
"scope": 2374,
"src": "10867:14:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2269,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "10867:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2273,
"initialValue": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 2271,
"name": "totalSupply",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3813,
"src": "10884:11:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
"typeString": "function () view returns (uint256)"
}
},
"id": 2272,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "10884:13:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "10867:30:5"
},
{
"assignments": [
2275
],
"declarations": [
{
"constant": false,
"id": 2275,
"name": "ratio",
"nodeType": "VariableDeclaration",
"scope": 2374,
"src": "10908:10:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2274,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "10908:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2280,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2277,
"name": "poolAmountOut",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2254,
"src": "10926:13:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 2278,
"name": "poolTotal",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2270,
"src": "10941:9:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2276,
"name": "bdiv",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1057,
"src": "10921:4:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 2279,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "10921:30:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "10908:43:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 2284,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 2282,
"name": "ratio",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2275,
"src": "10970:5:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 2283,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10979:1:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "10970:10:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4d4154485f415050524f58",
"id": 2285,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10982:17:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_38839817361c628b17e457bae64f619c23ab542714e93cfb021dbd3ddd466187",
"typeString": "literal_string \"ERR_MATH_APPROX\""
},
"value": "ERR_MATH_APPROX"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_38839817361c628b17e457bae64f619c23ab542714e93cfb021dbd3ddd466187",
"typeString": "literal_string \"ERR_MATH_APPROX\""
}
],
"id": 2281,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "10962:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 2286,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "10962:38:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2287,
"nodeType": "ExpressionStatement",
"src": "10962:38:5"
},
{
"body": {
"id": 2362,
"nodeType": "Block",
"src": "11055:474:5",
"statements": [
{
"assignments": [
2300
],
"declarations": [
{
"constant": false,
"id": 2300,
"name": "t",
"nodeType": "VariableDeclaration",
"scope": 2362,
"src": "11070:9:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 2299,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "11070:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2304,
"initialValue": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2301,
"name": "_tokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1415,
"src": "11082:7:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage",
"typeString": "address[] storage ref"
}
},
"id": 2303,
"indexExpression": {
"argumentTypes": null,
"id": 2302,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2289,
"src": "11090:1:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "11082:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "11070:22:5"
},
{
"assignments": [
2306
],
"declarations": [
{
"constant": false,
"id": 2306,
"name": "bal",
"nodeType": "VariableDeclaration",
"scope": 2362,
"src": "11107:8:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2305,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "11107:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2311,
"initialValue": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2307,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "11118:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2309,
"indexExpression": {
"argumentTypes": null,
"id": 2308,
"name": "t",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2300,
"src": "11127:1:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "11118:11:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 2310,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 1322,
"src": "11118:19:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "11107:30:5"
},
{
"assignments": [
2313
],
"declarations": [
{
"constant": false,
"id": 2313,
"name": "tokenAmountIn",
"nodeType": "VariableDeclaration",
"scope": 2362,
"src": "11152:18:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2312,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "11152:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2318,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2315,
"name": "ratio",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2275,
"src": "11178:5:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 2316,
"name": "bal",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2306,
"src": "11185:3:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2314,
"name": "bmul",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 997,
"src": "11173:4:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 2317,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11173:16:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "11152:37:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 2322,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 2320,
"name": "tokenAmountIn",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2313,
"src": "11212:13:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 2321,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11229:1:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "11212:18:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4d4154485f415050524f58",
"id": 2323,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11232:17:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_38839817361c628b17e457bae64f619c23ab542714e93cfb021dbd3ddd466187",
"typeString": "literal_string \"ERR_MATH_APPROX\""
},
"value": "ERR_MATH_APPROX"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_38839817361c628b17e457bae64f619c23ab542714e93cfb021dbd3ddd466187",
"typeString": "literal_string \"ERR_MATH_APPROX\""
}
],
"id": 2319,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "11204:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 2324,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11204:46:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2325,
"nodeType": "ExpressionStatement",
"src": "11204:46:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 2331,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 2327,
"name": "tokenAmountIn",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2313,
"src": "11273:13:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<=",
"rightExpression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2328,
"name": "maxAmountsIn",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2257,
"src": "11290:12:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
"typeString": "uint256[] calldata"
}
},
"id": 2330,
"indexExpression": {
"argumentTypes": null,
"id": 2329,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2289,
"src": "11303:1:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "11290:15:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "11273:32:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4c494d49545f494e",
"id": 2332,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11307:14:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_7f6da07481837924baab3a15f838b3df11e328050f73de905838535dd369af68",
"typeString": "literal_string \"ERR_LIMIT_IN\""
},
"value": "ERR_LIMIT_IN"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_7f6da07481837924baab3a15f838b3df11e328050f73de905838535dd369af68",
"typeString": "literal_string \"ERR_LIMIT_IN\""
}
],
"id": 2326,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "11265:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 2333,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11265:57:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2334,
"nodeType": "ExpressionStatement",
"src": "11265:57:5"
},
{
"expression": {
"argumentTypes": null,
"id": 2346,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2335,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "11337:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2337,
"indexExpression": {
"argumentTypes": null,
"id": 2336,
"name": "t",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2300,
"src": "11346:1:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "11337:11:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 2338,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 1322,
"src": "11337:19:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2340,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "11364:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2342,
"indexExpression": {
"argumentTypes": null,
"id": 2341,
"name": "t",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2300,
"src": "11373:1:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "11364:11:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 2343,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 1322,
"src": "11364:19:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 2344,
"name": "tokenAmountIn",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2313,
"src": "11385:13:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2339,
"name": "badd",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 887,
"src": "11359:4:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 2345,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11359:40:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "11337:62:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 2347,
"nodeType": "ExpressionStatement",
"src": "11337:62:5"
},
{
"eventCall": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 2349,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "11428:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 2350,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "11428:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 2351,
"name": "t",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2300,
"src": "11440:1:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 2352,
"name": "tokenAmountIn",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2313,
"src": "11443:13:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2348,
"name": "LOG_JOIN",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1343,
"src": "11419:8:5",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,address,uint256)"
}
},
"id": 2353,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11419:38:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2354,
"nodeType": "EmitStatement",
"src": "11414:43:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2356,
"name": "t",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2300,
"src": "11488:1:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 2357,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "11491:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 2358,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "11491:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 2359,
"name": "tokenAmountIn",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2313,
"src": "11503:13:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2355,
"name": "_pullUnderlying",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3401,
"src": "11472:15:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,address,uint256)"
}
},
"id": 2360,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11472:45:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2361,
"nodeType": "ExpressionStatement",
"src": "11472:45:5"
}
]
},
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 2295,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 2292,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2289,
"src": "11030:1:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 2293,
"name": "_tokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1415,
"src": "11034:7:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage",
"typeString": "address[] storage ref"
}
},
"id": 2294,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "11034:14:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "11030:18:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 2363,
"initializationExpression": {
"assignments": [
2289
],
"declarations": [
{
"constant": false,
"id": 2289,
"name": "i",
"nodeType": "VariableDeclaration",
"scope": 2363,
"src": "11018:6:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2288,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "11018:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2291,
"initialValue": {
"argumentTypes": null,
"hexValue": "30",
"id": 2290,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11027:1:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"nodeType": "VariableDeclarationStatement",
"src": "11018:10:5"
},
"loopExpression": {
"expression": {
"argumentTypes": null,
"id": 2297,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "++",
"prefix": false,
"src": "11050:3:5",
"subExpression": {
"argumentTypes": null,
"id": 2296,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2289,
"src": "11050:1:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 2298,
"nodeType": "ExpressionStatement",
"src": "11050:3:5"
},
"nodeType": "ForStatement",
"src": "11013:516:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2365,
"name": "poolAmountOut",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2254,
"src": "11554:13:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2364,
"name": "_mintPoolShare",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3462,
"src": "11539:14:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
"typeString": "function (uint256)"
}
},
"id": 2366,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11539:29:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2367,
"nodeType": "ExpressionStatement",
"src": "11539:29:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 2369,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "11594:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 2370,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "11594:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 2371,
"name": "poolAmountOut",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2254,
"src": "11606:13:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2368,
"name": "_pushPoolShare",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3452,
"src": "11579:14:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,uint256)"
}
},
"id": 2372,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11579:41:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2373,
"nodeType": "ExpressionStatement",
"src": "11579:41:5"
}
]
},
"documentation": null,
"id": 2375,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 2260,
"modifierName": {
"argumentTypes": null,
"id": 2259,
"name": "_logs_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1372,
"src": "10775:6:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "10775:6:5"
},
{
"arguments": null,
"id": 2262,
"modifierName": {
"argumentTypes": null,
"id": 2261,
"name": "_lock_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1390,
"src": "10791:6:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "10791:6:5"
}
],
"name": "joinPool",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 2258,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 2254,
"name": "poolAmountOut",
"nodeType": "VariableDeclaration",
"scope": 2375,
"src": "10698:18:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2253,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "10698:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 2257,
"name": "maxAmountsIn",
"nodeType": "VariableDeclaration",
"scope": 2375,
"src": "10718:28:5",
"stateVariable": false,
"storageLocation": "calldata",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 2255,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "10718:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 2256,
"length": null,
"nodeType": "ArrayTypeName",
"src": "10718:6:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "10697:50:5"
},
"returnParameters": {
"id": 2263,
"nodeType": "ParameterList",
"parameters": [],
"src": "10803:0:5"
},
"scope": 3473,
"src": "10680:948:5",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "external"
},
{
"body": {
"id": 2516,
"nodeType": "Block",
"src": "11759:999:5",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2388,
"name": "_finalized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1412,
"src": "11778:10:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f46494e414c495a4544",
"id": 2389,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11790:19:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_8e0a50e0802c41001c819a1d72124e98da239dcaeee85bac2236e5d8595f284f",
"typeString": "literal_string \"ERR_NOT_FINALIZED\""
},
"value": "ERR_NOT_FINALIZED"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_8e0a50e0802c41001c819a1d72124e98da239dcaeee85bac2236e5d8595f284f",
"typeString": "literal_string \"ERR_NOT_FINALIZED\""
}
],
"id": 2387,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "11770:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 2390,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11770:40:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2391,
"nodeType": "ExpressionStatement",
"src": "11770:40:5"
},
{
"assignments": [
2393
],
"declarations": [
{
"constant": false,
"id": 2393,
"name": "poolTotal",
"nodeType": "VariableDeclaration",
"scope": 2516,
"src": "11823:14:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2392,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "11823:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2396,
"initialValue": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 2394,
"name": "totalSupply",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3813,
"src": "11840:11:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
"typeString": "function () view returns (uint256)"
}
},
"id": 2395,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11840:13:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "11823:30:5"
},
{
"assignments": [
2398
],
"declarations": [
{
"constant": false,
"id": 2398,
"name": "exitFee",
"nodeType": "VariableDeclaration",
"scope": 2516,
"src": "11864:12:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2397,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "11864:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2403,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2400,
"name": "poolAmountIn",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2377,
"src": "11884:12:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 2401,
"name": "EXIT_FEE",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 51,
"src": "11898:8:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2399,
"name": "bmul",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 997,
"src": "11879:4:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 2402,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11879:28:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "11864:43:5"
},
{
"assignments": [
2405
],
"declarations": [
{
"constant": false,
"id": 2405,
"name": "pAiAfterExitFee",
"nodeType": "VariableDeclaration",
"scope": 2516,
"src": "11918:20:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2404,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "11918:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2410,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2407,
"name": "poolAmountIn",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2377,
"src": "11946:12:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 2408,
"name": "exitFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2398,
"src": "11960:7:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2406,
"name": "bsub",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 914,
"src": "11941:4:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 2409,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11941:27:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "11918:50:5"
},
{
"assignments": [
2412
],
"declarations": [
{
"constant": false,
"id": 2412,
"name": "ratio",
"nodeType": "VariableDeclaration",
"scope": 2516,
"src": "11979:10:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2411,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "11979:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2417,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2414,
"name": "pAiAfterExitFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2405,
"src": "11997:15:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 2415,
"name": "poolTotal",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2393,
"src": "12014:9:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2413,
"name": "bdiv",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1057,
"src": "11992:4:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 2416,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11992:32:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "11979:45:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 2421,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 2419,
"name": "ratio",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2412,
"src": "12043:5:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 2420,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "12052:1:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "12043:10:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4d4154485f415050524f58",
"id": 2422,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "12055:17:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_38839817361c628b17e457bae64f619c23ab542714e93cfb021dbd3ddd466187",
"typeString": "literal_string \"ERR_MATH_APPROX\""
},
"value": "ERR_MATH_APPROX"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_38839817361c628b17e457bae64f619c23ab542714e93cfb021dbd3ddd466187",
"typeString": "literal_string \"ERR_MATH_APPROX\""
}
],
"id": 2418,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "12035:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 2423,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "12035:38:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2424,
"nodeType": "ExpressionStatement",
"src": "12035:38:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 2426,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "12101:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 2427,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "12101:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 2428,
"name": "poolAmountIn",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2377,
"src": "12113:12:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2425,
"name": "_pullPoolShare",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3439,
"src": "12086:14:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,uint256)"
}
},
"id": 2429,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "12086:40:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2430,
"nodeType": "ExpressionStatement",
"src": "12086:40:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2432,
"name": "_factory",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1404,
"src": "12152:8:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 2433,
"name": "exitFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2398,
"src": "12162:7:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2431,
"name": "_pushPoolShare",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3452,
"src": "12137:14:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,uint256)"
}
},
"id": 2434,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "12137:33:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2435,
"nodeType": "ExpressionStatement",
"src": "12137:33:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2437,
"name": "pAiAfterExitFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2405,
"src": "12196:15:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2436,
"name": "_burnPoolShare",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3472,
"src": "12181:14:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
"typeString": "function (uint256)"
}
},
"id": 2438,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "12181:31:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2439,
"nodeType": "ExpressionStatement",
"src": "12181:31:5"
},
{
"body": {
"id": 2514,
"nodeType": "Block",
"src": "12267:482:5",
"statements": [
{
"assignments": [
2452
],
"declarations": [
{
"constant": false,
"id": 2452,
"name": "t",
"nodeType": "VariableDeclaration",
"scope": 2514,
"src": "12282:9:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 2451,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "12282:7:5",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2456,
"initialValue": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2453,
"name": "_tokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1415,
"src": "12294:7:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage",
"typeString": "address[] storage ref"
}
},
"id": 2455,
"indexExpression": {
"argumentTypes": null,
"id": 2454,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2441,
"src": "12302:1:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "12294:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "12282:22:5"
},
{
"assignments": [
2458
],
"declarations": [
{
"constant": false,
"id": 2458,
"name": "bal",
"nodeType": "VariableDeclaration",
"scope": 2514,
"src": "12319:8:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2457,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "12319:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2463,
"initialValue": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2459,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "12330:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2461,
"indexExpression": {
"argumentTypes": null,
"id": 2460,
"name": "t",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2452,
"src": "12339:1:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "12330:11:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 2462,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 1322,
"src": "12330:19:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "12319:30:5"
},
{
"assignments": [
2465
],
"declarations": [
{
"constant": false,
"id": 2465,
"name": "tokenAmountOut",
"nodeType": "VariableDeclaration",
"scope": 2514,
"src": "12364:19:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2464,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "12364:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2470,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2467,
"name": "ratio",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2412,
"src": "12391:5:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 2468,
"name": "bal",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2458,
"src": "12398:3:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2466,
"name": "bmul",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 997,
"src": "12386:4:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 2469,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "12386:16:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "12364:38:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 2474,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 2472,
"name": "tokenAmountOut",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2465,
"src": "12425:14:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 2473,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "12443:1:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "12425:19:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4d4154485f415050524f58",
"id": 2475,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "12446:17:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_38839817361c628b17e457bae64f619c23ab542714e93cfb021dbd3ddd466187",
"typeString": "literal_string \"ERR_MATH_APPROX\""
},
"value": "ERR_MATH_APPROX"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_38839817361c628b17e457bae64f619c23ab542714e93cfb021dbd3ddd466187",
"typeString": "literal_string \"ERR_MATH_APPROX\""
}
],
"id": 2471,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "12417:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 2476,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "12417:47:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2477,
"nodeType": "ExpressionStatement",
"src": "12417:47:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 2483,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 2479,
"name": "tokenAmountOut",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2465,
"src": "12487:14:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">=",
"rightExpression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2480,
"name": "minAmountsOut",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2380,
"src": "12505:13:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
"typeString": "uint256[] calldata"
}
},
"id": 2482,
"indexExpression": {
"argumentTypes": null,
"id": 2481,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2441,
"src": "12519:1:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "12505:16:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "12487:34:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4c494d49545f4f5554",
"id": 2484,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "12523:15:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_665ff818e83fa8776541f5756d1025222aecfe18eeb105729691884778497705",
"typeString": "literal_string \"ERR_LIMIT_OUT\""
},
"value": "ERR_LIMIT_OUT"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_665ff818e83fa8776541f5756d1025222aecfe18eeb105729691884778497705",
"typeString": "literal_string \"ERR_LIMIT_OUT\""
}
],
"id": 2478,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
5253,
5254
],
"referencedDeclaration": 5254,
"src": "12479:7:5",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 2485,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "12479:60:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2486,
"nodeType": "ExpressionStatement",
"src": "12479:60:5"
},
{
"expression": {
"argumentTypes": null,
"id": 2498,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2487,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "12554:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2489,
"indexExpression": {
"argumentTypes": null,
"id": 2488,
"name": "t",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2452,
"src": "12563:1:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "12554:11:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 2490,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 1322,
"src": "12554:19:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2492,
"name": "_records",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1419,
"src": "12581:8:5",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Record_$1323_storage_$",
"typeString": "mapping(address => struct BPool.Record storage ref)"
}
},
"id": 2494,
"indexExpression": {
"argumentTypes": null,
"id": 2493,
"name": "t",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2452,
"src": "12590:1:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "12581:11:5",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Record_$1323_storage",
"typeString": "struct BPool.Record storage ref"
}
},
"id": 2495,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 1322,
"src": "12581:19:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 2496,
"name": "tokenAmountOut",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2465,
"src": "12602:14:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2491,
"name": "bsub",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 914,
"src": "12576:4:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 2497,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "12576:41:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "12554:63:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 2499,
"nodeType": "ExpressionStatement",
"src": "12554:63:5"
},
{
"eventCall": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 2501,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "12646:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 2502,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "12646:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 2503,
"name": "t",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2452,
"src": "12658:1:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 2504,
"name": "tokenAmountOut",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2465,
"src": "12661:14:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2500,
"name": "LOG_EXIT",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1351,
"src": "12637:8:5",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,address,uint256)"
}
},
"id": 2505,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "12637:39:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2506,
"nodeType": "EmitStatement",
"src": "12632:44:5"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2508,
"name": "t",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2452,
"src": "12707:1:5",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 2509,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5250,
"src": "12710:3:5",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 2510,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "12710:10:5",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 2511,
"name": "tokenAmountOut",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2465,
"src": "12722:14:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 2507,
"name": "_pushUnderlying",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3426,
"src": "12691:15:5",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,address,uint256)"
}
},
"id": 2512,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "12691:46:5",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 2513,
"nodeType": "ExpressionStatement",
"src": "12691:46:5"
}
]
},
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 2447,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 2444,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2441,
"src": "12242:1:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 2445,
"name": "_tokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1415,
"src": "12246:7:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_address_$dyn_storage",
"typeString": "address[] storage ref"
}
},
"id": 2446,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "12246:14:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "12242:18:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 2515,
"initializationExpression": {
"assignments": [
2441
],
"declarations": [
{
"constant": false,
"id": 2441,
"name": "i",
"nodeType": "VariableDeclaration",
"scope": 2515,
"src": "12230:6:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2440,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "12230:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2443,
"initialValue": {
"argumentTypes": null,
"hexValue": "30",
"id": 2442,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "12239:1:5",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"nodeType": "VariableDeclarationStatement",
"src": "12230:10:5"
},
"loopExpression": {
"expression": {
"argumentTypes": null,
"id": 2449,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "++",
"prefix": false,
"src": "12262:3:5",
"subExpression": {
"argumentTypes": null,
"id": 2448,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2441,
"src": "12262:1:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 2450,
"nodeType": "ExpressionStatement",
"src": "12262:3:5"
},
"nodeType": "ForStatement",
"src": "12225:524:5"
}
]
},
"documentation": null,
"id": 2517,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 2383,
"modifierName": {
"argumentTypes": null,
"id": 2382,
"name": "_logs_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1372,
"src": "11731:6:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "11731:6:5"
},
{
"arguments": null,
"id": 2385,
"modifierName": {
"argumentTypes": null,
"id": 2384,
"name": "_lock_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1390,
"src": "11747:6:5",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "11747:6:5"
}
],
"name": "exitPool",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 2381,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 2377,
"name": "poolAmountIn",
"nodeType": "VariableDeclaration",
"scope": 2517,
"src": "11654:17:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2376,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "11654:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 2380,
"name": "minAmountsOut",
"nodeType": "VariableDeclaration",
"scope": 2517,
"src": "11673:29:5",
"stateVariable": false,
"storageLocation": "calldata",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 2378,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "11673:4:5",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 2379,
"length": null,
"nodeType": "ArrayTypeName",
"src": "11673:6:5",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "11653:50:5"
},
"returnPa
View raw

(Sorry about that, but we can’t show files that are this big right now.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment